sql >> Base de Datos >  >> RDS >> Sqlserver

Relación sql de clave principal compuesta

Si tiene un compuesto clave principal, luego todas las restricciones de clave externa que hacen referencia a ella deben usar todas las columnas de la clave primaria compuesta.

Entonces, en su caso, TableTwo debe referencia TableOne(ReportID, Date)

La única forma de evitar esto sería crear un UNIQUE INDEX en TableOne (ReportID) - luego puede crear una referencia de clave externa solo a esa restricción única.

Pero eso plantea la pregunta:¿por qué no es ReportID solo la clave principal, si ya es única (ya que puedes poner un UNIQUE INDEX en él) y NOT NULL (ya que es parte del compuesto PK) ?

Paso 1:crea el UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Paso 2:crea la clave externa desde TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)