1

我尝试为以下目的设计 mysql 表。该站点是关于属于一个或多个主题的任何主题和项目 - 例如让我们以“蝙蝠侠”为主题。为此,有属于几个类别的项目 -电影书籍视频游戏汽车(Batmobil)。类别数为 10-20。我的想法是制作这些表格:

Topic
-------
id
name

Item
-------
id
name
category_id
decscription and some other common columns

Movie (and other categories, like Car, VideoGame, Book,...)
-------
id
item_id 
specific columns for each category

Item_Topic (and other tables like Item_Category, Item_Movie, Item_Car, Item_Videogame, Item_Person...)
-------
item_id
topic_id (movie_id, car_id, person_id, ...)

Person
-------
item_id
name
role

到目前为止,我认为这是一个很好的解决方案(或者我错了吗?)

但我的两个问题如下:

  1. 我的表格设计中的电影演员和书籍作者不被视为项目。对于演员和作家,有一个表PersonItem-Person 表,用于将项目与人员连接起来。但是,如果主题是“斯蒂芬·金”呢?我应该如何搜索斯蒂芬·金为他写的场景的书籍和电影?我想到的唯一方法是改变桌子设计并将人也视为物品。这是个好主意吗?这个问题的表设计解决方案是什么?您能否告诉我,使用适当的表格设计匹配主题和项目的一般查询应该如何?

  2. 我想在一页上显示属于一个主题的所有带有详细信息的项目(存储在MovieBookVideoGame ......) - 我可以使用的最佳查询是什么?

非常感谢您的任何回答!

4

1 回答 1

0

让我评论一下您设计的这一部分:

Movie (and other categories, like Car, VideoGame, Book,...)
-------
item_id 
specific columns for each category

在使用关系模型时,这通常不是最好的方法。如果可能,最好有一个包含、、、等Category记录的表。这样可以更容易地根据需要添加新类别。MovieCarVideoGameBook

如果项目数据根据类别变化很大,有一些技术可以处理它,但它并不漂亮(通常是项目属性表,然后你的项目表是属性到值的映射表)。

更新

感谢@RichardCZ 提醒我属性映射方法称为EAV, Entity-attribute-value, model

于 2012-12-11T11:21:26.300 回答