Лабораторная работа № 2 Создание реляционных таблиц. Предварительные сведения: 1. Создание базы данных Для создания новой базы данных нужно при открытии MS Access выбрать опцию «Новая база данных». В появившемся диалоговом окне указать имя новой базы данных и папку, в которой она будет находиться. После этого, если базы данных с таким именем в этой папке еще нет, открывается окно новой базы данных. 2. Создание таблиц Реляционные таблицы отличаются от произвольных двумерных таблиц по таким признакам: - строки не нумеруются, их порядок следования не имеет значения; - столбцы не нумеруются, однозначно определяются именами, в пределах одной таблицы все имена столбцов – уникальны; - на пересечении любого столбца и любой строки находится атомарное (т.е. неделимое) значение; - каждая таблица имеет первичный ключ – набор полей (от одного до всех полей), задание значений которых полностью идентифицирует всю запись, и притом единственную, т.е. у любых двух записей реляционной таблицы значения первичного ключа не могут совпадать. Многие СУБД предлагают несколько способов создания таблиц. Первый способ заключается в том, что любую таблицу можно создать, написав соответствующую инструкцию SQL CREATE TABLE. Второй способ создания таблиц состоит в использовании визуальных средств. Основная идея подобных конструкторов состоит в том, чтобы легко создать перечень полей конкретной таблицы и настроить тип данных и свойства этих полей. 2.1 Создание таблиц с помощью инструкции SQL CREATE TABLE Создание таблиц в любой реляционной СУБД базируется на применении подъязыка определения данных SQL DDL (Data Definition Language), в котором есть конструкции для создания и удаления таблиц, определения ограничений на значения полей таблиц и т.д. Следует отметить, что хотя существует единый стандарт языка SQL (ANSI SQL92, SQL3 и др.), каждая СУБД расширяет этот стандарт по-своему, поэтому, зная стандартный SQL, можно работать с любой реляционной СУБД, но при работе с конкретной СУБД имеет смысл выяснить особенности использованного диалекта SQL. В частности, в MS Access для создания таблицы с помощью инструкции CREATE TABLE нужно перейти на вкладку Запросы, и при создании запроса в режиме конструктора изменить его тип с помощью команды меню Запрос/Создание таблицы. Затем нужно переключится в режим просмотра SQL (команда меню Вид/Режим SQL) и набрать текст запроса CREATE TABLE. Инструкция SQL на создание таблицы выглядит так: CREATE TABLE имя_таблицы ( определение_поля[, определение_поля,…n] ограничение_на_таблицу[,…n] ); где: определение_поля имеет вид имя_поля тип [(размер)] [ограничение_на_поле] ограничение_на_поле имеет вид: [CONSTRAINT имя_ограничения] {PRIMARY KEY | UNIQUE | NOT NULL} ограничение_на_таблицу имеет вид: [CONSTRAINT имя_ограничения] {PRIMARY KEY (ключевое_поле1[, ключевое_поле2 [, ...]]) | UNIQUE (уникальное_поле1[, уникальное_поле2 [, ...]]) | NOT NULL (непустое_поле1[, непустое_поле2 [, ...]]) | FOREIGN KEY (поле_ссылки1[, поле_ссылки2 [, ...]]) REFERENCES внешняяТаблица [(внешнее_поле1 [, внешнее_поле2 [, ...]])]} имя_поля, имя_таблицы – допустимые имена в Access; названия таблиц и полей, включающие пробелы, а также символы национальных кодировок, заключаются в прямоугольные скобки «[ ]», например [название кинофильма]. Допустимыми считаются имена длиной до 64 символов, не содержащие точки «.», восклицательного знака «!», символа обратной кавычки «`» и символов квадратных скобок «[ ]», и начинающиеся не с пробела. тип – см таблицу типов данных Access (табл.1), Инструкция SQL на удаление таблицы такова: DROP TABLE имя_таблицы; В стандарте SQL предложение CONSTRAINT используется для задания ограничений на значения полей записи (в частности, уникальность – UNIQUE, обязательность – NOT NULL), для установления отношений между таблицами (REFERENCES), а также для задания ограничений на таблицу целиком. Отметим, что имена ограничений в выражениях CONSTRAINT в пределах одной базы данных должны быть различными. В MS Access предложение CONSTRAINT используется также и для автоматического создания индексов по полям, указанным в CONSTRAINT. Индекс ускоряет поиск и сортировку данных. Однако обновление данных при внесении изменении замедляется. Как правило, индексируют наиболее часто запрашиваемые столбцы таблиц. Пример 1. CREATE TABLE [Поставщик] ( номер_поставщика autoincrement not null CONSTRAINT pk1 PRIMARY KEY, название text(50) not null, адрес text(50), контактное_лицо text(20) ); Создается таблица из четырех полей, причем поле номер_поставщика становится первичным ключом, и для этого поля создается индекс. Для определения первичного ключа здесь используется ограничение на поле с именем pk1. Пример 2. CREATE TABLE [Поставка] ( номер_поставки autoincrement not null, дата datetime not null, ответственный text(50), номер_поставщика longint not null CONSTRAINT pk2 PRIMARY KEY (номер_поставки), CONSTRAINT fk1 FOREIGN KEY (номер_поставщика) REFERENCES [Поставщик] (номер_поставщика) ); Создается таблица, в которой первичный ключ состоит из поля номер_поставки, и при этом значения поля номер_поставщика берутся из значений поля номер_поставщика таблицы [Поставщик]. При создании этой таблицы автоматически создаются и два индекса: k1 – индекс по первичному ключу; k2 – индекс по внешнему ключу, Такая ситуация характеризуется схемой данных, показанной на рис.2.1. Здесь используются ограничения на всю таблицу целиком, с именами pk2 и fk1. На рис. 2.1 показана схема данных, соответствующая определенным в примерах 1 и 2 таблицам. Рисунок 2.1 – Поставщик – родительская таблица, Поставка – дочерняя таблица Как видно, между этими таблицами установлена связь 1:М, которая появилась благодаря определению внешнего ключа FOREIGN KEY. При этом сущность Поставщик будет родительской, а Поставка – дочерней. Определение внешнего ключа для столбца(-ов) в дочерней таблице сужает область возможных значений этого столбца(-ов) такими, которые уже существуют в родительской таблице. Таким образом, достигается целостность данных. Целостность данных означает систему правил, используемых в СУБД для поддержания связей между записями в связанных таблицах, а также обеспечивает защиту от случайного удаления или изменения связанных данных. Установить целостность данных между таблицами можно, если выполняются такие условия: – типы данных для связываемых полей дочерней и родительской таблицы должны совпадать; – по крайней мере, в родительской таблице поле, выбранное для связи, должно быть обязательным и уникальным. Как правило, это поле первичного ключа. При этом между родительской таблицами устанавливается связь 1:М; – если и в родительской, и в дочерней таблице связываемые поля являются обязательными и уникальными, то устанавливается связь 1:1. Настроить связи между таблицами можно с помощью инструмента Схемы данных (в окне базы данных вызвать команду меню Сервис/Схема данных или нажать кнопку на панели инструментов в окне базы данных. При открытии окна Схемы данных появляется список таблиц, которые можно выбрать для показа на схеме. Для выбора таблицы нужно ее отметить в списке и затем нажать кнопку Добавить. Затем это окно можно закрыть. Если в процессе работы со схемой понадобилось добавить еще таблицы, для этого можно нажать кнопку Добавить таблицу на панели инструментов. Для удаления ненужной таблицы из схемы данных, ее необходимо выделить и нажать клавишу Del. Просмотреть и изменить текущие ограничения целостности также можно с помощью инструмента Схемы данных. Для этого в окне Схемы данных вначале отображают таблицы, а затем, перетаскивая выбранные поля с родительской таблицы на дочернюю, устанавливают связь между таблицами. При этом, в диалоговом окне (см. рис. 2.2) установления связи включают опцию Обеспечение целостности данных, и дополнительно, опции действий СУБД при обновлении/удалении данных в связанных таблицах. Рисунок 2.2 – Установление связи между таблицами Поставщик и Поставка 2.2 Создание таблиц с помощью конструктора таблиц (в MS Access) В MS Access для создания таблицы с помощью конструктора таблиц нужно перейти на вкладку Таблицы, нажать кнопку Создать и при создании таблицы указать режим Конструктор. Конструктор таблиц имеет вид как на рис.2.3. Окно конструктора разделено на две части. В верхней части окна указываются имена полей таблицы (столбец Имя поля), типы данных (Тип данных) и необязательные описания. Каждое поле таблицы представляется отдельной строкой. В нижней части окна устанавливаются свойства полей, такие как: размер поля; формат; десятичные разряды; входной формат; подпись поля; стандартное значение; условие на значение; сообщение об ошибках; обязательное поле; индексированное поле. Пример набора свойств для поля «Цена» показан на рис.2.3. Рисунок 2.3 – Внешний вид окна конструктора таблиц Для создания нового поля таблицы необходимо выбрать пустую строку в верхней части окна, щелкнуть мышью в столбце Имя поля и ввести новое имя поля. Затем в столбце Тип данных выбрать нужный тип данных (см. типы данных в таблице 1). Таблица 1 – Типы данных в MS Access. Тип данных Описание типа данных Текстовый Текст длиной до 255 знаков Числовой Дата/Время Денежный В них хранятся числовые данные, формат определяется в графе Размер поля. Задание даты и времени, в формате, определенном в графе Формат поля. Задание денежной суммы с точностью до 15 целых и 4 дробных десятичных разрядов (8 байтов). Логический Счетчик Логические значения Да/Нет. Эти поля нельзя индексировать. Уникальное длинное целое, генерируется ACCESS при создании любой новой записи. Используется для генерации значений первичного ключа. MEMO Текст, имеющий максимальную длину до 65536 знаков. Эти поля нельзя индексировать. Объект OLE OLE – Объект (например, электронная таблица Microsoft Excel, документ Microsoft Word, рисунок, звукозапись или другие данные в двоичном формате), связанный или внедренный в таблицу Microsoft Access. В этих полях хранятся объекты, которые были оформлены при помощи OLE-сервера в другом приложении. Максимальный размер поля – 1 Гб; эти поля нельзя индексировать. Гиперссылка Строка, состоящая из букв и цифр, и представляющая адрес гиперссылки. Адрес гиперссылки может состоять максимум из трех частей: Текст – текст до 2048 символов, выводимый в поле или в элементе управления; Адрес – путь к файлу или странице (адрес URL) (до 2048 символов); Дополнительный адрес – смещение внутри файла или страницы (до 2048 символов). Мастер подстановок Отображает данные, подставляемые из другой таблицы или списка, задаваемого пользователем. При этом запускается мастер подстановок, с помощью которого определяется тип данных и организуется связь с другой таблицей. После задания имени поля и типа данных в нижней части окна конструктора нужно задать Свойства этого поля, например: – Формат поля указывает способ отображения на экране текста, чисел, значений дат и времени. Для задания форматов в полях данных типа Текстовый и MEMO используются такие четыре символа (см. таблицу 2): Таблица 2 – Символы задания пользовательских форматов Символ Описание Обязательный текстовый символ или пробел @ Необязательный текстовый символ & Преобразует все символы в прописные > Преобразует все символы в строчные < При вводе номера телефона можно задать следующий формат (@@@)@@-@@-@@. Если затем ввести 555232332, то данные будут отображены в виде (555)23-23-32. – Маска ввода задает шаблон, облегчающий ввод данных в поле. Маска ввода может быть задана для типов данных Текстовый, Числовой, Денежный. Таблица 3 – Символы, используемые в маске ввода Символ Описание Цифра (0-9, обязательный символ; знаки плюс (+) и минус (–) не разрешены) 0 Цифра или пробел (0-9, необязательный символ; знаки плюс (+) и минус (–) не 9 разрешены) Цифра, знаки плюс (+), минус (-) или пробел (необязательный символ; незаполненные позиции выводятся как пробелы в режиме редактирования, но # удаляются при сохранении данных) L Буква (обязательный символ) ? Буква (необязательный символ) A Буква или цифра (обязательный символ) а Буква или цифра (необязательный символ) & Любой символ или пробел (обязательный символ) Любой символ или пробел (необязательный символ) C Все введенные после него символы преобразуются в строчные < Все введенные после него символы преобразуются в прописные > Десятичный разделитель, разделители групп разрядов, времени или даты. (Используемые символы разделителей определяются в окне Язык и стандарты .,:;-/ панели управления Windows). Например, для поля “Телефон” можно задать следующую маску ввода, которая позволяла бы вводить только цифры и автоматически добавляла промежуточные символы: (999)900-00-00. MS Access автоматически добавит символ "\" для каждого промежуточного символа: \(999\)900\-00\-00. – Значение по умолчанию – устанавливает для всех типов данных, кроме Cчетчика, МЕМО и Объекта OLE. Для Числового типа значение по умолчанию равно 0, для Текстового и MEMO типов оно равно NULL (пустое значение). – Обязательное поле – определяется, обязательно ли вводить данные в соответствующее поле, или оно может остаться пустым. – Условие на значение – выражение, которое при вводе или редактировании значения этого поля всегда должно быть истинным. Подробно правила составления условий рассмотрены в лабораторной работе № 1. Простой пример условия на значение можно найти для столбца «Цена» на Ошибка! Источник ссылки не найден.. Более сложный пример: для того, чтобы возраст сотрудника находился в пределах от 18 до 70 лет можно для поля «дата_рождения» в таблице «Сотрудники» установить такое условие на значение: Between (Year(Date())-18) And (Year(Date())-70) В условиях на значение поля таблицы нельзя выполнять сравнение с другими полями текущей таблицы. После того, как все поля новой таблицы определены, необходимо задать ключ. Ключ – такое поле или комбинация полей, значения в котором (-ой) повторяться не могут. Примером ключа может быть идентификационный код человека в налоговой администрации, паспортные данные, номер зачетки и т.д. Для определения ключа, состоящего из одного поля, необходимо в верхней части окна конструктора выделить строку с этим полем и нажать кнопку Ключевое поле на панели инструментов. Для определения ключа, состоящего из нескольких полей, необходимо выделить строки с этими полями при нажатой клавише Ctrl, а затем нажать кнопку . Необходимо лишь учитывать, что все ключевые поля должны быть обязательными. 3. Работа с Мастером подстановок Если нужно, чтобы значения поля в одной таблице выбираются только из списка значений некоторого поля другой таблицы, или из фиксированного списка значений, то используют Мастер Подстановок. Например, в базе данных “Складской учет” при описании поставки в таблице «Поставка» необходимо, чтобы значения поля “номер_поставщика” выбирались только из списка значений поля «номер_поставщика» таблицы «Поставщик». Для того чтобы задать подстановку для поля, в Конструкторе таблиц для этого поля указывается тип данных Мастер Подстановок. На первом шаге мастера указывается, что значения поля могут выбираться либо из фиксированного набора значений, либо из значений поля какой-нибудь таблицы. В первом случае на втором шаге мастера нужно ввести возможные значения поля. Во втором случае на втором шаге мастера нужно выбрать таблицу, а на третьем шаге выбрать поле (поля), значения которых будут использованы в подстановке. На четвертом шаге мастера необходимо указать имя поля, куда будут заноситься значения из подстановки. Завершают работу мастера нажатием кнопки Готово. Например, для таблицы «Заказы» для поля «кодСотрудника» можно использовать мастер подстановок так, чтобы значения этого поля выбирались из значений полей «кодСотрудника» и «название» таблицы «Сотрудники», а сохранялось только значение поля «кодСотрудника». См рис.2.4. Рисунок 2.4 – Мастер подстановки в действии – значения поля “Сотрудник” выбираются из списка.