none
Como tener una tabla Atributos "tabla hija" pero que los atributos requieran especificar el tipo de campo que contendra RRS feed

  • Pregunta

  • Hola

    Tengo las siguientes tablas

    CREATE TABLE dbo.Vehiculos(
    Id Int,
    Titulo Varchar(50)
    )
    GO
    CREATE TABLE dbo.Atributos(
    Id Int,
    Atributo Varchar(50)
    )
    Go
    CREATE TABLE dbo.VehiculosAtributos(
    VehiculoId Int, --foreign key tabla dbo.Vehiculo,
    AtributoId Int --foreign key tabla dbo.Atributos
    )
    Go

    Como se deduce facilmente es una tabla Vehiculos el cual puede tener N atributos como "aire acondicionado, tapizado de cuero, reproductor, etc..."... Para conocer todos los atributos o caracteristicas del vehículo basta con consultar dbo.VehiculosAtributos.

    Pero ahora se quiere hacer algo mas complejo, se requiere que aparte de existir atributos tipo check "por asi decirlo" se requiere que hagan atributos los cuales los usuarios tegan que introducir un determinado valor... Ejemplo

    Un autobus podria tener atributos "Número de asientos, Butacas reclinables, Tv, Baño, etc..." Mientras que una moto "Cilindrada" o una lancha "Pies"... Por lo que tengo que crear una estructura la cual soporte esto y que posean tipos de datos, inicialmente solo "varchar, int"... Tambien se debe poder especificar si el campo es requerido y en el caso de los int el valor minimo y maximo... Para que una aplicación web pueda leer y armar todo de acuerdo en tiempo de ejecución de acuerdo a la información suministrada en la tabla...

    Sera que alguien tiene experiencia o algun metodo para esto

    domingo, 24 de marzo de 2013 2:44

Respuestas

  • Ese modelo es conocido como EAV (Entity Attribute Value) y aunque de primera vista puede parecer una herramienta dinamica, al final terminas dandote cuenta que es dificil implementar restricciones de dominio (tipo de data y valores en su dominio), que se debe usar SQL dinamico para poder hacer pivot y devolver los atributos en forma de tabla. Tambien notaras que los queries necesarios para resolver problemas simples, tienden a ser complicados cuando usas este modelo.

    Ve si te es util usar columnas esparcidas (sparse columns) o XML data type para almacenar atributos disparados o esparcidos. Yo comenzaria por ver si puedes implementar Supertipos y Subtipos en tu modelo.

    Use Sparse Columns

    http://msdn.microsoft.com/en-us/library/cc280604.aspx

    AMB

    Some guidelines for posting questions...




    domingo, 24 de marzo de 2013 13:16

Todas las respuestas

  • Hola Zr.

    Has pensado en una estructura parecido a esto?? El 1 seria coche por ejemplo y el 2 autobus

    Sería poner los atributos como registros de una tabla auxilliar.

    TipoObjeto    Atributo                TipoDeDato   Requerido

    1                 Resposabrazos      Bit                      False

    1                Aire Acondicoinado Bit                      True

    2               Numero de Asientos Int                     65

    Un abrazo.

    Héctor.

    domingo, 24 de marzo de 2013 10:59
  • Ese modelo es conocido como EAV (Entity Attribute Value) y aunque de primera vista puede parecer una herramienta dinamica, al final terminas dandote cuenta que es dificil implementar restricciones de dominio (tipo de data y valores en su dominio), que se debe usar SQL dinamico para poder hacer pivot y devolver los atributos en forma de tabla. Tambien notaras que los queries necesarios para resolver problemas simples, tienden a ser complicados cuando usas este modelo.

    Ve si te es util usar columnas esparcidas (sparse columns) o XML data type para almacenar atributos disparados o esparcidos. Yo comenzaria por ver si puedes implementar Supertipos y Subtipos en tu modelo.

    Use Sparse Columns

    http://msdn.microsoft.com/en-us/library/cc280604.aspx

    AMB

    Some guidelines for posting questions...




    domingo, 24 de marzo de 2013 13:16