|
Программирование >> Построение запросов sql
4.2. Создание, изменение и удаление базовых таблиц БД 4.2.1. Создание таблицы В реляционной БД наиболее важным элементом ее структуры является таблица. Перед тем как перейти к созданию таблиц, необходимо выполнить проектирование базы данных и нормализацию таблиц. Кроме того, приступая к созданию таблицы, необходимо иметь ответы на следующие вопросы. Как будет называться таблица? Как будут называться столбцы (поля) таблицы? Какие типы данных будут закреплены за каждым столбцом? Какие столбцы таблицы требуют обязательного ввода? Из каких столбцов будет состоять первичный ключ? Для создания базовой таблицы, ее столбцов и ограничений, налагаемых на каждый столбец, используется запрос CREATE TABLE, который имеет следующий формат: CREATE TABLE базовая таблица (<определение столбца1> [, <определение столбца2>...... [,<тип ограничения>......]);. Таким образом, элементы в круглых скобках после имени таблицы могут представлять собой как определение столбца, так и ограничения базовой таблицы. Конструкция <определение столбца> имеет следующий вид: <определение столбца> :: = столбец { <тип данных> COMPUTED [ВУ] (<выражение>) имя домена } [NOT NULL] DEFAULT { литерал NULL USER}] [<ограничение столбца>] . Все столбцы таблицы должны иметь уникальные имена. Тип данных столбца может задаваться непосредственно указанием имени типа или указанием имени домена. С точки зрения теории БД использование доменов при определении типа столбца является необходимым. При этом домены должны создаваться до создания таблиц. Конструкция COMPUTED [ВУ] (<выражение>) определяет, что значение столбца вычисляется во время выполнения запроса в соответствии с указанным выражением. При этом выражение должно возвращать одно значение, а столбцы таблицы, указанные в выражении, должны существовать до их использования. Например, если требуется поместить в столбец summa значение суммы столбцов first и second, описание типа данных столбца summa должно выглядеть так: summa COMPUTED BY (first + second). В результате тип данных столбца summa будет автоматически приведен к типу данных столбцов first и second по правилу преобразования типов. При конкатенации строк, содержащих имя (name) и отчество (secondname), для получения полного имени (fullname) описание типа данных столбца fullname, содержащего в качестве разделителя запятую, может быть следующим: full name COMPUTED BY (name , second name). Столбец fullname будет иметь строковый тип данных с длиной, равной сумме длин строк secondname и name. Очевидно, что определенные таким образом столбцы summa и fullname будут доступны только для чтения (read-only column), т.е. в эти столбцы нельзя добавлять значения, а следовательно, они не должны упоминаться в списке столбцов запросов INSERT и UPDATE. Предложение NOT NULL устанавливает ограничение на непустое значение столбца (условие обязательности данных). Так, например, поле первичного ключа не может содержать значений NULL, следовательно, при его описании должно быть использовано ограничение NOT NULL. Предложение DEFAULT определяет значение столбца по умолчанию, т. е. то значение, которое будет вставляться в таблицу при добавлении новой строки. Если таблица содержит один столбец, то ему не может быть назначено значение по умолчанию. Например, необходимо создать таблицу Days, состоящую из пяти столбцов: number типа INTEGER, dat типа DATE, event типа VARCHAR(20), usr типа CHAR(10) и tel, определенного на созданном домене Telephone. При этом столбец number не должен содержать NULL-значений, столбец dat по умолчанию должен содержать 1 сентября 1996 года, столбец event по умолчанию должен содержать NULL-значения, столбец usr по умолчанию должен содержать имя пользователя, подключенного к БД, а столбец tel должен содержать значение по умолчанию из домена Telephone. Запрос для создания таблицы Days примет следующий вид: CREATE TABLE Days (number INTEGER NOT NULL, dat DATE DEFAULT 09/01/1996, event VARCHAR(20) DEFAULT NULL, usr CHAR(10) DEFAULT USER, tel Telephone);. Если определение столбца основано на домене, оно может включать новое значение по умолчанию и/или дополнительные ограничения, которые перекрывают значения, заданные при определении домена. Например, можно добавить ограничение NOT NULL для столбца, если домен его еще не содержит. Однако домен, который был определен как NOT NULL, не может быть переопределен на уровне столбца как допускающий NULL значение. Для поддержания целостности БД на таблицы накладываются ограничения (CONSTRAINT). Под ограничением понимается условие, которое должно выполняться при хранении, обновлении и добавлении данных в таблицу БД. Различают ограничения, накладываемые: - на определенный столбец; - на всю таблицу. 4.2.2. Определение ограничений столбца При ограничении столбца соответствующее ограничение объявляется индивидуально для каждого столбца непосредственно после определения имени и типа столбца. При этом используется конструкция <ограничение столбца>. Определение ограничения таблицы осуществляется после описания всех столбцов, и при этом используется конструкция <тип ограничения>, имеющая следующий формат: <ограничение столбца>::= CONSTRAINT имя ограничения { UNIQUE PRIMARY KEY CHECK (<условие проверки>) REFERENCES родительская таблица [(столбец) [ON DELETE {NO ACTION CASCADE SET DEFAULT SET NULL}] ON UPDATE {NO ACTION CASCADE SET DEFAULT SET NULL}]}. Рекомендуется ограничениям давать имена, т.к. при использовании запроса ALTER TABLE удалить ограничение можно только по его имени. При создании таблицы имя ограничения задается произвольно, но должно быть уникальным для данной таблицы и, желательно, отражать смысл ограничения. Если CONSTRAINT имя ограничения отсутствует, то СУБД присваивает ограничению свое системное имя. Имя ограничения можно посмотреть в IBExpert на закладке Ограничения для каждого столбца конкретной таблицы. Параметр UNIQUE определяет, что данный столбец должен иметь уникальные значения, т.е. при изменении данных в таблице (добавлении или обновлении строк) автоматически будет осуществляться проверка, что подобного значения в столбце нет. Предложение PRIMARY KEY определяет столбец в качестве первичного ключа. Следует обратить внимание на то, что столбец таблицы, определенный как первичный ключ, должен обязательно иметь ограничение NOT NULL. Рассмотрим запрос CREATE TABLE c ограничением определенного столбца. Например, чтобы создать таблицу Abonent, определив поле AccountCD в качестве первичного ключа, необходимо использовать следующий запрос:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |