我对数据库设计还很陌生,我想知道以下设计是否被接受。
正如您在我的 ER 图中看到的,博物馆实体与警卫具有一对多关系,因为博物馆可以雇用许多警卫,并且与具有一对多关系更清洁。 Museum和Guard之间的桥接实体Guarding与Museum是多对一的关系,与Guard是多对一的关系。我是否可以同时拥有Guard和Museum之间的关系以及它们之间的桥梁实体?
是的,你可以。
但是然后问问自己为什么?
为什么我需要一个特定的 FK 来博物馆守卫......守卫是由该博物馆以某种方式定义的吗? 在这种情况下,我想你会发现,不,警卫是与博物馆不同的东西,并且不依赖于博物馆的存在。 因此,为了正确正常化,您不会将博物馆纳入守卫范围。
然后看守卫表。 当我将 Museum_id 直接放在守卫上时,我的意图是什么?是表示某种基地,或雇用博物馆,还是最常在博物馆工作? 所有这些都可以通过“守卫”上的一个新列来捕获,例如“relationship_type”,您可以在其中指定守卫和博物馆之间的关系。
最后,一些警卫可能会切换到新的博物馆等,因此您应该有一些警卫关系有效的日期 - 例如开始日期和结束日期来捕获该警卫在该博物馆工作的时间。
最后,为什么不对清洁工进行同样的思考过程呢? 你会发现他们也应该有一个链接类。
还有更多 - 为什么这两个相关的东西不只是人或员工,并有一栏表明他们的职位?
无论如何 - 你走在正确的道路上..
每对实体之间可以有很多——我的意思是很多——关系。没有任何限制,每种关系都有其特定的含义。
现在,这也可以与每对实体之间的间接关系相结合,这也是不受限制的。
因此,每对表之间也可以有无限数量的直接和间接关系。只要确保您理解每个实体和每个关系的语义即可。