我尝试为以下目的设计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
到目前为止,我认为这是一个很好的解决方案(或者我错了?)
但我的两个问题如下:
我的桌面设计中的电影演员和书籍作者不被视为项目。对于演员和作家,有一个表 Person 和 Item-Person 表,用于连接项目与人。但如果一个主题是“斯蒂芬金”怎么办?我应该如何搜索斯蒂芬金的书籍和电影,他为他写的风景?我想到的唯一方法就是改变桌面设计并将人们视为项目。这是好主意吗?什么是这个问题的表设计解决方案?您能否请您告诉我,如何使用正确的表格设计对匹配的主题和项目进行一般查询?
我想显示所有带有详细信息的项目(存储在电影,图书, VideoGame ,...)在一个页面上属于一个主题 - 我可以使用的最佳查询是什么?
非常感谢您的回答!
答案 0 :(得分:0)
让我评论一下你设计的这一部分:
Movie (and other categories, like Car, VideoGame, Book,...)
-------
item_id
specific columns for each category
这通常不是使用关系模型时的最佳方法。如果可能的话,最好有一个Category
表,其中包含Movie
,Car
,VideoGame
,Book
等的记录。这样,添加新内容会更容易需要的类别。
如果项目数据根据类别变化很大,有一些技术可以处理,但它并不漂亮(通常是项目属性表,然后您的项目表是属性到值的映射表)。
感谢@RichardCZ提醒我,属性映射方法称为EAV, Entity–attribute–value, model。