繁体   English   中英

多对一关系设计

[英]Multiple one to many relationship design

目前,我们有这种设计用于存储具有多个图像/视频URL的对象:

tblCompany:
pkCompanyId

tblPerson:
pkPersonId

tblImage:
pkImageId
ImageUrl
fkCompanyId
fkPersonId

虽然这个设计处理:

  1. 拥有多个图像的公司
  2. 有多个图像的人

我不禁觉得这个设计存在问题,因为tblImage中的行将为外键列提供大量的NULL值。

有更好的设计吗? 设计中的更多对象(一些与公司或人无关,一些与公司或人有关)将具有图像,因此在当前设计中,tblImage可能具有越来越多的外键。

对于只有2个可以拥有图像的实体来说,这实际上是一个非常好的设计。 是的,你会有很多NULL,但是替代方案(例如单独的图像表或特制的1:N链接表)也会遇到问题。

由于这是一个1:N的关系,我们不需要任何额外的M:N结点/链接表。


如果您需要添加更多种类可以拥有图像的实体,您可以考虑继承,如下所示:

在此输入图像描述

这样,无论有多少种实体,图像都将自动连接到从tblCommon继承的任何实体。 遗憾的是,关系DBMS不直接支持继承,因此您必须以3种方式之一来模拟它,每种方式都有自己的一组妥协。

如果我正确理解架构,则公司和人员无关,并且两者都可以有一个或多个图像。 然后你就可以拥有一张图像本身的表格和两张不同的表格,供公司用于图像和人物到图像的映射。

tblCompany: pkCompanyId
tblPerson: pkPersonId    
tblImage: pkImageId ImageUrl    
tblPersonImage: fkImageId fkPersonId    
tblCompanyImage: fkImageId fkCompanyId

此模式还允许您将来将图像与其他类型的实体相关联(如产品)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM