Значение “n:m” и “1:n” в проектировании баз данных

В проектировании баз данных, что делает n:m и 1:n средний?

Это имеет какое-либо отношение к ключам или отношениям?

56
задан ForguesR 21 October 2014 в 03:06
поделиться

6 ответов

m: n используется для обозначения отношения «многие ко многим» ( m объекты на другой стороне связаны с n на другой стороне), а 1: n относится к отношению «один ко многим» (объект 1 на другой стороне, связанный с n на другой).

79
ответ дан 26 November 2019 в 17:09
поделиться

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 в таблицу ссылок вставляется одна строка, содержащая идентификаторы соответствующих строк.

49
ответ дан 26 November 2019 в 17:09
поделиться

Многие ко многим (n: m) Один ко многим (1: n)

1
ответ дан 26 November 2019 в 17:09
поделиться

В реляционной базе данных все типы отношений представлены одинаково: как отношения. Ключ-кандидат (-ы) каждого отношения (а также, возможно, других ограничений) определяет, какой тип отношения представляется. 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 очень распространены и обычно выделяются как особо важные при проектировании и понимании моделей данных.

3
ответ дан 26 November 2019 в 17:09
поделиться

Чтобы объяснить эти две концепции на примере, представьте, что у вас есть система ввода заказов для книжного магазина. Сопоставление заказов с товарами может быть много ко многим (n: m), потому что в каждом заказе может быть несколько товаров, и каждый товар может быть упорядочен по нескольким заказам. С другой стороны, поиск между покупателями и заказом осуществляется один ко многим (1: n), потому что покупатель может разместить более одного заказа, но заказ никогда не может быть адресован более чем одному покупателю.

3
ответ дан 26 November 2019 в 17:09
поделиться

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) - это просто одна таблица, которая имеет столбец в качестве первичного ключа и другую таблицу, в которой этот столбец используется в качестве отношения внешнего ключа

Типа продуктов и категорий продуктов, в которых одна Категория продуктов может иметь несколько продуктов

7
ответ дан 26 November 2019 в 17:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: