Estou criando um banco de dados de inventário que armazena hardware de TI, como computadores desktop, laptops, comutadores, roteadores, telefones celulares, etc. Estou usando um padrão de supertipo / subtipo, onde todos os dispositivos são armazenados em uma única tabela e informações específicas é colocado em tabelas de subtipos. Meu dilema é escolher entre os dois modelos a seguir:
No diagrama superior, todos os dispositivos compartilham subtipos comuns. Por exemplo, computadores desktop e laptops teriam registros nas seguintes tabelas: Device, NetworkDevice. Um switch teria registros em: Device, NetworkDevice. Um roteador teria registros em: Device, NetworkDevice, WANDevice. Qualquer dispositivo para o qual rastreamos a localização terá um registro em Localização. Alguns prós e contras que eu pensei para esta configuração:
- Pro: é mais fácil selecionar registros com base em um campo comum, como Hostname ou LocationID.
- Pro: sem campos nulos.
- Contras: As tabelas que devem ser incluídas nas operações CRUD para um dispositivo específico não são óbvias e podem confundir futuros DBAs.
No diagrama inferior, todos os dispositivos têm seu próprio subtipo (há mais classes de dispositivos que não são mostradas aqui). Nessa situação, é óbvio quais registros de tabelas são inseridos ou selecionados. Computadores de mesa e laptops entram em Computador, etc. Alguns prós e contras que eu pensei sobre esta configuração:
- Pro: é imediatamente óbvio quais tabelas usar para operações CRUD para subtipos.
- Pro: Somente é necessário usar uma tabela para operações CRUD.
- Con: A seleção de registros com base em campos de subtipos comuns exige que todas as tabelas sejam combinadas, por exemplo, pesquisando por Nome do host ou ID da localização.
Nas duas situações, o campo ClassDiscriminator é colocado em tabelas de subtipos para uso com uma restrição CHECK para controlar quais tipos podem ser inseridos.
Existem recomendações para qual design é melhor ou é completamente uma questão de opinião e depende da finalidade do banco de dados?
Edição: Uma pergunta específica que tenho diz respeito à natureza sobreposta da tabela "NetworkDevice". Esta tabela deve conter informações de rede para qualquer dispositivo com um nome de host e / ou endereço IP, seja um computador, comutador ou roteador. A natureza sobreposta dessa tabela é algo que pode causar problemas ou é bom implementá-la dessa maneira?
Agradecemos antecipadamente por qualquer contribuição fornecida. Por favor, pergunte se alguma informação adicional é necessária.