Я будую базу даних інвентаризації, в якій зберігаються інформаційні засоби, такі як настільні комп'ютери, ноутбуки, комутатори, маршрутизатори, мобільні телефони тощо. Я використовую шаблон супертипу / підтипу, де всі пристрої зберігаються в одній таблиці та конкретну інформацію вводиться в таблиці підтипів. Моя дилема - це вибір між двома наступними проектами:
У верхній діаграмі всі пристрої мають спільні підтипи. Наприклад, настільні комп'ютери та ноутбуки матимуть записи у таких таблицях: Device, NetworkDevice. Комутатор матиме записи в: Device, NetworkDevice. Маршрутизатор матиме записи в: Device, NetworkDevice, WANDevice. Будь-який пристрій, для якого ми відстежуємо місцезнаходження, матиме запис у Location. Деякі плюси і мінуси, які я придумав для цієї установки:
- Pro: ВИБІРИ записи, що базуються на загальному полі, наприклад, Hostname або LocationID, простіше.
- Pro: Немає нульових полів.
- Con: Таблиці, які повинні бути включені до операцій CRUD для певного пристрою, не є очевидними та можуть заплутати майбутні DBA.
У нижній діаграмі всі пристрої мають свій підтип (Є більше класів пристроїв, які тут не показані). У цій ситуації очевидно, з яких записів таблиць вставляється або вибирається з них. Настільні комп’ютери та ноутбуки входять у Комп'ютер тощо. Деякі плюси і мінуси, про які я думав для цієї установки:
- Про: Одразу очевидно, які таблиці використовувати для операцій CRUD для підтипів.
- Про: Для операцій з CRUD потрібно використовувати лише одну таблицю.
- Con: ВИБІР записів на основі загальних полів підтипу вимагає об'єднання всіх таблиць, наприклад, пошук за ім'ям хосту або LocationID.
В обох ситуаціях поле ClassDiscriminator розміщується у підтипових таблицях для використання із обмеженням CHECK для контролю, які типи можна вставити.
Чи є якісь рекомендації щодо того, який дизайн краще, або це повністю питання думки та залежить від цільової мети бази даних?
EDIT: Конкретне запитання, що стосується перекриття таблиці "NetworkDevice". Ця таблиця призначена для зберігання мережевої інформації для будь-якого пристрою з ім'ям хоста та / або IP-адресою, будь то комп'ютер, комутатор або маршрутизатор. Чи характер перекриття цієї таблиці є чимось, що може спричинити проблеми, чи добре її реалізувати таким чином?
Заздалегідь дякую за будь-який наданий вклад. Запитайте, чи потрібна додаткова інформація.