Многотабличные базы в ACCESS



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

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

Алгорим создания и поддержки связей между таблицами следующий:

1) В таблицах объектах указать ключевые поля кнопкой [ключ]. Ключевое поле необязательно должно быть счетчиком.  ( Счетчик - просто удобно )
kluch_vrachey.gif

Это же надо проделать  и в  других таблицах-объектах(ПАЦИЕНТОВ и ОТДЕЛЕНИЙ)

2) ПРИ добавлении в таблицу МНОГИЕ ключевого поля объекта
 выполнить следующие условия:
 а) Добавляемые поля должны быть НЕ КЛЮЧЕВЫМИ !!!
 б) Эти поля обязательно должны совпадать по типу и размеру
 с ключевыми полями таблиц объектов

 Если ключ объекта - СЧЕТЧИК соответствующее поле в таблице
 МНОГИЕ должно быть ДЛИННЫМ ЦЕЛЫМ ( это целые числа шириной 4
 байта)

3) В панели инструментов  гланого окна Базы данных кнопкой [схема данных]  откройте одноименное окно [схема_данных] в котором можно установить свзи между таблицами

knopka_xshema_dannih.gif

4) В окне [Схема   данных]  установите  связи  между таблицами.
 Для этого мышкой "затащите"   ключ таблицы-объекта ОДИН на    связываемое поле в таблице МНОГИЕ, а именно

[ID_отделения]  в таблице  ОТДЕЛЕНИЯ  на  поле  [Отделение]   в таблице  ВРАЧИ  ( Связь - Врачи-Отделения)
[ID_врача]  в таблице ВРАЧИ   на  поле  [Врач]   в таблице  ПРИЕМ ПАЦИЕНТОВ  ( Связь - Врачи-Прием пациентов)
[ID_пациента]  в таблице  ПАЦИЕНТЫ   на  поле  [Пациент]   в таблице   ПРИЕМ ПАЦИЕНТОВ  ( Связь - Пациенты-Прием пациентов )

polnaya_shema.gif

5)  При создании  связей  Установить флаг    [x] контроль целостности данных
 При этом access установит связь многие-к-одному.  Целостность данных означает - непротиворечивость
 Access не даст :
 - удалить объект при наличии ссылки на него
-  изменить значение ключа, если на него есть ссылка в другой  таблице
 - добавить ссылку на несуществующий объект

celostnosty.gif
6) При необходимости установить флаги
 [x] - каскадное удаление
 при удалении записи из таблицы-объекта[ОДИН] из таблицы
 "МНОГИЕ" автоматически удалятся все записи со ссылками
 на этот объект

7) При необходимости установить флаги  [x] - каскадное обновление
Тогда при обновлении ключа  в таблице ОДИН, автоматически изменяться ссылки на него в связанных таблицах МНОГИЕ