具有字段的多个值的SQL记录

时间:2013-04-21 20:50:53

标签: sql database-design schema

为可能具有特定字段的多个值的记录设计表模式的最佳方法是什么?

例如,文档可以有多个与之关联的概念。每个文档也可以具有不同数量的概念。我正在尝试设计一个表,其中每个记录都是一个文档及其元数据,但我遇到了概念字段的问题。我应该将所有概念填入一个名为“概念”的领域吗?或者为概念1,概念2等创建不同的字段。问题是我不知道每个文档可以有多少概念。我试图用SQL关系数据库来设计它,虽然我知道有面向对象的数据库可能更适合我的问题。

3 个答案:

答案 0 :(得分:2)

  

我应该将所有概念填入一个名为'Concepts'的字段吗?

没有。这违反了atomicity的原则,因此也违反了1NF,并导致执行完整性和查询时出现问题。

  

或为Concept 1,Concept 2等创建不同的字段

如果您对每个文档的概念数量有明确的限制,那么您知道将来不会更改。但是你说你“不知道每个文档可以有多少概念”

  

为可能具有特定字段的多个值的记录设计表架构的最佳方法是什么?

取决于是否可以在不同文档之间共享相同的概念。

  • 如果,那么这是一对多的关系,可以用以下方式表示:

    enter image description here

  • 如果,那么这是一个多对多的关系,需要一个额外的“联结”(又名“链接”)表,介于两者之间,类似于:< / p>

    enter image description here

答案 1 :(得分:1)

这取决于这里的'概念'。这有什么意义吗?有没有相关的东西?
如果一个字段的值本身是有意义的,我会坚持使用一个字段和值'enumeration'。
如果可能存在特定于每个“概念”的附加属性,则最好考虑使用具有“概念”的表以及这两者之间的多对多关系。 我希望它对你有所帮助。

答案 2 :(得分:1)

如果概念很重要,那么您应该有一个concepts表。这将是一个参考表,其中包含conceptId以及有关概念的信息。

然后,您可以拥有一个名为DocumentConcepts的表格。这将有如下字段:

  • DocumentConceptId(此表的唯一ID)
  • DecumentId
  • ConceptId

它可能还有其他信息,例如优先级(首先是第二个?),当概念被添加到文档时,以及其他此类信息。