none
RELACIONES CON UNA TABLA QUE TIENE LLAVES PRIMARIAS COMPUESTAS RRS feed

  • Pregunta

  • Buenos Días, necesito crear la siguiente relación, SQL Server me envía mensajes de error cuando quiero establecer las relaciones ninguno de los siguientes códigos a funcionado, su ayuda por favor.

    SON TRES TABLAS UNA ES ORDENES, PRODUCTOS Y OTRA ORDENESDETALLES (ESTA TIENE DOS LLAVES PRIMARIAS), NO LOGRO ESTABLECER UNA RELACION ENTRE ORDENES Y ORDENESDETALLES O ENTRE PRODUCTOS Y ORDENESDETALLES.

    ALTER TABLE Orders
    ADD CONSTRAINT fk_orderid12
        FOREIGN KEY(OrderID)
    REFERENCES OrderDetails(OrderID);
    GO

    ALTER TABLE Orders
    ADD CONSTRAINT fk_orderid12
        FOREIGN KEY(OrderID,ProductID)
    REFERENCES OrderDetails(OrderID);
    GO


    domingo, 24 de diciembre de 2017 13:17

Respuestas

  • [...]FOREIGN KEY(OrderID,ProductID) REFERENCES OrderDetails(OrderID);

    Hay dos reglas que se tienen que cumplir:

    1) Los campos que pongas detrás de FOREGIN KEY tienen que concordar con los que pongas detrás de REFERENCES. En el ejemplo de arriba, el primero tiene dos campos y el segundo uno, luego no puede funcionar ese Foreign Key. Si quieres que DOS campos de la primera tabla se relacionen con la segunda tabla, entonces hay que poner DOS campos en la segunda tabla, no puede ser solo uno.

    2) SQL Server requiere que los campos referenciados tengan un índice único. Pueden ser la clave primaria (que forzosamente lleva ya el índice único), o puede ser otra combinación de campos distinta de LA clave primaria a condición de que el conjunto de esos campos tenga un índice de tipo UNIQUE (énfasis en "LA", nunca puede haber más de UNA clave primaria contrariamente a tu pregunta donde afirmas tener dos; lo más que puedes tener es una clave primaria que tenga más de un campo, pero nunca dos claves primarias).

    Si se infringe alguna de esas dos condiciones, no es posible establecer el Foreign Key entre las tablas, así que revísalas y comprueba si su estructura permite cumplirlas.

    domingo, 24 de diciembre de 2017 16:04

Todas las respuestas

  • [...]FOREIGN KEY(OrderID,ProductID) REFERENCES OrderDetails(OrderID);

    Hay dos reglas que se tienen que cumplir:

    1) Los campos que pongas detrás de FOREGIN KEY tienen que concordar con los que pongas detrás de REFERENCES. En el ejemplo de arriba, el primero tiene dos campos y el segundo uno, luego no puede funcionar ese Foreign Key. Si quieres que DOS campos de la primera tabla se relacionen con la segunda tabla, entonces hay que poner DOS campos en la segunda tabla, no puede ser solo uno.

    2) SQL Server requiere que los campos referenciados tengan un índice único. Pueden ser la clave primaria (que forzosamente lleva ya el índice único), o puede ser otra combinación de campos distinta de LA clave primaria a condición de que el conjunto de esos campos tenga un índice de tipo UNIQUE (énfasis en "LA", nunca puede haber más de UNA clave primaria contrariamente a tu pregunta donde afirmas tener dos; lo más que puedes tener es una clave primaria que tenga más de un campo, pero nunca dos claves primarias).

    Si se infringe alguna de esas dos condiciones, no es posible establecer el Foreign Key entre las tablas, así que revísalas y comprueba si su estructura permite cumplirlas.

    domingo, 24 de diciembre de 2017 16:04
  • Deleted
    lunes, 25 de diciembre de 2017 20:52