【问题标题】:What is the purpose of data modeling cardinality?数据建模基数的目的是什么?
【发布时间】:2012-09-30 18:15:00
【问题描述】:
我了解基数是什么,所以请不要解释它;-)
我想知道,在数据建模中做基数的目的是什么,以及我为什么要关心。
示例:在 ER 模型中,您创建关系并将基数添加到关系中。
我什么时候要在开发过程中进一步使用基数?我为什么要关心基数?
例如,在我完成 ER 模型后,我如何、何时以及在何处使用基数。
谢谢:-)
【问题讨论】:
标签:
database
database-design
entity-relationship
modeling
cardinality
【解决方案1】:
基数告诉您有关表格设计的一些重要信息。 1:m 关系需要子表中的外键列指向父主键列。多对多关系意味着一个外键指向两个参与者的 JOIN 表。
【解决方案2】:
基数是两个实体之间关系的重要信息。在对实际表架构进行建模时,您需要它们用于以后的模型。在不知道关系基数的情况下,无法对表和它们之间的键限制进行建模。
例如,一辆汽车必须正好有 4 个轮子,并且这些轮子必须恰好连接到一辆汽车上。如果没有基数,你可以拥有一辆有 3、1、0、12 等轮子的汽车,而且可以在其他汽车之间共享。当然,根据上下文,这可能有意义,但通常没有意义。
【解决方案3】:
数据模型是一组约束;没有限制,一切皆有可能。基数是一种(特殊的)约束。在大多数文化中,婚姻是完全两个人之间的关系。 (在某些文化中,这些人必须有不同的性别。)
数据建模的问题在于,您必须指定希望对数据施加的约束。一些约束(唯一的、外键)更重要,并且与其他约束(“薪水 关键和虚假之间。
【解决方案4】:
例如,在我完成一个 ER 模型后,我如何、何时以及在何处使用基数。
在物理创建数据库时,FK 的方向、NULL 能力和数量取决于 ER 图中关系的两个端点上的基数。它甚至可以“添加”或“删除”一些表和键。
例如:
- “1:N”关系表示为从“N”表到“1”表的 NOT NULL FK。你不能反其道而行之,保持相同的意思。
- “0..1:N”关系表示为从“N”到“0..1”表的可空 FK。
- “1:1”关系由两个 NOT NULL FK(也是键)形成循环引用1或通过将两个实体合并到一个物理表中来表示。
- “0..1:1”关系由两个 FK 表示,其中一个可以为 NULL(也在键下)。
- “0..1:0..1”关系由两个 FK(可 NULL 键和下键)表示,或者由具有特制键的联结表表示。
- “M:N”关系需要一个额外的(所谓的“联结”或“链接”)表。该表的键是从子表迁移的键的组合。
并非所有基数都可以(轻松)在物理数据库中以声明方式表示,但幸运的是那些往往最有用的...
1 插入新数据时出现先有鸡还是先有蛋的问题,通常通过将约束检查推迟到事务结束来解决。
【解决方案5】:
如果您正在创建应用程序的数据层并决定使用 ORM,那么它可能是实体框架。
有时您需要创建模型和模型图。此时,您将能够提取 ERD,查看您放在图表上的基数并创建正确的关系,以便您的数据层形状与您的数据库形状相匹配。