簡體   English   中英

為什么在3NF中使用此表?

[英]Why is this table in 3NF?

請考慮下表:

在此處輸入圖片說明

主鍵是由PatID和PhysName組成的復合鍵。 我的教授說這張桌子是第三普通形式。 我以為它甚至都不是第二范式,因為非鍵屬性Name不依賴於整個主鍵。 您只需查看PatID即可識別名稱。 它不依賴於PhysName。

為了真正知道該表是否在2NF中,您必須具有明確為您設計的功能依賴項。

從少量數據中推斷出FD是一項冒險的業務。 樣品越小,風險越大。

我們將不得不在這里看到有兩位醫生的病人,以查看名稱是否相同。 我希望是這樣,但這只是常識。

當您從課堂練習轉到數百萬美元的項目時,您會發現常識是數據分析的不可靠替代品。

給定一個表值,我們可以看到其中包含什么FD(功能依賴項),因此可以看到它的CK(候選鍵)以及它滿足的NF(標准形式)(不超過BCNF)。 (我們不知道FD就無法知道CK和NF。)

當FD(或任何約束)包含所有可能出現的值時,它就會包含在變量中。 然后,其CK和滿意的NF基於這些FD。 因此,對於一個變量,示例數據告訴我們某些FD 成立,而“瑣碎”的FD 必須成立,但對於其他FD,示例數據只是不告訴我們它們是否成立。

由於表沒有{PatId,PhysName}作為CK,因此您的講師必須表示具有該值的某個變量具有該CK。 (當然,無論如何,您都應該直接獲得值與變量。)為了考慮該變量具有該CK,他們必須確定以下內容:

  • 該表中包含以下行,這些行來自“名叫PhysName的醫生撫養了一個他們被識別為PatId並通過名字PatName知道的患者
  • 具有給定名稱的醫師每個只通過一個名稱知道具有給定ID的患者
  • (我們不知道這是錯誤的)兩個不同的醫生可以通過相同的ID來識別兩個不同的患者
  • 每個醫師都有一個唯一的名字
  • 每個醫師可能通過ID識別其每個患者
  • 醫師可能通過給定的ID識別出一名患者
  • 醫生可能僅通過一個ID來識別患者
  • “識別”可能始終表示實體和ID的1:1對應
  • 每個病人可能只有一個名字
  • 等等

您需要知道它是值還是變量,爭論變量和約束(包括FD)毫無意義,直到您對謂詞和BR(業務規則)達成一致。


PS Re BR,謂詞和約束:

命題是關於一種情況的陳述:“名叫'Scholl,F.'的醫生。 照看他們識別為99999並以名字'Gore,Z.'認識的患者。” 謂詞是從行名稱和值行到命題的語句模板:“名叫PhysName的醫師會撫養他們識別為PatId並以名字PatName認識的患者 ”。 變量保存在某種情況下構成真實命題的行。

BR業務規則 )給出可變的謂詞,並描述可能出現的情況。 因此,可以出現哪些表變量值,因此可以容納哪些FD,從而可以容納CK等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM