56 votos

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

En el diseño de la base de datos, ¿qué hace n:m y 1:n ¿maldito?

¿Tiene algo que ver con las llaves o las relaciones?

84voto

Matti Virkkunen Puntos 31633

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

50voto

tdammers Puntos 14202

1:n significa "uno a muchos"; tiene dos tablas, y cada fila de la tabla A puede ser referenciada por cualquier número de filas de la tabla B, pero cada fila de la tabla B sólo puede referenciar una fila de la tabla A (o ninguna).

n:m (o n:n) significa "muchos a muchos"; cada fila de la tabla A puede hacer referencia a muchas filas de la tabla B, y cada fila de la tabla B puede hacer referencia a muchas filas de la tabla A.

Una relación de 1:n se modela típicamente usando una simple clave externa - una columna en la tabla A hace referencia a una columna similar en la tabla B, típicamente la clave primaria. Dado que la clave primaria identifica de manera única exactamente una fila, esta fila puede ser referenciada por muchas filas en el cuadro A, pero cada fila del cuadro A sólo puede hacer referencia a una fila del cuadro B.

Una relación n:m no puede hacerse de esta manera; una solución común es utilizar una tabla de enlaces que contenga dos columnas clave externas, una por cada tabla que enlace. Para cada referencia entre el cuadro A y el cuadro B, se inserta una fila en el cuadro de enlace, que contiene las identificaciones de las filas correspondientes.

8voto

Ash Puntos 951

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

   -- This table will hold our phone calls.
CREATE TABLE dbo.PhoneCalls
(
   ID INT IDENTITY(1, 1) NOT NULL,
   CallTime DATETIME NOT NULL DEFAULT GETDATE(),
   CallerPhoneNumber CHAR(10) NOT NULL
)

-- This table will hold our "tickets" (or cases).
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 mesa puente para implementar el mapeo entre 2 mesas

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 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 también otras limitaciones) determinan qué tipo de relación se está representando. 1:n y m:n son dos tipos de relación binaria:

C {Employee*,Company}
B {Book*,Author*}

En cada caso * designa el atributo o los atributos clave. {Libro,Autor} es una clave compuesta.

C es una relación en la que cada empleado trabaja sólo para uno pero cada empresa puede tener muchos empleados (1:n): B es una relación donde un libro puede tener muchos los autores y un autor pueden escribir muchos libros (m:n):

Fíjese que las restricciones clave aseguran que cada empleado sólo puede ser asociado con una compañía mientras que cualquier combinación de libros y autores está permitida.

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

1voto

Adrian Regan Puntos 1574

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

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