如何在mySQL中查询多个表
我正在为获奖设计一个数据库应用程序。它有75年的历史,许多类别随着时间的推移而改变。现在,我想到的设计有两种表格:如何在mySQL中查询多个表,mysql,database-design,Mysql,Database Design,我正在为获奖设计一个数据库应用程序。它有75年的历史,许多类别随着时间的推移而改变。现在,我想到的设计有两种表格: entities people publishers categories novel movie author artist 诸如此类。每个类别都有特定于该类别的数据,例如: NOVEL title varchar(1024) author int #FK into people table ID
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行,而对于不继续的早期表格,则会少很多)。所以这不是性能问题。我只是觉得这个查询非常非常错误,哪怕只是因为每次创建新类别或删除旧类别时都必须更改每个查询。这种情况每隔几年左右就会发生一次
问题是:
- 这是我设计的错误的证据吗
- 如果没有,是否有更好的方法进行查询
- 我一直在想,一定有办法创建一个从其他表中提取的查找表,但我可能记错了。有没有办法做这样的事
Glenn您最好有一个类别表,可以在其中保存类别键值,或者只保存普通类别表,并且只能在其他表格中保存行的id: 比如说, 表:类别 列:id、名称、段塞、状态、活动\u自、非活动\u自等 在slug中,您可以保留cat的slugified形式,以便于查询和url:例如,Industry Innovations类别将另存为Industry Innovations 在状态中,保留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
尼姆关于鼻涕虫的观点很有趣,但我认为蒂尔达一针见血。将所有表折叠为一个表的方法是让数据表包含38个表中字段的并集。例如,如果我允许它们为null,那么Best Novel的data.director字段可能为null,但data.author字段为null,反之亦然。非常感谢!