Объекты и связи между объектами.
Правила проектирования многотабличных  баз данных


Чтобы  продемонстрировать все правила   применим  их к более сложному  примеру  - базе данных ПОЛИКЛИНИКА

В этой базе должна  храниться  следующие информация :
 [Дата приема пациента]  ,  [диагноз]  , [ФИО пациента] ,  [телефон пациента], [адрес пациента],  [ФИО лечащего врача] , [телефон врача] , [№ кабинета врача] , [на каком отделении врач  работает ] , [телефон  отделения] ,[ФИО зав.отделения]
( Учесть , что :

Правило 1.   Выделить объекты.  Для каждого объекта создать отдельную таблицу.

Отличительный признак объекта: объект может существовать "сам по себе", ни с кем не связанный. В примере  с библиотекой  объектами  являются читатели  и  книги.
В примере с поликлиникой  объектами являются : пациенты,  врачи, отделения.
otdelenia.gif
vrachi.gif
pacienty.gif

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

Правило 2.  Определить виды  связей между  таблицами-объектами

Существует  2  вида  связей

2.1) Связь  Один   ко  многим

Имеет  место,если каждую запись  таблицы  T1 можно связать с нескольким записями таблицы T2, но не наоборот
    Между   Отделениями - врачами  связь один ко многим.
 
Действительно, на одном отделении может работать несколько врачей, но не наоборт. Врач может работать только на одном отделении.


2.2) Связь многие ко  многим

Имеет место, если каждую запись таблицы Т1 можно связать с несколькими записями  таблицы Т2 и наоборот , каждую запись Т2 можно связать с несколькими  записями Т1
  Между  пациентами и врачами  связь многие ко многим.

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


Правило 3. Для реализации  связи один ко многим, ключ таблицы  ОДИН
                     надо добавить в таблицу МНОГИЕ  в качестве поля-характеристики

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

otdelenia_vrachi.gifТаким  образом  эти 2 таблицы связаны. В результает видно, что врачи Сиделкин и   Смотрелкин работают на Терапевтическрм  отделении(ID=1).  А  Тарелкин  на Хирургическом (ID=2).

Правило 4: 
Для реализации связи многие-ко-многим создается отдельная таблица-связка. 
В эту таблицу-связку включаются ключевые поля связываемых таблиц, но уже в качестве характеристик.

О ключах  и  характеристках читайте здесь
В таблицах  пациентов  и  врачей  надо  создать  ключевые поля для того,  чтобы на них  можно было сослаться из таблицы  связки.
В таблице связке(Прием  пациентов)  по ID пациента и ID врача понятно, какой врач какого  пациента принимал
 vrachi_pacienty.gif

Правило 5.  Не замыкать связи. Для N объектов требуется(N-1) связь.


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