sql - 将一个表映射到许多其他表?

标签 sql database-design

我开发了一个网站,其结构有点像 stackoverflow。我的数据库中有一个 Posts 表和一个 PostImages 表。 PostImages 表如下所示:

PostImageId PK
PostId      FK
Uri
MimeType

因此帖子可以有很多与之相关的图像。

我现在要求网站上的其他地方应该有图像:用户应该能够在他们的个人资料上有图像,类别应该能够有图像,并且地址应该能够包含图像。

我的数据库中似乎最好只有一个 Images 表。我应该如何建模?我可以有一个像这样的表:

ImageId    PK
PostId     FK
CategoryId FK
AddressId  FK
UserId     FK
Uri
MimeType

我可以有一个images表,然后为每种对象有额外的表:

PostImageId      PK FK
PostId           FK

CategoryImageId  PK FK
CategoryId       FK

(其中每个项目的 PK 也是 Images 表中的图像的 FK)

还有一些其他策略:例如,我可以为每种类型都有一个 ___Images 表,并且没有共享的 Images 表。我可以为每个表建立一个多对多映射表,也许还有一些我没有想到的其他解决方案。

什么是最好的?我对数据库设计不太了解 - 哪个是最灵活且最易于使用的?

最佳答案

在现实项目中,数据库的设计考虑到了数据可访问性的成本。您提到了两种设计表格的方法。两者都是正确的。如果将所有字段放在一张表中,就会出现数据冗余。如果你制作两个表就没有问题。

但是您必须记住,连接两个表会花费更多。因此,在从服务器获取数据时,这可能会使您的页面变慢(如果同时有很多用户同时尝试)。

另一方面,如果将其放在一个字段中,则会占用更多数据库内存,但获取数据的成本会更少。选择权在你。

关于sql - 将一个表映射到许多其他表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288511/

相关文章:

php - 从数据库中搜索关键字

mysql - 我该如何修复这个sql查询?

c# - 使用 Linq to SQL 简化创建数组列

mysql - 表之间的多个连接

mysql - 如何在 SQL 表中表示 X 和 Y 轴数据

php - 基于数据库设计是否可以预测要在应用程序中使用的查询?

php - 随机化特定组 mysql

java - 有没有办法从executeBatch获取所有错误?

php - 管理用户警告

mysql - N :M relations 的可空外键与关系表