Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
Скачать 19.64 Mb.
|
Подсказка Еще больше возможностей предоставляет запрос-объединение (join query) (см. разд. "Запросы и связанные таблицы" главы 6). Он может предоставить все подробные сведения об изготовителе наряду с данными о кукле, поэтому можно отобразить их бок о бок. Отношение типа "родитель - потомок" Нет-нет, это не окольный путь в психологию положительных эмоций доктора Фила (Dr. Phil). Фанаты БД применяют обозначения "родитель" и "потомок" для идентификации двух таблиц в отношении и определения каждой из них. Вот чем объясняется такая аналогия. Как вы, вне всякого сомнения, знаете, вреальной жизни у родителя может быть любое количество детей. А у ребенка только один "комплект" родителей. Это же правило действует и в БД. В БД о куклах-болванчиках единственная запись изготовителя может быть связана с любым количеством записей о куклах. Но каждая запись о кукле ссылается на единственного изготовителя. Итак, в соответствии со странными социальными законами в мире БД Manufacturers — родительская таблица или таблица-родитель, a Dolls — дочерняя таблица или таблица-потомок. Обе таблицы связаны отношением "родитель—потомок". Подсказка Не относитесь слишком серьезно к аналогии "родитель — потомок". Она неидеально соответствует биологической реальности. Например, в БД о куклах-болванчиках можно создать изготовителя, не связанного ни с какой куклой {другими словами, родитель без детей). Вы все равно назовете такую запись родительской, поскольку она — часть таблицы-родителя. Важно понять, что нельзя поменять местами таблицу-родитель и таблицу-потомок без изменения отношения между ними. Неправильно считать таблицу Dolls родительской, а таблицу Manufacturers — дочерней. Вы можете заметить, что такое допущение разрушает аналогию "родитель — потомок": у любой куклы не может быть более одного изготовителя и производитель не ограничивается созданием одной куклы. Во избежание проблем и всякого рода туманных измышлений необходимо четко представлять, какая таблица — родитель, а какая — потомок. Подсказка Если возникают трудности при определении родительской таблицы, существует простое правило, направляющее в нужное русло. В дочерней таблице всегда содержится порция идентифицирующей информации из родительской таблицы. В БД о куклах-болванчиках таблица Dolls содержит поле ManufacturerlD. С другой стороны, в таблице Manufacturer нет никаких данных о куклах. Если у вас есть друзья, хорошо разбирающиеся в БД, термин "отношение родитель-потомок" вы слышите нечасто. Этот же тип связи называют отношением "один-ко-многим" (где один представляет родителя, а многие — детей, поскольку единственная родительская запись в одной таблице может быть связана с несколькими дочерними записями в другой). Это самое распространенное отношение, но не единственное — о двух других типах отношений вы узнаете в разд. "Отношение "один-к-одному"" и "Отношение "многие-ко-многим"" далее в этой главе. Примечание Отношения настолько распространены в современных БД, что программы, подобные Access, часто называют системами управления реляционной базой данных (СУРБД, RDBMS). БД без отношений так же часто встречается, как морской курорт в Огайо. Применение отношений Отношение, или связь между Dolls и Manufacturers, подразумеваемая или неявная, — это означает, что вы знаете о существовании связи, а программа Access нет. Подобная организация не устраивает проектировщиков БД. Вместо этого они почти всегда определяют устанавливаемые связи явно. Когда создается явная связь, вы явно сообщаете Access о том, как взаимосвязаны две таблицы. Программа сохраняет сведения об этой связи в файле БД, У вас есть серьезные основания открыть ваши связи. После того как программа Access узнает о них, она может лучше отслеживать ошибки. Она также может предоставить удобные средства просмотра связанных данных и корректировки связанных полей. Вы познакомитесь со всеми этими средствами в следующих разделах. Но сначала необходимо научиться определять связь, или отношение. Определение отношения Приведенные далее действия можно выполнить, используя файл Bobblehead.accdb, включенный в примеры к данной главе, размещенные в Интернете. Файл содержит таблицы Dolls и Manufacturers в первоначальной форме (без определенных отношений). В файле БД BobbleheadRelationships.accdb представлен окончательный продукт: две таблицы с корректным отношением. Д алее перечислены действия, необходимые для определения связи или отношения. 1. Любое отношение связывает два поля, находящиеся в разных таблицах. Сначала нужно определить в родительской таблице поле, которое следует использовать. В хорошо спроектированной БД в родительской таблице применяется поле первичного ключа (см, разд. "Первичный ключ" главы 2). Например, в таблице Manufacturers используется поле ID, однозначно определяющее каждого изготовителя. 2. Откройте дочернюю таблицу в Конструкторе. (Самый быстрый способ — щелкнуть правой кнопкой мыши таблицу в Области переходов и выбрать строку Конструктор.) В данном примере дочерняя таблица — Dolls. Рис. 5.1. В таблице Dolls должно быть поле, определяющее изготовителя данной куклы. Имеет смысл вставить новое поле ManufacturerlD. Задайте тип данных Числовой и размер поля Длинное целое, чтобы поле соответствовало полю ID в таблице Manufacturers. После вставки этого поля следует заполнить его правильными данными. (В записи для каждой куклы следует указать идентификационный номер соответствующего изготовителя.) 3. Создайте нужное вам поле в таблице-потомке, если его еще нет. Каждая дочерняя запись создает ссылку, сохраняя порцию данных, указывающую на запись в таблице-родителе. Вы должны вставить новое поле для хранения этой информации, как показано на рис. 5.1. Примечание У полей, которые вы связываете в родительской и дочерней таблицах, должны быть совместимые типы данных. Но существует небольшое затруднение. В поле родительской таблицы используется тип данных Счетчик, а поле дочерней таблицы должно быть Числового типа (с размером поля Длинное целое). На диске типы Счетчик и Длинное целое в действительности хранят одинаковые данные. Но тип Счетчик, когда вы создаете запись, сообщает программе Access о необходимости заполнения поля новым автоматически генерируемым значением. Это поведение, очевидно, не годится при заполнении поля ManufacturerlD в таблице Dolls. 4. Закройте обе таблицы. Программа Access предложит сохранить внесенные изменения. Теперь ваши таблицы готовы к установке связи. 5. Выберите Работа с базами данных → Показать или скрыть → Схема данных (Database Tools → Show/Hide → Relationships). Программа Access откроет на ленте новую вкладку Работа со связями (Relationships). Это специализированное окно, в котором можно определить связи между всеми таблицами вашей БД. В данном примере вы создадите единственную связь, но эту вкладку можно применять для формирования множества связей. Прежде чем программа Access разрешит вам работать на вкладке Работа со связями, она выведет на экран диалоговое окно Добавление таблицы (Show Table), запрашивая необходимые вам для работы таблицы (рис. 5.2). Р ис. 5.2. На вкладке Работа со связями можно отобразить сколько угодно таблиц. Следите за тем, чтобы не вставить одну и ту же таблицу дважды (это не нужно и вводит в заблуждение) 6. Вставьте в рабочую область таблицу-родитель и таблицу-потомок. Порядок указания таблиц не важен. Для выбора таблицы укажите ее в списке и щелкните мышью кнопку Добавить (или просто дважды щелкните кнопкой мыши имя таблицы). Любая таблица на вкладке Работа со связями отображается в виде небольшого прямоугольника, в котором перечислены все поля таблицы. Если между таблицами уже определены связи, они отображаются как соединительные линии. 7. Щелкните мышью кнопку Закрыть (Close). Т еперь можно разместить таблицы на вкладке Работа со связями (рис. 5.3). На этой вкладке отображается схема данных — это холст, на котором вы "рисуете" устанавливаемые связи Рис. 5.3. Вставленные таблицы можно переместить с помощью мыши в любое место окна. Если в вашей БД много связей, данная возможность позволит упорядочить таблицы таким образом, чтобы были четко видны все связи. Для удаления таблицы из схемы данных щелкните ее правой кнопкой мыши и выберите команду Скрыть таблицу (Hide Table). Для вставки другой таблицы щелкните правой кнопкой мыши свободное пространство и выберите команду Добавить таблицу для вывода на экран диалогового окна Добавление таблицы Подсказка Программа Access позволяет быстро изменить структуру таблицы, открытую на вкладке Работа со связями. Просто щелкните правой кнопкой мыши прямоугольник нужной таблицы и выберите команду Конструктор таблиц. 8. Для определения связи найдите поле, которое используется в таблице-родителе. Перетащите это поле на поле в таблице-потомке, с которым вы хотите его связать. В данном случае поле ManufacturerID в таблице Dolls (потомок) связывается с полем ГО в таблице Manufacturers (родитель). Итак, переместите поле ID (в прямоугольнике Manufacturers) на поле ManufacturerID (в прямоугольнике Dolls). Подсказка Можно перемещать и по-другому (из потомка в родителя). В любом случае программа Access создает одинаковую связь, или отношение. К огда вы отпустите кнопку мыши, на экране появится диалоговое окно Изменение связей (Edit Relationships) (рис. 5.4). Рис. 5.4. Программа Access способна правильно определить таблицу-родитель (показанную в поле Таблица/запрос (Table/Query)) и таблицу-потомок (показанную в поле Связанная таблица/запрос (Related Table/Query)), когда вы соединяете два поля. Она идентифицирует поле в родительской таблице, поскольку у нее есть первичный ключ или уникальный индекс. Если в диалоговом окне Изменение связей что-то не так, прежде чем продолжить, вы можете поменять местами таблицы или заменить поля, используемые для создания связи 9. Если вы хотите предотвратить возможные ошибки, установите флажок Обеспечение целостности данных (Enforce Referential Integrity). (Это всегда хорошая мысль.) Этот параметр включает улучшенную проверку ошибок, запрещающую внесение изменений, способных нарушить правила связи (например, включение в таблицу куклы, ссылающейся на несуществующего изготовителя). Вы узнаете больше о целостности и двух параметрах для каскадных изменений в следующем разделе. Пока лучше установить флажок Обеспечение целостности данных, а остальные флажки оставить сброшенными. 10. Щелкните мышью кнопку Создать (Create). Это действие создаст связь, соединяющую две таблицы. Она появляется на схеме в виде линии (рис. 5.5). Подсказка Е сли вы установите флажок Обеспечение целостности данных (см. пункт 9), программа Access проверит все имеющиеся в таблице данные на соблюдение правил связи. Если обнаружатся данные, их нарушающие, программа предупредит вас о проблеме и откажется продолжать. В этот момент лучшая стратегия — создать связь без обеспечения целостности, откорректировать неверные данные и позже отредактировать связь, установив флажок Обеспечение целостности данных. Рис. 5.5. Программа Access соединяет линией связанные поля на вкладке Работа со связями, маленькие значки 1 и бесконечность (∞) дают возможность в данном отношении "один-ко-многим" различить стороны "один" и "многие". Для редактирования связи дважды щелкните кнопкой мыши линию связи. Для того чтобы полностью удалить ее, щелкните дважды кнопкой мыши линию связи и выберите команду Удалить 11. Закройте вкладку Работа со связями. (Вы можете щелкнуть мышью кнопку в правом верхнем углу вкладки или выбрать Работа со связями │ Конструктор → Связи →Закрыть.) Программа Access спросит, хотите ли вы сохранить макет вкладки Работа со связями. На самом деле речь идет о сохранении схемы данных, созданной вами. Неважно, что вы выберите, связь останется в БД, и вы сможете использовать ее тем же способом. Единственное различие заключается в возможности быстрого просмотра или редактирования связи на вкладке Работа со связями. Если вы выберете сохранение схемы данных, в следующий раз при переходе на вкладку Работа со связями (при выборе Работа с базами данных → Показать или скрыть → Схема данных) вы увидите ту же структуру таблиц. Это функциональная возможность удобна. Если вы откажетесь от сохранения схемы данных, в следующий раз вашей задачей будет повторное создание схемы, включая добавление нужных вам таблиц и организацию их в окне (хотя вам не придется повторно переопределять связи). Этот процесс немного более трудоемкий. Подсказка Многие профессиональные проектировщики БД предпочитают сохранять схему данных, поскольку хотят видеть все свои связи на вкладке Работа со связями такими, какими они их оставили. Но реальные БД часто обрастают запутанной паутиной связей. В такой ситуации вы можете отказаться от сохранения всей схемы и сможете сосредоточить внимание на нескольких таблицах. Редактирование связей Когда вы в следующий раз захотите изменить или добавить связи, вы должны тем же способом вызвать на экран окно Работа со связями (выберите Работа с базами данных → Показать или скрыть → Схема данных). Если вы решили сохранить схему данных (в пункте 11 предыдущего раздела), вставленные вами таблицы появятся автоматически в том виде, в каком вы их оставили. Если вы хотите поработать с таблицами, пока не включенными ни в какие связи, их можно добавить в схему, щелкнув правой кнопкой мыши где-нибудь на свободном пространстве и выбрав команду Добавить таблицу. Если выбрано сохранение схемы данных, вы можете использовать несколько приемов быстрого возвращения ваших таблиц на экран:
Как вы уже знаете, для создания новых связей можно использовать вкладку ленты Работа со связями. Созданные связи можно редактировать. Для этого щелкните правой кнопкой мыши линию, представляющую связь, и выберите команду Изменить связь (Edit Relationship). (Это делается легким щелчком пальца но кнопке мыши. Если в меню нет команды Изменить связь, вы просто не попали на линию связи.) Для удаления связи щелкните кнопкой мыши линию связи и выберите команду Удалить. Примечание Обычно редактирование связи заключается в изменении параметров, относящихся к целостности данных на уровне ссылок (referential integrity) или ссылочной целостности, о которой вы узнаете в следующем разделе. Целостность на уровне ссылок Теперь, когда вы собрались определять связи, самое время узнать, какие преимущества вы приобретаете. Как и в реальном мире, отношения налагают некоторые ограничения. В мире БД эти правила называются целостностью данных на уровне ссылок. Все вместе они гарантируют постоянную непротиворечивость связанных данных. Примечание Целостность на уровне ссылок вступает в действие, только если у вашей связи установлен флажок Обеспечение целостности данных (см. рис. 5.4). Без этой детали вы можете безумствовать и вводить противоречивые данные. В примере с куклами-болванчиками целостность данных требует, чтобы все изготовители, на которых вы ссылаетесь в таблице Dolls, были включены в таблицу Manufacturers. Другими словами, ни при каких обстоятельствах не должно быть записи о кукле-болванчике, ссылающейся на несуществующего изготовителя. Этот сорт ошибок мог бы вызвать тяжелейшие сбои программы управления БД. Для усиления влияния этого правила программа Access запрещает следующие три действия:
|