Database Design最佳解决方案

时间:2014-02-07 22:09:01

标签: database

我有关于数据库设计的问题。我正在做博客应用程序,我有3个表,其名称为RecordCategoryTags。在这种情况下,有很多记录,一条记录可以与N类别相关。一个类别可以与N标签相关联。例如;

  

记录1 ---> N类别和类别1 - > N标记

这种情况下最好的数据库设计是什么?你能建议任何解决方案吗?

最后在项目结束时我想这样做,

 BlogRecord 
 ................
 ................
 Categories : Asp.net , JQuery
 Tags : Life Cyle,rooting,jquery selector,jQuery ajax

4 个答案:

答案 0 :(得分:2)

这是数据库架构的一个非常基本的例子。您有一个record,与tagscategories都有一对多的关系。 (如果我理解的话)

一对多

如果你真的需要一对多的关系(我怀疑在这种情况下实际情况,请参见下文),实际上有一种合理的方法来设计它。当你有一对多的关系时,你有“很多”指向“一”。您的表格应如下所示:

record:
   id, info, date_created, other_stuff

category:
   id, record_id, name, date_created, other_stuff

tag:
   id, record_id, info, other stuff

非常简单,tagcategory都有一个名为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。

  1. wp_terms
  2. wp_term_relationships
  3. wp_term_taxonomy
  4. wp_terms - 帖子和链接的类别以及帖子的标记都在wp_terms表格中找到。

    wp_term_relationships - 帖子与wp_terms表中的类别标记相关联,此关联在wp_term_relationships中维护表。链接到各自类别的关联也会保留在此表中。

    wp_term_taxonomy - 此表格描述了{{条目>的分类类别,链接或标记) 1}}表。

    enter image description here

答案 2 :(得分:0)

听起来像是一个多对多关系,因为许多博客记录可以有一个asp.net类别,而asp.net可以有很多博客记录。与标签相同,因此您可能需要在三者之间使用一个或两个数据透视表(总共5个表)。

答案 3 :(得分:0)

enter image description here

我认为我的最佳解决方案是上图