none
Como puede haces varias referencias de tabla para una llave Foranea RRS feed

  • Pregunta

  • Tengo una tabla Persona y empresa. y ellas puenden ser suplidor pero sql server no permites la referencias de las dos a un solo campos de la suplidor.

    Dioegenes

    martes, 19 de junio de 2018 13:04

Respuestas

Todas las respuestas

  • Efectivamente, no puedes poner un FK que diga "este valor puede provenir bien sea de la tabla A o bien de la tabla B".

    Una alternativa es juntar las tablas Persona y Empresa en una sola tabla que se llame por ejemplo Entidad y que tenga un campo adicional para indicar si la entidad es una persona física o una persona jurídica (empresa). En la tabla Suplidor pondrías una FK a la tabla Entidad.

    Si eso no es viable, otra alternativa (más complicada y menos elegante) es prescindir de la integridad referencial declarativa y en su lugar hacerla imperativa mediante triggers. Esto implica que tendrías que escribir un trigger en la tabla de destino para que verifique las inserciones y actualizaciones, y otro en las tablas Persona y Empresa para que valide las actualizaciones y los borrados.

    • Propuesto como respuesta webJose miércoles, 20 de junio de 2018 2:04
    martes, 19 de junio de 2018 15:13
  • Gracias por tu respuesta usare la primera.

    Dioegenes

    jueves, 21 de junio de 2018 13:06
  • Esto suele ser un caso tipico de Supertipo - Subtipos, donde la relacion suele hacerse desde los subtipo hacia el Supertipo.

    Suplidor (SuplidorId, SuplidorTipo) 
    Persona (PersonaId, 'P' as SuplidorTipo, ...)
    Empresa (EmpresaId, 'E' as SuplidorTipo, ...)

    Si ambos Ids (Persona, Empresa) son del mismo tipo entonces puedes hacer una relacion de clave foranea desde cada tabla subtipo hacia la tabla Supertipo)

    Persona(PersonaId, SuplidorTipo) -> Suplidor(SuplidorId, SuplidorTipo)
    Empresa(EmpresaId, SuplidorTipo) -> Suplidor(SuplidorId, SuplidorTipo)

    Si ambos Ids difieren en tipo de dato entonces habra que buscar otras soluciones. Por ejemplo aniadir dos columnas en la tabla Suplidor, una para cada entidad mas el tipo y una llave subrrogada. Implementaria la restriccion de clave primaria por la llave subrrogada y aniadiria dos indices filtrados (NOT NULL) unicos para forzar la unicidad de cada tipo.

    https://searchsqlserver.techtarget.com/feature/Supertype-and-subtype-tables-in-SQL-Server


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas



    jueves, 21 de junio de 2018 14:00