我正在创建一个新的数据库设计,我遇到了问题。我在这里有一个具有属性(A,B,C,D,E)的表(A,B,C,D)是唯一定义E的复合键。我的问题是属性D是多值的,这是主键的一部分。目前我在考虑使用逗号分隔的D值,但它也有一些限制,因为在搜索E时,D中的值应该与它们插入时的顺序相同。至于 -
设D是i,j,k所以我的表T是A,B,C,D(i,j,k) - > E
现在,如果我想要结果,那么我应该按照与(A,B,C,D(i,j,k))相同的顺序触发查询。
所以我想知道还有其他更好的办法来做这件事。
答案 0 :(得分:1)
不要将逗号分隔值用作复合主键中的某个字段。执行此操作时,您实际上正在创建一个不在First Normal Form中的表,即使它对DBMS来说可能看起来是1NF。
当关系模型是全新的时候,设计了第一范式。它的目的是保证对所有数据的密钥访问。不要以违背密钥的方式定义密钥。
这是做什么:首先将表的行分解为D中每个单独值的单独行,这样D就不必再是多值。这将符合1NF,但可能违反2NF,因为非键值可能仅由A,B和C确定。您可能希望分解为两个表以符合2NF。你可能想要比这更正常化。