我正在尝试找到一种很好的方法来存储以下形式的单词组合:
exhaustcleaningsystem exhaust cleaning system exhaustcleaning system exhaust cleaningsystem
组合由每个案例的默认值给出。合成中的每个单词都存储为表'标签'中的唯一行。
labels id value -------------------------- 1 exhaustcleaningsystem 2 exhaust 3 cleaning 4 system 5 exhaustcleaning 6 cleaningsystem
我想到了一个名为'composition'的新表:
compositions id domain_id range ---------------------- 1 1 2,3,4 2 1 5,4 etc...
但是在列中存储多个分隔值不是规范化设计。有什么想法吗?
BTW:我正在使用MySQL和ActiveRecord / Rails。
答案 0 :(得分:0)
你提出的设计甚至不是第一种正常形式,因为范围不是原子的
我在这里使用的架构是
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
排名列是可选的,当且仅当您在此处定义的范围对订单敏感时才应该在此处。
使用此设计,您在数据库级别具有一些参照完整性。
答案 1 :(得分:0)
嗯,就标准化而言,这是我能想到的:
sets id domain_id -------------- 1 1 2 1 etc...
compositions 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...