鍍金池/ 問答/數(shù)據(jù)庫/ 網(wǎng)上 設(shè)計物理層面的主鍵時所遵循的一些原則,具體是什么意思?

網(wǎng)上 設(shè)計物理層面的主鍵時所遵循的一些原則,具體是什么意思?

基于以上這兩個用途,下面給出了我在設(shè)計物理層面的主鍵時所遵循的一些原則:

  1. 主鍵應(yīng)當(dāng)是對用戶沒有意義的。如果用戶看到了一個表示多對多關(guān)系的連接表中的數(shù)據(jù),并抱怨它沒有什么用處,那就證明它的主鍵設(shè)計地很好。
  2. 主鍵應(yīng)該是單列的,以便提高連接和篩選操作的效率。

注:使用復(fù)合鍵的人通常有兩個理由為自己開脫,而這兩個理由都是錯誤的。其一是主鍵應(yīng)當(dāng)具有實際意義,然而,讓主鍵具有意義只不過是給人為地破壞數(shù)據(jù)庫提供了方便。其二是利用這種方法可以在描述多對多關(guān)系的連接表中使用兩個外部鍵來作為主鍵,我也反對這種做法,理由是:復(fù)合主鍵常常導(dǎo)致不良的外鍵,即當(dāng)連接表成為另一個從表的主表,而依據(jù)上面的第二種方法成為這個表主鍵的一部分,然,這個表又有可能再成為其它從表的主表,其主鍵又有可能成了其它從表主鍵的一部分,如此傳遞下去,越靠后的從表,其主鍵將會包含越多的列了。

第一點中,什么時候用戶會覺得表中數(shù)據(jù)沒有用???
比如一個成績表(學(xué)生id,課程id,成績),是讓用戶乍一看,覺得 單從 學(xué)生id和課程id看不出它們本身代表的是什么具體信息?還是說 成績表不應(yīng)該設(shè)置成 這三個字段?

因為如果設(shè)置成這三個字段, 這個表的主鍵就是 學(xué)生id和課程id的聯(lián)合主鍵, 又會導(dǎo)致 注:中的問題。

所以是 學(xué)生和課程表主鍵字段設(shè)計的錯誤?還是什么意思?

添加:
剛看了一下,有些項目是直接將 所有的表,主鍵都設(shè)置為 id自增,然后其他的表引用該id為外鍵,這樣就不會造成上述注:中的問題,
同時,學(xué)生 成績 課程 三個表中,成績的字段就變成了id 學(xué)生表的id 課程表的id 成績,這4個字段,
但是前面的 第一條依然沒有理解。

回答
編輯回答
笑忘初

第一點:

成績表里的 (學(xué)生id,課程id,成績) 字段固然重要,原文中 “主鍵應(yīng)當(dāng)是對用戶沒有意義的”,你理解錯了,你這成

績表的三個字段當(dāng)然都是重要有意義的,而我們需要一個字段來給這些數(shù)據(jù)編號,便于區(qū)分查找到,而這個自然又是自

增長,系統(tǒng)控制的,無須我們來操作的,這時就需要主鍵。

2018年4月7日 02:18