首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何将多张唱片联系在一起?

我如何将多张唱片联系在一起?
EN

Stack Overflow用户
提问于 2011-12-19 18:11:53
回答 2查看 358关注 0票数 0

我有食品,可以属于多个类别,一个类别可以有许多食品。类别在性质上是分级的:

  • 食品>有机
  • 食品>加工

我正在努力设计数据库模式,同时考虑到这两个约束。我应该如何继续模式设计来支持这一点?

作为另一个例子,我想到Stack溢出有一个类似于此的系统.标签。每个问题有多个标签,每个标签有多个问题。这是如何实现的?如何使这个设计适应我的分类需求?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-19 20:05:13

在大多数关系数据库系统中,多对多关系通常由两个数据库表和一个连接它们的中间表组成,其中两个表包含所述数据。就像这样:

代码语言:javascript
运行
复制
Posts
--------
ID
Title
Content

Tags
--------
ID
Title

PostTags
--------
PostID
TagID

这通过中间表在PostsTags之间创建了一种间接关系。(注意,如果您真的需要中间表,也可以有一个ID列,但可能不需要它。还请记住,向此表中添加更多列可能会导致创建不直观的建模。这通常不是什么大问题,但当你对数据进行建模时,要注意这一点。向该表中添加更多列可以使数据模型之间的“关系”成为模型本身。)

对于您的食物类别,您添加了一个额外的复杂层,因为这些类别是分层的。然而,这很可能是通过一个自我引用的列来实现的。就像这样:

代码语言:javascript
运行
复制
Products
--------
ID
Name
Description

Categories
--------
ID
Title
ParentCategoryID

ProductCategories
--------
ProductID
CategoryID

这里的主要区别是,Categories表现在有一个列,该列指向该表自己的ID。因此,表中有一个Food记录,其中有一个ID值,因为它是层次结构中的顶层,所以是ParentCategoryIDnull值。然后,Organic记录将有自己的ID值,并在其ParentCategoryID字段中使用Food记录的ID值。这将创建该层次结构,而不会给数据模型增加不必要的复杂性。

请注意,这个设计本身并不能阻止某人将某些东西归类为FoodOrganic。如果这是不应该发生的,那么您将希望进一步完善设计和约束以防止这种情况发生。在大多数情况下,这类事情在应用程序中是很难对付的,但是如果您能够得到数据完整性的额外保证,那么在数据库中这样做也是很好的。

票数 1
EN

Stack Overflow用户

发布于 2011-12-19 18:14:39

这是一种many-to-many关系。一个问题可以有很多标签,一个标签可以有很多问题。在数据库中,这是由一个附加表(tag idquestion id)表示的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8565522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档