2010-11-13 2 views
1

Мне интересно, как нормализовать таблицу, как это:Нормализовать стол

field1|field2|field3 
text1 |txt2 | 1,2,5 
other1|other2| 1,8,7 

field1 будет повторяться много раз, field2 является уникальным (не повторяться), поле 3 - пользователи идентификатор. Что-то вроде фаворитов.

+0

Я не понимаю, что касается ваших намерений. может быть, более реальный пример? – Randy

ответ

3

Дайте первичный ключ для этой таблицы и создайте новый с полем 3 + этот ключ.

Master таблица (исходная таблица после модификации)

field1 | field2 | fID 
... | ... | 1 
... | ... | 2 

Избранное таблица:

fID | field3 
1 | 1 
1 | 2 
1 | 5 
2 | 1 
... | ... 

Выбор данных

Вы можете использовать JOIN или просто ГДЕ, чтобы получить результаты. Скажем

SELECT field3 FROM Favorites WHERE fID = 1 

получает

1,2,5 

Так что, если я не ошибаюсь ваш вопрос связан с шаблоном мастер-детали/родитель-ребенок.

Ресурсы

3

Во-первых, если в поле 2 является уникальным, то она должна быть объявлена ​​в качестве первичного ключа (или, по крайней мере, уникальный индекс).

Во-вторых, факт, что у вас есть несколько значений в поле3, указывает, что поле3 должно стать отдельной таблицей, связанной назад (связанной) с первой таблицей с использованием некоторого уникального значения (которое мы только что решили - field2).

Итак, сценарий создания базы данных будет выглядеть следующим образом:

CREATE TABLE MainTable (field2 VARCHAR NOT NULL PRIMARY KEY, field1 VARCHAR) 

CREATE TABLE OtherTable (field2 VARCHAR REFERENCES MainTable, field3 INTEGER) 

Вы могли бы также рассмотреть вопрос о добавлении отдельного значения первичного ключа ко второму значению или сделать поле2 и field3 вместе первичный ключ.