【问题标题】:How to store word compositions in a relational database in a normalized way?如何以规范化的方式将单词组合存储在关系数据库中?
【发布时间】:2009-11-19 11:38:31
【问题描述】:

我正在尝试找到一种存储以下形式的单词组合的好方法:

排气净化系统 排气净化系统 排气净化系统 排气净化系统

默认情况下会给出组合。组合中的每个单词都存储为表“标签”中的唯一行。

标签 标识值 -------------------------- 1个排气净化系统 2排气 3 清洁 4系统 5 排气净化 6 清洗系统

我想到了一个名为“compositions”的新表:

作文 id domain_id 范围 ---------------------- 1 1 2,3,4 2 1 5,4 ETC...

但在一列中存储多个单独的值并不是标准化的设计。有什么想法吗?

顺便说一句:我正在使用 MySQL 和 ActiveRecord/Rails。

【问题讨论】:

  • 我认为我们可以通过更多背景提供更好的帮助:您为什么要存储所有这些组合以及您在用它们做什么?而且,是的,列中的分隔值闻起来很糟糕……您将很难将它们与许多工具一起使用,并且需要编写大量代码来处理它们(即使您今天只在一个地方使用它们)跨度>

标签: ruby-on-rails orm relational relational-database


【解决方案1】:

你提出的设计甚至不是第一范式,因为范围不是原子的

我在这里使用的架构是

compositions
id   domain_id
-------------
1    1
2    1

compositions-content
composition_id        rank        label_id
------------------------------------------
1                     1           2
1                     2           3
1                     3           4
2                     1           5
2                     2           4

composition_id 引用一个 composition.id 和 label_id 引用 label.id

排名列是可选的,当且仅当您在此处定义的范围对顺序敏感时才应在此处。

通过这种设计,您在数据库级别具有一定的引用完整性。

【讨论】:

    【解决方案2】:

    嗯,这是我能想到的标准化:

    套 id domain_id -------------- 1 1 2 1 ETC... 作文 id set_id label_id order -------------------------- 1 1 2 1 2 1 3 2 3 1 4 3 4 2 5 1 5 2 4 2 ETC...

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 1970-01-01
      • 2016-03-21
      • 2013-11-20
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2023-03-31
      • 2011-10-07
      相关资源
      最近更新 更多