为某个字段可能具有多个值的记录设计表模式的最佳方法是什么?
例如,一个文档可以有多个与之关联的概念。每个文档也可以有不同数量的概念。我正在尝试设计一个表格,其中每条记录都是一个文档及其元数据,但我在概念字段方面遇到了问题。我应该把所有的概念都塞进一个叫做“概念”的领域吗?或者为概念 1、概念 2 等创建不同的字段。问题是我不知道每个文档可以包含多少概念。我正在尝试使用 SQL 关系数据库来设计它,尽管我知道有面向对象的数据库可能更适合我的问题。
为某个字段可能具有多个值的记录设计表模式的最佳方法是什么?
例如,一个文档可以有多个与之关联的概念。每个文档也可以有不同数量的概念。我正在尝试设计一个表格,其中每条记录都是一个文档及其元数据,但我在概念字段方面遇到了问题。我应该把所有的概念都塞进一个叫做“概念”的领域吗?或者为概念 1、概念 2 等创建不同的字段。问题是我不知道每个文档可以包含多少概念。我正在尝试使用 SQL 关系数据库来设计它,尽管我知道有面向对象的数据库可能更适合我的问题。
我应该把所有的概念都塞进一个叫做“概念”的领域吗?
不,这会违反原子性原则,因此违反 1NF,并导致执行完整性和查询方面的问题。
或者为概念 1、概念 2 等创建不同的字段。
仅当您对每个文档的概念数量有明确的限制时,您才知道将来不会改变。但是您说您“不知道每个文档可以包含多少概念”。
为某个字段可能具有多个值的记录设计表模式的最佳方法是什么?
取决于是否可以在不同文档之间共享相同的概念。
如果no,那么这是一个一对多的关系,可以类似这样表示:
如果是,那么这是一个多对多的关系,需要一个额外的“联结”(又名“链接”)表,类似于:
这取决于这里的“概念”是什么。这有什么意义吗?有什么相关的吗?
如果一个字段的值本身是有意义的,我会坚持使用一个字段和“枚举”的值。
如果每个“概念”都有特定的附加属性,您最好考虑使用一个带有“概念”的表以及这两者之间的多对多关系。我希望它对你有帮助。
如果概念很重要,那么您应该有一张concepts
桌子。这将是一个参考表,其中包含conceptId
有关概念是什么的信息。
然后,您可以有一个名为DocumentConcepts
. 这将具有以下字段:
它还可能具有其他信息,例如优先级(哪个是第一?哪个是第二?),何时将概念添加到文档中,以及其他此类信息。