整个站点的单个类别表或不同的用例

时间:2013-02-02 22:25:06

标签: php mysql sql database

product表有类别,media表有类别,ticket表有类别。

每个都与category表具有HasMany关系。有两种方法:

  1. 有一个公共类别表,可能有一个类型列,并且有像MediaCategory等中介表。
  2. 单独的表与MediaCategory一样,每个表都具有与类别相同的结构

2 个答案:

答案 0 :(得分:1)

在完整性方面,我认为第一个更好。

答案 1 :(得分:0)

如果不共享类别,那么最好(在大多数情况下)为每个类别类型设置单独的表。

以下是理由:

数据库是数据关系完整性的守门人。在编写良好的程序中,不应存在任何外键冲突异常,即代码不依赖于数据库来保持数据的关系完整性。但是,如果一个bug蔓延,数据库中的关系会使bug不太可能导致数据损坏。

当对媒体,产品等使用单独的表及其有效类别时,可以使用外键关系轻松维护关系完整性;基本上媒体表中的任何记录都可以属于媒体类别表中的任何类别。确保关系:

"Records in media table can belong to any category of type 'media' in 
the categories table"

在数据库级别不太直接。

话虽如此,其解决方案是数据结构重复的问题使整个底层结构受到怀疑。在您的情况下可能不是这样,但您应该查看需要引入类别的基础用例,并查看它们是否以更好的方式提供更好的服务(例如,自由文本搜索索引关键字。)