2010-08-31 14 views
12

Quiero implementar el concepto one-to-many en mi aplicación. Este es el escenario: tengo dos tablasCómo implementar ONE-TO-MANY en una base de datos

(i). Persona (ID, NOMBRE, EDAD, DEPTO)
(ii). Responsabilidades de la persona (ID, RESP.)

Una persona puede tener más de una responsabilidad. ¿Cómo implementaré una relación 1-n aquí? En realidad, no entiendo los conceptos correctos para esto.

Cualquier sugerencia o enlace para entender este concepto sería apreciado.

Respuesta

16

Este uno-a-muchos relación puede ser interpretada en Inglés sencillo como esto ...

una persona tiene una o más responsabilidades,

Y

Cada responsabilidad pertenece a exactamente una persona .

Ahora, dependiendo de qué rdbms está utilizando, implementaría esto como una relación de clave externa.

Primero necesita agregar una columna a RESPS que apunte a la tabla de personas.

Llamemos a esta nueva columna PERSON_ID.

Ahora podemos declarar la relación, el código podría ser algo como esto;

ALTER TABLE [Responsibilities] ADD CONSTRAINT FOREIGN KEY (PERSON_ID) 
REFERENCES [Person] (ID) 

Y esta declaración de una restricción de clave externa significaría que de ahora en adelante no se puede agregar una responsabilidad sin especificar una persona que posee esa responsabilidad.

Pero aún podría agregar una persona sin responsabilidades (todavía) ya que no hay restricciones en la tabla de personas.

Tenga en cuenta que esto es todo tipo de académicos, ya que en la vida real las responsabilidades se comparten.

En otras palabras, una persona puede tener una o más responsabilidades, pero cada responsabilidad puede pertenecer a una o más personas.

Esto se conoce como una relación muchos a muchos, y es un problema de diseño de bases de datos bien conocido con una solución bien definida, que no entraré ahora ya que es tangencial a su pregunta.

+0

Para una relación de uno a muchos anterior, las responsabilidades tendrán PersonID como clave externa. ¿Puede la tabla Person tener ResponsibilityID como clave foránea también? No me suena bien, pero necesito saber el motivo por el cual es incorrecto tener claves externas en las tablas padre e hijo. – ATHER

0

Lo que finalmente tendrá es una tabla del consta de dos columnas (sólo para las responsabilidades):

PERSONID, Responsabilidad

Y para que pueda tener algo así como

1000 , TakeCareOfGraden
1000, TakeCareOfServerRoom

Lo que significa que una persona con Pers onId = 1000 es responsable de ambos.

La clave aquí es una clave compuesta que incluye ambos campos (ya que ninguno es único).

Cuestiones relacionadas