Buenas tardes.
Tengo una duda que por más vueltas que le doy, y tras leer varias recomendaciones, no termino de convencerme de cuál sería la mejor opción.
Estoy realizando un programa de gestión para una empresa, que trabaja con multitud de productos, los cuales se agrupan en diferentes familias, y que aparte de tener algunas características comunes (nombre, referencia, referencia del proveedor, nivel de stock, etc.) tienen otras muy específicas que van a depender exclusivamente del tipo de producto que sean.
Me explico más detalladamente.
Tenemos un producto, caja, que aparte de los campos comunes que he comentado anteriormente, tendría que definir también su largo, ancho, alto, calidad y presentación (campos específicos).
Por otra parte, tenemos otro producto, cesta, que aparte de los comunes, tendría que definir otros campos específicos, como capacidad, material y grosor.
Y así, con muchísimos más artículos de otras familias, que entre ellas en un momento dado pueden compartir algún campo (por ejemplo muchos tipos de productos necesitan definir el largo, ancho y alto) pero que siempre van a tener algún tipo de característica específica.
La gran duda que tengo a la hora de diseñar la base de datos es:
- OPCIÓN A: Hacer una megatabla donde dar cabida a todos los productos con todos los campos, estableciendo a que admitan nulos aquellos donde va a depender de la familia y que por tanto no van a tener valores para todos. Aquí me pregunto cómo implementaría la admisión de nulos, teniendo en cuenta que para algunos campos sus valores estarían relacionados con otras tablas a través de clave externa. Por ejemplo, para el tipo de producto caja, que tiene el campo específico calidad, habría una tabla denominada calidades que estaría relacionada mediante clave externa.
- OPCIÓN B: Hacer una tabla común, con todos los productos y sus campos comunes, y después una tabla para cada tipo de producto (familia), relacionadas cada una con la común a través de clave externa, y que contendrían los campos específicos para el tipo de producto en cuestión.
Esto me implica quebraderos de cabeza a la hora de implementar la creación de nuevos productos o su actualización, ya que en función del tipo debo guardar los datos en una u otra tabla, presentar los formularios al usuario en función de los campos necesarios, validar los datos enviados según el tipo de producto, etc.
¿Podéis orientarme sobre cuál opción veis mejor?
Gracias.
Saludos.