2015-11-04 47 views
0

我正在創建一個新的數據庫設計,我陷入了一個問題。我有一個表(A,B,C,D,E)屬性(A,B,C,D)是唯一定義E的複合鍵。我的問題是屬性D是多值這是主鍵的一部分。目前我正在考慮使用逗號分隔值作爲D,但它也有一些限制,因爲在搜索E時,D中的值應該與它們插入的順序相同.As-主鍵rdbms中的多值屬性

設d是I,J,K,所以我的表T是A,B,C,d(I,J,K) - >電子

現在,如果我想要的結果那麼我應該按照與(A,B,C,D(i,j,k))相同的順序觸發查詢。

所以我想知道有沒有其他更好的方法來做這件事。

+0

你的意思是「哪個唯一確定E」? –

+0

是的。 A,B,C,D的完整組合只能確定E – placebo

回答

1

不要使用逗號分隔值作爲組合主鍵中的一個字段。當你這樣做時,你真的創建了一個不是第一範式的表,儘管它對於DBMS來說似乎是1NF。

當關系模型是全新的時候,第一範式被設計出來。它的目的是保證對所有數據的密鑰訪問。不要以破壞鑰匙目的的方式定義鑰匙。

以下是做什麼:首先將表中的行分解爲D中每個單獨值的單獨行,以便D不必再是多值。這將符合1NF,但可能會違反2NF,因爲非關鍵值可能由A,B和C確定。爲了符合2NF,您可能需要分解爲兩個表。而且你可能想要正常化甚至更多。