[英]How to query against many tables in mySQL
我正在设计一个用于奖励的数据库应用程序。 它具有75年的历史,并且随着时间的推移变化了许多类别。 现在,我正在考虑的设计有两种表格:
entities
people
publishers
categories
novel
movie
author
artist
像这样 每个类别都有特定于该类别的数据,例如:
NOVEL
title varchar(1024)
author int #FK into people table ID
publisher int #FK into publisher table ID
year year(4)
winner bool
or
ARTIST
name int
year year(4)
winner bool
到现在为止还挺好。 但是,随着时间的推移,这些类别中有38个(!)已经存在(有些已经不存在了),我真的无法想象要查询一下1963年以来的所有获奖者,方法是:
SELECT * from table1,table2,...,table38 WHERE year=1963 and winner=TRUE;
这些表永远不会那么大(每个类别通常最多有五位被提名人,因此即使经过100年,每张表最多也将有500行,而那些没有继续的早期行将减少很多)。 因此,这不是性能问题。 只是对我而言,该查询感到非常非常错误,因为仅仅是因为每次创建新类别或删除旧类别时都必须更改每个查询。 这种情况每隔几年左右就会发生一次。
那么问题是:
非常感谢,
格伦
您最好有一个用于类别的表,您可以在其中保存类别键值,或者只是普通的类别表,并且只能将行的ID保存在其他表中:例如,
表:类别
列:ID,名称,子弹,状态,active_since,inactive_since等...
在slug中,您可以保留cat的slug形式以方便查询和url:例如,行业创新类别将另存为行业创新。
在状态下,保持0或1以显示它现在是否处于活动状态。 您还可以在active_since和inactive_since字段中保留活动日期和不活动日期。
当您搜索时,您可以搜索状态为1的信息,等等。我不认为您的问题很复杂,并且在连接表时mysql搜索非常简单。
有些项目中连接了数十个表,没关系。
您可以用3张桌子来做。
第一个是实体 。 它包含有关所有出版商/艺术家/等的数据。
entities
name varchar(1024)
publisher bool
其次是数据 ,其中存储了所有类别的所有数据。
data
title varchar(1024)
author/name int #FK into people table ID
publisher int #FK into publisher table ID
year year(4)
winner bool
category int #FK into category table ID
第三是类别 ,您可以在其中找到所有类别名称及其ID。
category
ID int
name varchar(1024)
现在您只需要联接三个表。
select * from entities e, data d, category c where d.name=e.name and d.category=c.id and winner=bool and year=1963
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.