2009-11-19 4 views
1

Я пытаюсь найти хороший способ для хранения слов композиции в следующей форме:Как хранить композицию слов в реляционной базе данных нормированным образом?

 
exhaustcleaningsystem 
exhaust cleaning system 
exhaustcleaning system 
exhaust cleaningsystem 

комбинации определяются по умолчанию в случае. Каждое слово в композиции хранится как уникальная строка в таблицах «метки».

 
labels 
id value 
-------------------------- 
1 exhaustcleaningsystem 
2 exhaust 
3 cleaning 
4 system 
5 exhaustcleaning 
6 cleaningsystem 

Я думал о новой таблице под названием «Композиция»:

 
compositions 
id domain_id range 
---------------------- 
1 1   2,3,4 
2 1   5,4 
etc... 

Но хранить несколько разделенных значения в столбце не нормируется дизайн. Есть идеи для этого?

BTW: Я использую MySQL и ActiveRecord/Rails.

+2

Я думаю, что мы могли бы помочь лучше с большим фоном: почему вы хотите, чтобы хранить все эти комбинации и что ты с ними делаешь? И, да, разделенные значения в столбце плохо пахнут ... вам будет сложно использовать их со многими инструментами и у них будет много кода для написания, чтобы справиться с ними (даже если вы используете их только в одном месте сегодня) – siukurnin

ответ

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

Столбец ранга является необязательным и должен быть здесь, если и только если диапазон, который вы определяете здесь, зависит от порядка.

С этой конструкцией у вас есть ссылочная целостность на уровне БД.

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... 
Смежные вопросы