繁体   English   中英

如何在MySQL中查询许多表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM