database - 多个一对多关系设计

标签 database database-design

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

tblCompany:
pkCompanyId

tblPerson:
pkPersonId

tblImage:
pkImageId
ImageUrl
fkCompanyId
fkPersonId

虽然此设计处理:

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

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

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

最佳答案

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

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


如果你需要添加更多种类的可以有图像的实体,你可以考虑继承,像这样:

enter image description here

这样一来,图像将能够自动连接到继承自 tblCommon 的任何实体,无论实体有多少种。不幸的是,关系 DBMS 不直接支持继承,因此您必须在 3 ways 之一中模拟它。 ,每个都有自己的一套妥协。

关于database - 多个一对多关系设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474545/

相关文章:

database - 错误 : Could not find or load main class org. h2.tools.RunScript

java - 使用结果集将大数据从数据库导出到 Excel

PHP MySql 进度条

c# - int 或 long 变量类型以实现长期可扩展性

database - 有什么好的方法可以实现与代码库同步的敏捷数据库过程,尤其是在持续集成方面?

具有一些用户定义字段的 SQL 数据库设计

mysql - Python 3 pymysql 数据库访问 - 连接到数据库出现以下错误

mysql - 如何在运行 SQL Update 语句之前对其进行测试?

mysql - 数据库设计 - 连接师生

sql-server - 如何同时更新和同步数据库表?