这是我数据库结构的一部分:
Table: Item
Columns: ItemID, Title, Content, Price
Table: Tag
Columns: TagID, Title
Table: ItemTag
Columns: ItemID, TagID
Table: Image
Columns: ImageID, Path, Size, UploadDate
Table: ItemImage
Columns: ItemID, ImageID
这些项目可以有多个图像,所以我有一个额外的表格“图像”,并将这些图像映射到一个项目。我现在看到这个结构存在问题。在我添加图像之前,我必须输入一个项目。
我的问题是现在。这个结构是一个很好的方法来解决我的问题与一个项目的许多图像/标签?
谢谢
答案 0 :(得分:4)
是的,这是通常的做法。为此目的完全规范化的DB结构。
根据您的应用程序,某些时候可能需要某种非规范化来帮助提高性能,但我会等到您确定实际的瓶颈之后。
确保所有外键和您通常过滤的任何其他字段都有索引。在ItemTag
和ItemImage
上制作综合索引也是一个好主意。
答案 1 :(得分:1)
这是一个很好的结构。映射表通常是实现多对多关系的最简单方法。
您可以在没有项目的情况下将图像自由添加到Image表中。如果您正在构建项目,向其中添加图像,那么您可以选择如何实现此项目:
我会选择(1) - 可能会为你做更多的工作但是你会得到一个更易理解和更一致的系统。
答案 2 :(得分:0)
是的,有效。
在您的设置中:
项目有很多图片
项目拥有并且属于许多标签
图片有一个项目
标签包含并属于许多项目
答案 3 :(得分:0)
我的问题是现在。这是结构 一个解决我的问题的好方法 一个项目的许多图像/标签?
多对多关系为应用程序增加了大量复杂性。如果你确实需要那么多的复杂性,我会重新考虑。例如,您可以将图像信息存储在项目表中。复制路径并不昂贵。