В проектировании баз данных, что делает n:m и 1:n средний?
Это имеет какое-либо отношение к ключам или отношениям?
m: n
используется для обозначения отношения «многие ко многим» ( m
объекты на другой стороне связаны с n
на другой стороне), а 1: n
относится к отношению «один ко многим» (объект 1
на другой стороне, связанный с n
на другой).
1: n означает «один ко многим»; у вас есть две таблицы, и на каждую строку таблицы A может ссылаться любое количество строк в таблице B, но каждая строка в таблице B может ссылаться только на одну строку в таблице A (или вообще ни на одну).
n: m (или n: n) означает «многие-ко-многим»; каждая строка в таблице A может ссылаться на множество строк в таблице B, а каждая строка в таблице B может ссылаться на множество строк в таблице A.
Отношение 1: n обычно моделируется с использованием простого внешнего ключа - один столбец в таблице A ссылается на аналогичный столбец в таблице B, обычно это первичный ключ. Поскольку первичный ключ однозначно идентифицирует ровно одну строку, на эту строку могут ссылаться многие строки в таблице A, но каждая строка в таблице A может ссылаться только на одну строку в таблице B.
Отношение n: m не может быть выполнено таким образом. ; распространенное решение - использовать таблицу ссылок, содержащую два столбца внешнего ключа, по одному для каждой таблицы, которую он связывает. Для каждой ссылки между таблицей A и таблицей B в таблицу ссылок вставляется одна строка, содержащая идентификаторы соответствующих строк.
В реляционной базе данных все типы отношений представлены одинаково: как отношения. Ключ-кандидат (-ы) каждого отношения (а также, возможно, других ограничений) определяет, какой тип отношения представляется. 1: n и m: n - это два типа двоичных отношений:
C {Employee*,Company}
B {Book*,Author*}
В каждом случае * обозначает ключевой атрибут (ы). {Книга, Автор} - составной ключ.
C - это отношение, в котором каждый сотрудник работает только в одной компании, но в каждой компании может быть много сотрудников (1: n): B - это отношение, при котором у книги может быть много авторов, а автор может написать много книг (m: n):
Обратите внимание, что ключевые ограничения гарантируют, что каждый сотрудник может только быть связанным с одной компанией, при этом допускается любое сочетание книг и авторов.
Возможны и другие виды отношений: n-арные (имеющие более двух компонентов); фиксированная мощность (m: n, где m и n - фиксированные константы или диапазоны); направленный; и так далее. Уильям Кент в своей книге «Данные и реальность» выделяет по крайней мере 432 вида - и это только для бинарных отношений. На практике бинарные отношения 1: n и m: n очень распространены и обычно выделяются как особо важные при проектировании и понимании моделей данных.
Чтобы объяснить эти две концепции на примере, представьте, что у вас есть система ввода заказов для книжного магазина. Сопоставление заказов с товарами может быть много ко многим (n: m), потому что в каждом заказе может быть несколько товаров, и каждый товар может быть упорядочен по нескольким заказам. С другой стороны, поиск между покупателями и заказом осуществляется один ко многим (1: n), потому что покупатель может разместить более одного заказа, но заказ никогда не может быть адресован более чем одному покупателю.
n: m -> если вы не знаете ни n, ни m это просто много ко многим, и он представлен таблицей моста между двумя другими таблицами, например
-- 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
)
, это таблица моста для реализации сопоставления между двумя таблицами
CREATE TABLE dbo.PhoneCalls_Tickets
(
PhoneCallID INT NOT NULL,
TicketID INT NOT NULL
)
Один ко многим (1: n) - это просто одна таблица, которая имеет столбец в качестве первичного ключа и другую таблицу, в которой этот столбец используется в качестве отношения внешнего ключа
Типа продуктов и категорий продуктов, в которых одна Категория продуктов может иметь несколько продуктов