2015-11-04 50 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,您可能需要分解为两个表。而且你可能想要正常化甚至更多。