我开发了一个网站,其结构有点像 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/