目前,我们有这样的设计来存储具有多个图像/视频 URL 的对象:
tblCompany:
pkCompanyId
tblPerson:
pkPersonId
tblImage:
pkImageId
ImageUrl
fkCompanyId
fkPersonId
虽然此设计处理:
- 拥有多张图片的公司
- 一个人有多个图像
我不禁觉得这个设计有问题,因为 tblImage 中的行将有大量外键列的 NULL 值。
还有更好的设计吗?设计中的更多对象(一些与公司或个人无关,一些与公司或个人相关)将包含图像,因此当前设计 tblImage 可能有越来越多的外键。
最佳答案
对于只有 2 个可以有图像的实体来说,这实际上是一个非常好的设计。是的,您会有很多 NULL,但替代方案(例如单独的图像表或特制的 1:N 链接表)也会有它们的问题。
由于这是 1:N 关系,我们不需要任何额外的 M:N 联结/链接表。
如果你需要添加更多种类的可以有图像的实体,你可以考虑继承,像这样:
这样一来,图像将能够自动连接到继承自 tblCommon
的任何实体,无论实体有多少种。不幸的是,关系 DBMS 不直接支持继承,因此您必须在 3 ways 之一中模拟它。 ,每个都有自己的一套妥协。
关于database - 多个一对多关系设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474545/