Re[6]: Таблица с одним полем - быть или не быть?
От: Other Sam Россия  
Дата: 04.05.10 09:39
Оценка:
> _FR>>Например, есть таблица Заметки { NoteId, Note }, есть таблицы
> Товары, Служащие, Контракты, Адреса, … всё что угодно. Каждый Товар,
> Служащий, Контракт или Адрес может иметь несколько Заметок. Всё. Как?
> S>Для такого сценария — по отдельной табличке типа OrderNodes,
> CustomerNodes etc (ID, %ParentTableName%_ID, Note).
>
> А какой поинт в том, что бы дублировать структуру таблицы Notes? Я бы
> ещё немного понял таблицу OrderNodes (Id, OrderId, NoteId) и так далее,
> но это мне всё равно не нравится: количество таблиц увеличивается вдвое,
> причём половина таблиц имеет одинаковую структуру.
>
> S>Для сценария, когда надо шарить один и тот же список между несколькими
> сущностями — ваш вариант.
>
> Нет, списки шарить не нужно. Но, например, Адрес может иметь несколько
> наборов заметок: Заметки-об-адресе-в-целом, заметки-о-городе,
> заметки-об-индексе, заметки-об-улице…

В вашем случае, чтобы получить 3ю нормальную форму придется делать так.
CREATE TABLE Addresses (
   AddressID integer PRIMARY KEY,
   Street text,
   City text,
);
CREATE TABLE Notes (
   NoteId integer PRIMARY KEY,
   Note text
);
CREATE TABLE AddressNotes (
   AddressID integer,
   NoteID integer,
   PRIMARY KEY (AddressID, NoteID),
   FOREIGN KEY (AddressID) REFERENCES Addresses (AddressID)
   FOREIGN KEY (NoteID) REFERENCES Notes (NoteID)
);
CREATE TABLE AddressStreetNotes (
   AddressID integer,
   NoteID integer,
   PRIMARY KEY (AddressID, NoteID),
   FOREIGN KEY (AddressID) REFERENCES Addresses (AddressID)
   FOREIGN KEY (NoteID) REFERENCES Notes (NoteID)
);
CREATE TABLE AddressCityNotes (
   AddressID integer,
   NoteID integer,
   PRIMARY KEY (AddressID, NoteID),
   FOREIGN KEY (AddressID) REFERENCES Addresses (AddressID)
   FOREIGN KEY (NoteID) REFERENCES Notes (NoteID)
);
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.