Подтвердить что ты не робот

Как реализовать ОДИН-В-МНОГО в базе данных

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

(я). Person (ID, NAME, AGE, DEPT)
(II). Ответственность личности (ID, RESP'S)

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

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

4b9b3361

Ответ 1

Это отношение "один ко многим" можно интерпретировать на простом английском языке, как это...

У человека есть одна или несколько обязанностей,

и

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

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

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

Позвоните в этот новый столбец PERSON_ID.

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

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

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

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

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

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

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

Ответ 2

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

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

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

1000, TakeCareOfGraden
1000, TakeCareOfServerRoom

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

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