如何查询mySQL中的许多表

时间:2014-01-12 02:32:17

标签: mysql database-design

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

问题是:

  • 这个查询证据表明我设计错了吗?
  • 如果没有,是否有更好的方法来进行查询?
  • 我一直在想必须有一些方法可以创建一个从其他表中提取的查找表,但我可能会记错了。有没有办法做这样的事情?

非常感谢,

格伦

2 个答案:

答案 0 :(得分:0)

你最好有一个类别表,你可以保存类别键值,或者只是普通的类别表,你可以只在其他表中保存行的id: 例如,

表:类别

列:id,name,slug,status,active_since,inactive_since等......

在slug中,您可以保持猫的形式,以便于查询和网址:例如,行业创新类别将被保存为行业创新。

在状态中,保持0或1以显示它现在是否处于活动状态。您还可以在活动时以及在active_since和inactive_since字段中变为非活动状态时保留日期。

当你搜索时,你可以搜索那些状态为1的例子等。我不认为你的问题很复杂,当你连接表时,mysql很容易搜索。

有些项目加入了数十个表,没关系。

答案 1 :(得分:0)

你可以用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

第三个是 category ,您可以在其中找到所有类别名称及其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