sql >> Base de Datos >  >> RDS >> Mysql

¿Debería este diagrama ER usar una relación ternaria en su lugar?

Parece que estás leyendo mal las especificaciones. Un artículo se lleva a un centro minorista de UPS y luego se envía a un destino. Pero consideremos la relación ternaria en la que un artículo enviado requiere un evento de transporte para llegar a un destino específico. .

Esa es una de las muchas relaciones concebibles en esas tres entidades.

Sí, lo hace. Pero la relación ternaria es expresable en términos de estas relaciones binarias de diagrama. (Y no al revés.)

Cada tabla (variable base o resultado de consulta) contiene filas que participan en alguna relación particular. Podemos caracterizar la relación por un predicado --una plantilla de declaración parametrizada por atributos.

Una tabla contiene las filas cuyos valores para los atributos hacen una declaración verdadera a partir de su predicado. El DBA proporciona el predicado de una variable base.

-- shipped item ItemNumber is received by retail center UniqueId
SELECT * FROM ReceivedFrom
-- shipped item ItemNumber takes transportation event ScheduleNumber
SELECT * FROM ShippedVia

El predicado de una expresión de consulta se construye a partir de sus operadores y argumentos. Por ejemplo, el predicado de NATURAL JOIN de dos tablas es el AND de los predicados de las tablas.

-- shipped item ItemNumber is received by retail center UniqueId
       and takes transportation event ScheduleNumber
SELECT * FROM ReceivedFrom NATURAL JOIN ShippedVia

Por supuesto, su concepción particular de la relación ternaria podría no ser exactamente esta consulta/tabla. Pero una base de datos práctica de UPS tendría tablas para las relaciones fundamentales en términos de las cuales se puede expresar cualquier relación relevante.

(La normalización divide los predicados de la forma "... Y ..." en predicados separados para los "..." cuando es posible y útil; la tabla original se devuelve mediante la UNIÓN de los componentes.)