Database 如何设计主键和多值属性的表?

Database 如何设计主键和多值属性的表?,database,database-design,relational-database,relational-model,Database,Database Design,Relational Database,Relational Model,我对数据库设计感兴趣,现在正在阅读相关文献。 通过这本书,我遇到了一个奇怪的例子,让我感到不确定。 有一种关系 在这个表中,我们有一个复合主键(StudentID,Activity)。但是ActivityFee部分依赖于表的键(Activity->ActivityFee),因此作者建议将此关系划分为两个其他关系: 现在,如果我们看看STUDENT_活动,活动变成了外键,关系仍然有一个复合主键 我们得到了一个表,其中整列定义了一个复合主键,可以吗 如果不是,在这种情况下我们该怎么办?(可能定义

我对数据库设计感兴趣,现在正在阅读相关文献。 通过这本书,我遇到了一个奇怪的例子,让我感到不确定。 有一种关系

在这个表中,我们有一个复合主键(StudentID,Activity)。但是ActivityFee部分依赖于表的键(Activity->ActivityFee),因此作者建议将此关系划分为两个其他关系:

现在,如果我们看看STUDENT_活动,活动变成了外键,关系仍然有一个复合主键

我们得到了一个表,其中整列定义了一个复合主键,可以吗

如果不是,在这种情况下我们该怎么办?(可能定义代理密钥?)


为了消除可能的数据异常,处理多值属性(在我们的例子中是活动)的好方法是什么?

如果一个表只包含一个复合键,并且符合您的业务需求,那么它就是完美的


活动不是多值属性。每个元组的“活动”都有一个值。

如果一个表只包含一个复合键,并且符合您的业务需求,那么这个表就完全可以了


活动不是多值属性。每个元组的活动都有一个值。

复合候选键没有问题。(如果您的引用不涉及候选密钥,即如果它在任何其他情况下谈论主键,而不是碰巧只有一个候选密钥,则获取一个新的引用。)

你的文字将告诉你什么是好的和坏的设计。没有必要担心你所注意到的每一处财产都可能是“坏”的关系。它目前所处理的“好”是“正常化”所给予的

“活动”不是“多值属性”。“多值”属性是一个非关系概念。该术语经常被错误地用于表示非关系“表”中的某个“属性”,该“属性”在某种程度上(从未解释过)每个“行”有多个条目,或者用于关系表中的某个列,该列的值具有多个类似部分(集合、列表、包、表等),但在某种程度上(从未解释过)不适用于:,字符串和数字,或关系表中的列,其值包含多个不同部分(记录、元组等),但不知何故(从未解释)不适用于(比如)日期。(有时它甚至被误用为具有类似名称和值的一组属性,应该用一个属性替换,每个原始名称对应一行。)(这些只是不需要的设计的情况。)“Multivalued”被用作类似误用/滥用术语的反义词


在列或表中多次出现相同(值或)值的子代码本身也不是好的或坏的。同样,您的参考资料将告诉您什么是好的设计。

复合候选密钥没有问题。(如果您的引用不涉及候选密钥,即如果它在任何其他情况下谈论主键,而不是碰巧只有一个候选密钥,则获取一个新的引用。)

你的文字将告诉你什么是好的和坏的设计。没有必要担心你所注意到的每一处财产都可能是“坏”的关系。它目前所处理的“好”是“正常化”所给予的

“活动”不是“多值属性”。“多值”属性是一个非关系概念。该术语经常被错误地用于表示非关系“表”中的某个“属性”,该“属性”在某种程度上(从未解释过)每个“行”有多个条目,或者用于关系表中的某个列,该列的值具有多个类似部分(集合、列表、包、表等),但在某种程度上(从未解释过)不适用于:,字符串和数字,或关系表中的列,其值包含多个不同部分(记录、元组等),但不知何故(从未解释)不适用于(比如)日期。(有时它甚至被误用为具有类似名称和值的一组属性,应该用一个属性替换,每个原始名称对应一行。)(这些只是不需要的设计的情况。)“Multivalued”被用作类似误用/滥用术语的反义词

在列或表中多次出现相同(值或)值的子代码本身也不是好的或坏的。同样,你的推荐人会告诉你什么是好的设计