【问题标题】:multi value attribute in primary key rdbms主键 rdbms 中的多值属性
【发布时间】:2015-11-04 14:12:18
【问题描述】:

我正在创建一个新的数据库设计,但我遇到了一个问题。我有一个带有属性(A,B,C,D,E) 的表,这里 (A,B,C,D) 是唯一定义 E 的复合键。我的问题是属性 D 是多值的,它是主键的一部分。目前我正在考虑对 D 使用逗号分隔值,但它也有一些限制,因为在搜索 E 时,D 中的值应该与插入时的顺序相同.As-

设 D 是 i,j,k 所以我的表 T 是 A,B,C,D(i,j,k)->E

现在如果我想要结果,那么我应该以与 (A,B,C,D(i,j,k)) 相同的顺序触发查询。

所以我想知道有没有其他更好的方法来做这件事。

【问题讨论】:

  • 您的意思是“唯一确定 E”吗?
  • 是的。 A,B,C,D的完全组合只能确定E

标签: mysql database-design rdbms


【解决方案1】:

不要使用逗号分隔值作为复合主键中的字段之一。当您这样做时,您实际上是在创建一个不在第一范式中的表,即使它对 DBMS 来说可能看起来是 1NF。

第一个范式是在关系模型还是全新的时候设计的。其目的是保证对所有数据的密钥访问。不要以违背拥有密钥目的的方式定义密钥。

以下是要做的事情:首先将表中的行分解为 D 中每个单独值的单独行,这样 D 就不必再是多值了。这将符合 1NF,但可能会违反 2NF,因为非键值可能仅由 A、B 和 C 确定。您可能希望分解为两个表以符合 2NF。而且您可能还想标准化更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2023-03-18
    • 2016-03-04
    相关资源
    最近更新 更多