如何在mySQL中查询多个表

如何在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

我正在为获奖设计一个数据库应用程序。它有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行,而对于不继续的早期表格,则会少很多)。所以这不是性能问题。我只是觉得这个查询非常非常错误,哪怕只是因为每次创建新类别或删除旧类别时都必须更改每个查询。这种情况每隔几年左右就会发生一次

问题是:

  • 这是我设计的错误的证据吗
  • 如果没有,是否有更好的方法进行查询
  • 我一直在想,一定有办法创建一个从其他表中提取的查找表,但我可能记错了。有没有办法做这样的事
非常感谢,


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,反之亦然。非常感谢!