我有一个我开发的网站,其结构有点像 stackoverflow。我在数据库中有一个Posts
表和一个PostImages
表。该PostImages
表如下所示:
PostImageId PK
PostId FK
Uri
MimeType
所以帖子可以有很多与之相关的图像。
我现在有要求网站上的其他地方应该有图像:Users
应该能够在他们的个人资料Categories
中拥有图像,应该能够拥有图像,并且Addresses
应该能够拥有图像。
似乎最好在我的数据库中只有一个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
表。我可以为每一个有一个多对多的映射表,也许还有一些我没有想到的其他解决方案。
什么是最好的?我对数据库设计知之甚少——哪个最灵活、最容易使用?