Estoy construyendo una base de datos de inventario que almacena hardware de TI, como computadoras de escritorio, computadoras portátiles, conmutadores, enrutadores, teléfonos móviles, etc. Estoy usando un patrón de supertipo / subtipo, donde todos los dispositivos se almacenan en una sola tabla e información específica se pone en tablas de subtipo. Mi dilema es elegir entre los siguientes dos diseños:
En el diagrama superior, todos los dispositivos comparten subtipos comunes. Por ejemplo, las computadoras de escritorio y las computadoras portátiles tendrían registros en las siguientes tablas: Dispositivo, Dispositivo de red. Un conmutador tendría registros en: Dispositivo, Dispositivo de red. Un enrutador tendría registros en: Dispositivo, Dispositivo de red, WANDevice. Cualquier dispositivo para el que rastreemos la ubicación tendrá un registro en Ubicación. Algunos pros y contras que pensé para esta configuración:
- Pro: SELECCIONAR registros basados en un campo común, como Hostname o LocationID es más fácil.
- Pro: sin campos nulos.
- Con: las tablas que deben incluirse en las operaciones CRUD para un dispositivo en particular no son obvias y pueden confundir futuros DBA.
En el diagrama inferior, todos los dispositivos tienen su propio subtipo (hay más clases de dispositivos que no se muestran aquí). En esta situación, es obvio desde qué tablas se insertan o seleccionan los registros. Las computadoras de escritorio y las computadoras portátiles van en Computadora, etc. Algunas ventajas y desventajas que pensé para esta configuración:
- Pro: es inmediatamente obvio qué tablas usar para operaciones CRUD para subtipos.
- Pro: solo tiene que usar una tabla para operaciones CRUD.
- Con: la SELECCIÓN de registros basada en campos de subtipo comunes requiere que todas las tablas se combinen, por ejemplo, buscar por Nombre de host o LocationID.
En ambas situaciones, el campo ClassDiscriminator se coloca en tablas de subtipos para usar con una restricción CHECK para controlar qué tipos se pueden insertar.
¿Hay alguna recomendación para qué diseño es mejor, o es completamente una cuestión de opinión y depende del propósito previsto de la base de datos?
EDITAR: Una pregunta específica que tengo sobre la naturaleza superpuesta de la tabla "NetworkDevice". Esta tabla está destinada a contener información de red para cualquier dispositivo con un nombre de host y / o dirección IP, ya sea una computadora, conmutador o enrutador. ¿Es la naturaleza superpuesta de esta tabla algo que podría causar problemas, o está bien implementarla de esta manera?
Gracias de antemano por cualquier aportación proporcionada. Por favor pregunte si se necesita información adicional.