Su primer ejemplo declara la restricción en la línea, la segunda no. Solo teclas simples (implican un atributo) se pueden declarar en línea, las claves compuestas (que implican varias columnas) no pueden. ¡Pero ambas son restricciones de nivel de tabla!
hay cuatro niveles lógicos de restricción:
1) de nivel de columna:
CHECK (ProductID > 0)
2) nivel de fila:
CHECK (Product_start_date < Product_end_date)
3) nivel de la Tabla (El siguiente el ejemplo aún no es compatible con SQL Server):
CHECK (NOT EXISTS (SELECT *
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY ProductID) AS Tally
FROM Products AS P) AS DT1
WHERE Tally > 1))
4) nivel de base de datos (todavía no soportado en SQL Server):
CREATE ASSERTION EnterpriseUniqueIds
CHECK (NOT EXISTS (SELECT *
FROM ProductID AS P
JOIN Components AS C
ON C.ComponentID = P.ProductID));
una restricción de clave implica la comparación de diferentes filas dentro de la misma tabla, por lo tanto, es una restricción de nivel de tabla.
Gracias marc, lo tengo. –