2010-05-06 6 views
0

У меня есть система, которая имеет двух типов пользователей (компаний и частных лиц). Все типы имеют общий набор свойств, но они отличаются друг от друга. Какая наилучшая конструкция объединяет все в одной таблице, которая допускает null для непревзойденных свойств или разделяет их в двух таблицах, связанных с базовой таблицей с отношением один к одному. Спасибо.Дизайн базы данных

+1

Создайте базовую таблицу с общими свойствами и ссылку на две отдельные таблицы с уникальными свойствами. Это будет следовать процессу нормализации, который я считаю. – Lazarus

+0

Каково количество разных полей? – DForck42

ответ

3

Производительность, это вопрос компромисса.

Для выбора свойств из другой таблицы потребуется дополнительно JOIN (что плохо для производительности), но сохраняет основную таблицу меньше (что хорошо для производительности).

JOIN - довольно дорогостоящая операция, поэтому, если у вас нет, например, 200 этих свойств (что значительно увеличит таблицу), лучше держать их в одном столе.

Разделение таблиц, однако, сделает ваши CHECK и NOT NULL ограничения более простыми.

3

Для лучшей производительности используйте одну таблицу для обоих, разрешите нули для разных свойств и добавьте атрибут типа.

Одностороннее отношение (эквивалентное подклассу в мире OO) сделает вашу схему более удобной и понятной, но включает в себя хитовую производительность. Выберите свою таблетку.

Смежные вопросы