Я создаю базу данных инвентаризации, которая хранит ИТ-оборудование, такое как настольные компьютеры, ноутбуки, коммутаторы, маршрутизаторы, мобильные телефоны и т. Д. Я использую шаблон супертипа / подтипа, где все устройства хранятся в одной таблице, и конкретную информацию помещается в таблицы подтипов. Моя дилемма заключается в выборе между двумя вариантами:
На верхней диаграмме все устройства имеют общие подтипы. Например, настольные компьютеры и ноутбуки могут иметь записи в следующих таблицах: Device, NetworkDevice. Коммутатор будет иметь записи в: Device, NetworkDevice. Маршрутизатор будет иметь записи в: Device, NetworkDevice, WANDevice. Любое устройство, для которого мы отслеживаем местоположение, будет иметь запись в Location. Некоторые плюсы и минусы, которые я подумал для этой установки:
- Pro: Выбор записей на основе общего поля, например, Hostname или LocationID, проще.
- Pro: нет пустых полей.
- Против: Таблицы, которые должны быть включены в операции CRUD для конкретного устройства, не очевидны и могут запутать будущих администраторов баз данных.
На нижней диаграмме все устройства имеют свой собственный подтип (есть другие классы устройств, которые здесь не показаны). В этой ситуации очевидно, в какие записи таблиц вставляются или из которых выбираются. Настольные компьютеры и ноутбуки идут в Компьютере и т. Д. Некоторые плюсы и минусы, которые я подумал для этой установки:
- Pro: Сразу видно, какие таблицы использовать для операций CRUD для подтипов.
- Pro: Нужно использовать только одну таблицу для операций CRUD.
- Con: для выбора записей на основе общих полей подтипов необходимо объединить все таблицы, например, поиск по имени хоста или LocationID.
В обеих ситуациях поле ClassDiscriminator помещается в таблицы подтипов для использования с ограничением CHECK для управления тем, какие типы могут быть вставлены.
Существуют ли какие-либо рекомендации, для которых дизайн лучше, или это полностью вопрос мнения и зависит от предполагаемого назначения базы данных?
РЕДАКТИРОВАТЬ: конкретный вопрос, который я имею в связи с перекрывающейся природой таблицы «NetworkDevice». Эта таблица предназначена для хранения информации о сети для любого устройства с именем хоста и / или IP-адресом, будь то компьютер, коммутатор или маршрутизатор. Является ли пересекающаяся природа этой таблицы чем-то, что может вызвать проблемы, или это нормально, чтобы реализовать это таким образом?
Заранее спасибо за любой предоставленный вклад. Пожалуйста, спросите, нужна ли какая-либо дополнительная информация.