56 votos

Significado de "n:m" y "1:n" en el diseño de bases de datos

En el diseño de bases de datos, ¿qué significan n:m y 1:n?

¿Tiene algo que ver con claves o relaciones?

84voto

Matti Virkkunen Puntos 31633

m:n se utiliza para denotar una relación de muchos a muchos (m objetos en un lado relacionados con n en el otro) mientras que 1:n se refiere a una relación de uno a muchos (1 objeto en un lado relacionado con n en el otro).

50voto

tdammers Puntos 14202

1:n significa 'uno a muchos'; tienes dos tablas, y cada fila de la tabla A puede ser referenciada por cualquier número de filas en la tabla B, pero cada fila en la tabla B solo puede referenciar una fila en la tabla A (o ninguna).

n:m (o n:n) significa 'muchos a muchos'; cada fila en la tabla A puede referenciar muchas filas en la tabla B, y cada fila en la tabla B puede referenciar muchas filas en la tabla A.

Una relación 1:n típicamente se modela utilizando una clave externa simple - una columna en la tabla A referencia una columna similar en la tabla B, típicamente la clave primaria. Dado que la clave primaria identifica única y exactamente una fila, esta fila puede ser referenciada por muchas filas en la tabla A, pero cada fila en la tabla A solo puede referenciar una fila en la tabla B.

Una relación n:m no se puede hacer de esta manera; una solución común es utilizar una tabla de enlace que contiene dos columnas de clave externa, una para cada tabla que enlaza. Para cada referencia entre la tabla A y la tabla B, se inserta una fila en la tabla de enlace, que contiene los IDs de las filas correspondientes.

8voto

Ash Puntos 951

N:m --> si no conoces tanto n como m, simplemente es de muchos a muchos y se representa mediante una tabla puente entre otras 2 tablas como

   -- Esta tabla contendrá nuestras llamadas telefónicas.
CREATE TABLE dbo.PhoneCalls
(
   ID INT IDENTITY(1, 1) NOT NULL,
   CallTime DATETIME NOT NULL DEFAULT GETDATE(),
   CallerPhoneNumber CHAR(10) NOT NULL
)

-- Esta tabla contendrá nuestros "tickets" (o casos).
CREATE TABLE dbo.Tickets
(
   ID INT IDENTITY(1, 1) NOT NULL,
   CreatedTime DATETIME NOT NULL DEFAULT GETDATE(),
   Subject VARCHAR(250) NOT NULL,
   Notes VARCHAR(8000) NOT NULL,
   Completed BIT NOT NULL DEFAULT 0
)

esta es la tabla puente para implementar el mapeo entre 2 tablas

CREATE TABLE dbo.PhoneCalls_Tickets
(
   PhoneCallID INT NOT NULL,
   TicketID INT NOT NULL
)

Uno a Muchos (1:n) es simplemente una tabla que tiene una columna como clave primaria y otra tabla que tiene esta columna como una relación de clave externa

Algo así como Producto y Categoría de Producto donde una categoría de producto puede tener muchos productos

3voto

sqlvogel Puntos 12567

En una base de datos relacional, todos los tipos de relaciones se representan de la misma manera: como relaciones. La(s) clave(s) candidata(s) de cada relación (y posiblemente otras restricciones también) determinan qué tipo de relación se está representando. 1:n y m:n son dos tipos de relaciones binarias:

C {Empleado*, Compañía}
B {Libro*, Autor*}

En cada caso, * designa el atributo clave(s). {Libro, Autor} es una clave compuesta.

C es una relación donde cada empleado trabaja solo para una compañía pero cada compañía puede tener muchos empleados (1:n): B es una relación donde un libro puede tener muchos autores y un autor puede escribir muchos libros (m:n):

Observe que las restricciones de clave aseguran que cada empleado solo puede estar asociado con una compañía, mientras que se permite cualquier combinación de libros y autores.

También son posibles otros tipos de relaciones: n-arias (con más de dos componentes); cardinalidad fija (m:n donde m y n son constantes o rangos fijos); direccionales; y así sucesivamente. William Kent en su libro "Data and Reality" identifica al menos 432 tipos - y eso es solo para relaciones binarias. En la práctica, las relaciones binarias 1:n y m:n son muy comunes y generalmente se destacan como especialmente importantes en el diseño y comprensión de modelos de datos.

1voto

Adrian Regan Puntos 1574

Uno a muchos (1:n) Muchos a muchos (n:m)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X