Как внедрить ONE-TO-MANY в базу данных - PullRequest
14 голосов
/ 31 августа 2010

Я хочу реализовать концепцию один-ко-многим в моем приложении. Это сценарий: у меня есть две таблицы

(я). Персона (имя, имя, возраст, депе)
(II). Обязанности лица (ID, RESP'S)

Один человек может иметь более одной ответственности. Как мне реализовать отношение 1-n здесь? На самом деле, я не понимаю правильные концепции для этого.

Любые предложения или ссылки , чтобы понять эту концепцию будет принята.

Ответы [ 3 ]

20 голосов
/ 31 августа 2010

Это отношение один-ко-многим может быть истолковано на простом английском языке следующим образом ...

Человек имеет одну или несколько обязанностей,

И

Каждая ответственностьпринадлежит только одному человеку.

Теперь, в зависимости от того, какие rdbms вы используете, вы бы реализовали это как отношение внешнего ключа.

Сначала вам нужно добавить в RESPS столбец, который указывает на таблицу person.

Давайте назовем этот новый столбец PERSON_ID.

Теперь мы можем объявить связь, кодможет выглядеть примерно так:

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

И это объявление ограничения внешнего ключа будет означать, что отныне вы не можете добавить ответственность, не указав человека, которому принадлежит эта ответственность.

Новы все равно можете добавить человека без обязанностей (пока), поскольку на столе нет никаких ограничений.

Обратите внимание, что это все виды академических занятий, поскольку в реальной жизни обязанности распределяются.

Другими словами, у человека может быть одна или несколько обязанностей, но каждая обязанность может принадлежать одному или нескольким людям.

Это называется отношением многие-ко-многим и является хорошо известной проблемой проектирования базы данных.с четко определенным решением - которое я не буду сейчас рассматривать, поскольку оно касается вашего вопроса.

0 голосов
/ 16 мая 2018

Я бы просто сказал, что обратное отношение one-to-many - это many-to-one (который является внешним ключом). Таким образом, для реализации one-to-many необходимо использовать внешний ключ в соответствующей таблице.

0 голосов
/ 31 августа 2010

В итоге у вас будет таблица, состоящая из двух столбцов (только для обязанностей):

PersonId, Ответственность

И поэтому у вас может быть что-то вроде

1000, TakeCareOfGraden1000, TakeCareOfServerRoom

Это означает, что человек с PersonId = 1000 отвечает за оба.

Ключ здесь - это составной ключ, который включает оба поля (поскольку ни одно из них не является уникальным).

...