При проектировании базы данных возник вопрос: как правильно организовать многоуровневые справочники? и нужны-ли они вообще.
Предположим есть таблица [контакт] и таблица [вид контакта]. Связь между ними один ко многим, т.е у контакта есть поле (вид), связанное с таблицей видов. Однако, здесь необходимо четко продумать иерархию видов. Например:
вх. звонок – семинар
– обучение — заявка
— отзыв
визит — обучение
— презентация
Это вариант первый.
Но вот появляется контакт, котрый сочетает в себе несколько видов. Как быть? Усложнять иерархию видов – нет желания. Можно вынести все виды в один неиерархический список и ввести новую промежуточную таблицу:
+----+--------------+---------+
| id | вид_контакта | контакт |
+----+--------------+---------+
| 1 | вх. звонок | первый |
+----+--------------+---------+
| 2 | обучение | первый |
+----+--------------+---------+
| 3 | вх. звонок | второй |
+----+--------------+---------+
| 4 | семинар | второй |
+----+--------------+---------+
| 5 | отзыв | второй |
+----+--------------+---------+ и т.д.
Это вариант второй.
Ну и третий вариант. В таблице [контакт] поле (вид) рассматривать как набор битов – те из них которые включены и определяют тип контакта.
+------------вх. звонок
| +----------исх. звонок
| | ...
| | +----обучение
| | | ...
+-+-+-+-+-+-+-+ +-+
|1|0|0|0|1|0|0|...|0|
+-+-+-+-+-+-+-+ +-+
У воторого и третьего варианта есть недостаток по отношению к первому — появляется возможность занесения в таблицу несовместимых видов (допустим вх. звонок и исх. звонок одновременно). Или отдать это на откуп пользователям?
Буду благодарен за любые мысли, ссылки на книги, сайты.