我有关于数据库设计的问题。我正在做博客应用程序,我有3个表,其名称为Record
,Category
和Tags
。在这种情况下,有很多记录,一条记录可以与N
类别相关。一个类别可以与N标签相关联。例如;
记录1 ---> N类别和类别1 - > N标记
这种情况下最好的数据库设计是什么?你能建议任何解决方案吗?
最后在项目结束时我想这样做,
BlogRecord
................
................
Categories : Asp.net , JQuery
Tags : Life Cyle,rooting,jquery selector,jQuery ajax
答案 0 :(得分:2)
这是数据库架构的一个非常基本的例子。您有一个record
,与tags
和categories
都有一对多的关系。 (如果我理解的话)
如果你真的需要一对多的关系(我怀疑在这种情况下实际情况,请参见下文),实际上有一种合理的方法来设计它。当你有一对多的关系时,你有“很多”指向“一”。您的表格应如下所示:
record:
id, info, date_created, other_stuff
category:
id, record_id, name, date_created, other_stuff
tag:
id, record_id, info, other stuff
非常简单,tag
和category
都有一个名为record_id
的列,它会给出它所属记录的ID。
一对多有限制。 'many'只能指向'one'。就像名字一样。因此,如果您有一对多的关系,其中记录为“一”,类别为“多”,每个类别只能包含一条记录。这实际上并没有对于某个类别的感觉。
我认为您可能实际上正在寻找其中一些的多对多关系:
好吧,假设你真的想要记录和标签之间的多对多关系。像标签'cool'可以附加到两个不同的记录,但每个记录可以有许多标记。或者记录可以在许多类别中,并且类别可以具有许多记录。这似乎更有意义,并且将成为“多对多”的关系。这有点困难,但仍然很容易。
record:
id, category_id, info, date_created, other_stuff
tag:
id, info, other stuff
注意我在标签上删除了record_id
,这是因为它可以附加到许多不同的记录,而不仅仅是一个。要做到这一点,我们需要一个完整的表来映射多对多关系:
records_to_tags
record_id, tag_id
现在,您将records-to-tags
表填入关系。你可能有这样的数据:
record:
1, "I'm the first record", "yay", 10/12/2014, asdf
2, "I'm the second record", "woot", 10/13/2014, asdf
tags:
1, "cool post"
2, "awesome"
records-to-tags
1, 1
1, 2
2, 2
你可以在这里看到两个记录都有'cool post'标签,但只有第二个记录有'awesome'标签。
您可以在此链接了解有关数据库关系的更多信息:http://code.tutsplus.com/tutorials/
答案 1 :(得分:0)
为什么重新发明轮子?请参阅Wordpress Database Design。他们使用以下3个表实现了这个场景,它是一个非常可扩展的设计IMO。
wp_terms
- 帖子和链接的类别以及帖子的标记都在wp_terms
表格中找到。
wp_term_relationships
- 帖子与wp_terms
表中的类别和标记相关联,此关联在wp_term_relationships
中维护表。链接到各自类别的关联也会保留在此表中。
wp_term_taxonomy
- 此表格描述了{{条目>的分类(类别,链接或标记) 1}}表。
答案 2 :(得分:0)
听起来像是一个多对多关系,因为许多博客记录可以有一个asp.net类别,而asp.net可以有很多博客记录。与标签相同,因此您可能需要在三者之间使用一个或两个数据透视表(总共5个表)。
答案 3 :(得分:0)
我认为我的最佳解决方案是上图