什么是正确的表设计和正确搜索我的数据库的查询?

时间:2012-12-11 10:59:22

标签: database database-design

我尝试为以下目的设计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. 我的桌面设计中的电影演员和书籍作者不被视为项目。对于演员和作家,有一个表 Person Item-Person 表,用于连接项目与人。但如果一个主题是“斯蒂芬金”怎么办?我应该如何搜索斯蒂芬金的书籍和电影,他为他写的风景?我想到的唯一方法就是改变桌面设计并将人们视为项目。这是好主意吗?什么是这个问题的表设计解决方案?您能否请您告诉我,如何使用正确的表格设计对匹配的主题和项目进行一般查询?

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

  3. 非常感谢您的回答!

1 个答案:

答案 0 :(得分:0)

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

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

这通常不是使用关系模型时的最佳方法。如果可能的话,最好有一个Category表,其中包含MovieCarVideoGameBook等的记录。这样,添加新内容会更容易需要的类别。

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

更新

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