2011-11-11 19 views
8

Estoy tratando de comprender las relaciones y, naturalmente, aparecen las preguntas.Tabla de referencia y tabla de referencia

MySQL Workbench screenshot

¿Qué significa cuadro de correspondencia y qué significa tabla de referencia? En el ejemplo anterior, ¿a cuál se debe hacer referencia y a cuál se hace referencia? Digamos por el argumento de que la tabla settlements es una tabla secundaria (la liquidación no puede existir sin un país). ¿Debería esta tabla secundaria hacer referencia o referenciarla?

Prefiero no abrir una nueva pregunta para una pregunta tan pequeña: ¿Qué significa esa casilla de verificación Mandatory? ¿Significa que se requiere la tabla de liquidaciones o que se requiere country_id? O tal vez algo más?

+0

tal vez debería publicar esto en el archivo inglés.stackexchange.com: D – abruski

Respuesta

8

Encontré una explicación muy buena en la documentación de PostgreSQL.

Digamos que tiene la tabla de productos que hemos utilizado ya varias veces:

CREATE TABLE products (
    product_no integer PRIMARY KEY, 
    name text, 
    price numeric 
); 

de Vamos también se supone que tiene una tabla que almacena las órdenes de esos productos. Queremos asegurarnos de que la tabla de órdenes solo contenga pedidos de productos que realmente existen. Así se define una restricción de clave externa en la tabla pedidos que hace referencia a la tabla productos:

CREATE TABLE orders (
    order_id integer PRIMARY KEY, 
    product_no integer REFERENCES products (product_no), 
    quantity integer 
); 

Ahora bien, es imposible crear órdenes con product_no entradas que no aparecen en la tabla de productos.

decimos que en esta situación la tabla de pedidos es la tabla de referencia y la tabla de productos es la tabla referenciada . Del mismo modo, hay referencias y columnas referenciadas.

2

settlements mesa (con el campo country_id) hace referencia acountries mesa (el campo id)

supongo casilla de verificación obligatoria no tiene nada que ver con la relación. Es simplemente una restricción no nula en el campo. Pero debe consultar el manual de usuario de MySQL Workbench en este.

+0

¿Entonces este diagrama que hice es el correcto? settlemets debería ser la tabla de referencia? – abruski

+0

yupp, y 'countries' debe ser el referido – bpgergo

+0

No lo creo. Ver mi respuesta – Bytemain

0

Un país puede tener muchas liquidaciones, por lo que la tabla de países es la tabla a la que se hace referencia y la tabla de liquidación es la tabla de referencia. No sé sobre el campo obligatorio.

+1

la tabla 'liquidaciones' contiene el campo' country_id' que hace referencia a la tabla 'countries'. Entonces, concluyo, la tabla 'liquidaciones' hace referencia a la tabla' países'. – bpgergo

+0

Es cierto, pero un país puede tener muchos asentamientos. IMO es la tabla de país de la tabla principal. Es imposible navegar a través de los asentamientos para encontrar el país. – Bytemain

+0

@Betterdev Lo que quiere decir es la diferencia entre las relaciones uno a muchos y muchos a uno. –

4

La tabla a la que se hace referencia es la tabla 'principal'.

La tabla de referencia es la tabla 'secundaria'.

La pista está en el SQL DDL, p. Ej.

ALTER TABLE Settlements ADD 
    FOREIGN KEY (country_id) 
    REFERENCES Countries (id); 

Acuerdos Referencias Países, implica Países a los que se hace referencia.

1

La casilla de verificación obligatorio, si parece que no tiene ningún efecto en el SQL generado, tiene algún efecto en el gráfico.Si no está marcada, puede ver un pequeño círculo en la extremidad de la línea de relación concernida (para la notación de relación pata de gallo).

Significa que la clave externa podría ser nula, también conocida como. no es obligatorio.

Cuestiones relacionadas