相关疑难解决方法(0)

多对多弱实体

我有一个没有被另一个实体定义就不能存在的实体,我希望这个实体参与多对多关系。

例子:一个艺人有一张专辑(没有艺人就不能存在专辑),专辑也有很多曲目,但同一曲目可以存在于多个专辑中。

所以我们在专辑和曲目之间有一个多对多的关系。

如果专辑是弱实体,则其主键是引用艺术家的外键,因此它不能是表示多对多关系的另一个表的外键。

问题是:SQL中是否可以有这种关系,如果可以,我该如何表达?

foreign-key database-design referential-integrity

17
推荐指数
1
解决办法
2万
查看次数

如果一个表通过两个多对多关系引用另一个表,则禁止数据不一致

我有以下数据库设计(通过=>外键约束描述):

公司[编号]
CompanyRealm[id, company_id=>Company.id] many2many

项目[id, company_id=>Company.id]
ProjectRealm[id, project_id=>Project.id, company_realm_id=>CompanyRealm.id] many2many

问题是提供的数据库设计允许不一致的数据。例如:

公司1 (id= 1 )
公司 2(id= 2 )
CompanyRealm(id=11, company_id= 1 )
项目(id=33, company_id= 2 )
ProjectRealm(id=44, project_id=33, company_realm_id=11)

Company可以有很多RealmsProject属于Company可以涉及任意数量的公司的Realms

ProjectRealm 指的是两个不同的公司:

  • Company1(通过 CompanyRealm);和
  • Company2(通过项目)。

我的数据库设计有问题吗?
如果是 - 违反了哪些处方?
如果否 - 如何防止错误的数据插入(通过约束?触发异常?)

foreign-key database-design constraint consistency

6
推荐指数
1
解决办法
575
查看次数