我的问题是如何从SQL-DDL模式中知道关系是一对一还是多对多还是一对多?
谢谢,
一对一关系在两端都有一个主键或唯一约束。
一对多关系只能在一端有主键或唯一约束。
多对多关系将有第三个表,其非唯一外键指向另外两个表。
仅当您使用外键来关联实体
- 它们将显示
1:x..y
关系,其中x为0或1,y为1到N - 在有外键约束的表上:
- x无法从DDL中确定。也就是说,执行一项强制性的儿童法案并不容易。 符号见http://en.wikipedia.org/wiki/Cardinality_%28data_modeling%29
- 在该列上唯一表示y = 1
- 非唯一表示y = N
实现N:N的链接表将有两个这样的关系
这可以在您可以从内置或第三方工具生成的数据库图中看到。例子:
- SQL Server Management StudioMySQL工作台
您不能直接从模式中读取它。然而,如果您假设模式作者在实现引用完整性方面非常彻底,那么您可以做出一些推论。例如:
- 1: 0..1 ==一个表在与主键相同的列上有一个外键,并指向另一个表的主键列。
- 0 . .N: 0……N ==一个单独的链接表,其中一个外键指向表1,另一个外键指向表2,一个主键覆盖两个外键中的所有列。
- 1: 0..N ==唯一安全的事情,你可以假设,如果没有其他为真,有一个外键指向另一个表。
注意:如果外键指向唯一约束而不是主键,也可以进行相同的推导。