2017-10-19 55 views
1

我看了關於數據庫規範化的one tutorial on youtube如果我們更改主鍵值,爲什麼我們不必更改從屬列值?

表看起來是這樣的:

|Item(PK) | Supplier | Supplier Phone | Price| 
--------------------------------------------- 
| Xbox One| Microsoft| 1234   | 250 | 
--------------------------------------------- 
| PS4  | Sony  | 4321   | 300 | 
--------------------------------------------- 
| PS Vista| Sony  | 4321   | 400 | 
--------------------------------------------- 

按照教程此表是在2NF和每一列依賴於PK。

我不明白的是如何列供應商依賴於PK和具有相同的值爲不同的行。如果邏輯是B(供應商)依賴於A(PK),並且我們改變A,那麼B應該改變嗎?爲什麼在這種情況下,變更PK的供應商會保持不變?

+0

你有鏈接到本教程?因爲我想知道這張聲明背後的推理是在2NF ..電話顯然不取決於PK,因爲我們可以爲不同的電話擁有相同的項目。 – Moseleyi

+0

這就是爲什麼我感到困惑。這裏是鏈接https://www.youtube.com/watch?v=UrYLYV7WSHM&t=609s在9:38觀看 –

+0

你能解釋我們如何爲不同的手機配備相同的產品嗎? –

回答

0

TL; DR項目/ A爲PK(主鍵)意味着,只有一個供應商/ B每件商品/ A值的價值。它並不是說每個表只有一個值。

該視頻是無稽之談。他們正在遭受同樣的誤解,即「依賴」FD(功能依賴)& PKs作爲你的問題(所以也許這就是你得到它們的地方)以及許多其他誤解,他們不知道他們在說什麼。查找大學/大學教科書,幻燈片和/或課程(其中許多是免費在線的)。


我們可以談論的文件描述符,superkeys,唯一列集,CKS(候選鍵)& PK表或表變量的。如果在給定的業務/應用程序中可能出現的每個表值都將其作爲實例,則表變量具有這些事件中的一個的實例。

我不明白的是如何列供應商依賴於PK和具有相同的值爲不同的行。

當所確定的集合對於確定集合的每個給定值只能具有一個值時,列集在功能上依賴於另一列。

但這並不意味着不同的確定值具有不同的確定值。

superkey是一組在每一行中都有不同子值的列。 CK是超級密鑰,不包含更小的超級密鑰。 PK是你選擇PK的一些CK。 每個列集在功能上取決於每個超級鍵。其中一些是CK。其中一個可以是PK。

但是,這並不意味着一些子行其他比超密鑰/ CK/PK(和子行必須在功能上的定義依賴於他們)是獨一無二的。

如果邏輯是B(供應商)依賴於A(PK),並且我們改變A,那麼B應該改變嗎?

不是基於A是PK/CK。 A是PK/CK意味着A和A的每個超集都是唯一的。如果您在查看其他行或查看該行具有不同A值(不能位於任何一個表的任何其他行中)的意義上「更改A」,則不會限制B可以。

一些其他約束可能會限制B可以是什麼。例如,如果FD {供應商} - > {供應商電話}成立,那麼限制供應商電話可以在其他行中的內容,即使項目是PK不能。

是否有任何特定的FD成立取決於在給定情況下應該將哪些行放入表中&可能會出現什麼情況。那麼,什麼FD持有決定什麼超級CK是CK。然後你可以選擇CK作爲PK。

+0

請問您能解釋一下:「A sup erkey是一個獨特的列集。 CK(候選鍵)是不包含更小超級鍵的超級鍵。 PK(主鍵)是您選擇PK的一些CK(候選鍵)「在本例中,Whas是超級鍵? –

+0

(更新/更正)我編輯了我的答案以更正和澄清報價並添加了單獨的版本這些術語的*值*和*變量*。你是指什麼?該表的超級值爲{Item},{Price}及其所有超集。我不知道該表的所有超級鍵作爲一個變量,因爲你沒有提供足夠的信息(Re NFs,CKs,superkeys和/或FDs)(你甚至沒有提供足夠的信息來證明2NF是合理的。)這是所有絕對基本的,閱讀一些學術教科書的章節(s)正常化然後記住並使用的定義PS請採取我的其他意見。 – philipxy

0

這個混淆可能是由於電話號碼屬於客戶的誤解而產生的,實際上這是一個供應商編號。

在這種情況下,如果您有產品X,您知道它必須來自供應商Y,並且該供應商只有一個電話號碼Z.它表明Z直接依賴於X.如果您有XboX的電話號碼將是1234,如果你有一個PS4它將是4321.

當然,項目不依賴於手機,因爲你可以有多個項目爲同一個手機,但這是一個不同的步驟正常化。

那麼理想,我們將有供應商表姓名+電話,並在產品表僅供參考,以supplier_id

+0

好的,但項目和Suplier之間的依賴關係,如何2個不同的項目可以在2nf有相同的供應商? –

+0

我剛剛告訴過你,因爲在2NF沒關係,供應商取決於物品,這就是2NF所代表的一切,一切都取決於關鍵 - 無論你有50個物品是同一個供應商還是隻有一個。在3NF你通過拆分表刪除那些重複 – Moseleyi

+0

好的,你能解釋一下B是否依賴於A,我們改變A,B是否保持不變?這就是我的腦子:) –

相關問題