Buduję bazę danych inwentarza, która przechowuje sprzęt IT, taki jak komputery stacjonarne, laptopy, przełączniki, routery, telefony komórkowe itp. Używam wzorca nadtypu / podtypu, w którym wszystkie urządzenia są przechowywane w jednej tabeli, a także konkretnych informacji jest umieszczany w tabelach podtypów. Moim dylematem są dwa następujące projekty:
Na górnym schemacie wszystkie urządzenia mają wspólne podtypy. Na przykład komputery stacjonarne i laptopy miałyby rekordy w następujących tabelach: Urządzenie, NetworkDevice. Przełącznik miałby rekordy w: Device, NetworkDevice. Router ma zapisy w: Device, NetworkDevice, WANDevice. Każde urządzenie, dla którego śledzimy lokalizację, będzie miało zapis w lokalizacji. Niektóre zalety i wady, o których pomyślałem dla tej konfiguracji:
- Pro: WYBIERANIE rekordów na podstawie wspólnego pola, takiego jak nazwa hosta lub identyfikator lokalizacji jest łatwiejsze.
- Pro: Brak pól zerowych.
- Wada: tabele, które powinny być uwzględnione w operacjach CRUD dla konkretnego urządzenia, nie są oczywiste i mogą mylić przyszłe DBA.
Na dolnym schemacie wszystkie urządzenia mają swój własny podtyp (istnieje więcej klas urządzeń, których nie pokazano). W tej sytuacji oczywiste jest, które rekordy tabel zostaną wstawione lub wybrane. Komputery stacjonarne i laptopy działają w komputerze itp. Niektóre zalety i wady, o których pomyślałem dla tej konfiguracji:
- Pro: od razu wiadomo, których tabel użyć do operacji CRUD dla podtypów.
- Pro: Musisz używać tylko jednej tabeli do operacji CRUD.
- Przeciw: WYBÓR rekordów na podstawie wspólnych pól podtypów wymaga połączenia wszystkich tabel, na przykład wyszukiwania według nazwy hosta lub identyfikatora lokalizacji.
W obu sytuacjach pole ClassDiscriminator jest umieszczane w tabelach podtypów w celu użycia z ograniczeniem CHECK do kontrolowania, które typy można wstawić.
Czy są jakieś zalecenia, dla których projekt jest lepszy, czy też jest to całkowicie kwestia opinii i zależy od zamierzonego celu bazy danych?
EDYCJA: Szczególne pytanie, które mam, dotyczy nakładającego się charakteru tabeli „NetworkDevice”. Ta tabela służy do przechowywania informacji o sieci dla dowolnego urządzenia z nazwą hosta i / lub adresem IP, niezależnie od tego, czy jest to komputer, przełącznik czy router. Czy nakładający się charakter tej tabeli może powodować problemy, czy też jest w porządku, aby zaimplementować ją w ten sposób?
Z góry dziękuję za wszelkie przekazane informacje. Zapytaj, czy potrzebne są dodatkowe informacje.