设计复杂的关系表

时间:2012-09-09 22:59:23

标签: mysql database-design yii

我在数据库投影方面遇到了一些问题。

我有一些项目类型,假设这些是“新闻”,“文章”,“文件”等。

此外,我还有“类别”表来存储每种类型的类别。类型在特殊字段“category_type”中指定。所以在我的应用程序代码中定义了常量:news = 0,articles = 1,files = 2等。

现在的问题是 - 构建连接表的正确方法是什么?

一种方法:我可以为每种类型创建几个表 - “news2categories”,“articles2categories”,“files2categories”等。

第二个选项是构建一个全局表,它将有3个字段“item_id(int),item_type(int),category_id(int)”。实际上我已经有一个全局表用于类别除以一个字段的类别。但这是正确的方法吗?我不想生成几十个相同的表,但另一方面,与一个表和多个类型的关系似乎过于抽象和复杂。请指教。

DB主要用于Yii框架,如果解决这个问题有任何意义的话。

2 个答案:

答案 0 :(得分:0)

文章,新闻和文件之间有什么区别?这些中的每一个都可以有多个类别(多对多)吗?假设每种类型(文章,新闻等)的多个类别的多对多需求是肯定的,并且它们彼此之间各不相同,我会有以下表格:

 category
 news
 category_news
 article
 article_category
 file
 category_file

每个类别链接表都有2列:category_id和item_id(news_id,article_id等等)

我使用以单数形式命名所有数据库表的数据库编码标准(如果Yii另有说明,请随意更改为多个 - 并且使我的链接表使用下划线分隔每个链接表的名称(字母表中的名称)顺序)。

无论你做什么,都要保持一致。

答案 1 :(得分:0)

第一种方式似乎有问题,因为您可能希望您的设计在添加/删除不同类型时具有灵活性。如果添加新类型,则必须添加一个新表,我认为这不是一个好的设计。

这个设计怎么样。

表:类别, 列 : CategoryID(PK) TypeID(FK到Types表。)

表:类型,列:TypeID(PK),TypeValue

在“类型”表中存储类型新闻,文章等。这将使设计在添加或删除类型和类别时更加灵活。