|
Программирование >> Sql: полное руководство
CUST INTEGER NOT NULL, REP INTEGER, MFR CHAR(3) NOT NULL, PRODUCT CHAR(5) NOT NULL, QTY INTEGER NOT NULL, AMOUNT MONEY NOT NULL) В различных СУБД инструкции create table для одной и той же таблицы могут немного отличаться, поскольку каждая СУБД поддерживает собственный набор типов данных и использует собственные ключевые слова для их идентификации в определениях столбцов. Кроме того, в стандарте SQL2 в определении столбца разрешается вместо базового типа данных указьшать домен (домены описывались в главе 11). Домен представляет собой именованное описание множества допустимых значений столбца, хранящееся в базе данных. В основе определения домена лежит один из базовых типов данных, на значения которого наложены дополнительные ограничения, проверяемые при каждом внесении данных в соответствующий столбец. Если, например, в базе данных, совместимой со стандартом SQL2, создан следующий домен: CREATE DOMAIN VALID OFFICE ID INTEGER CHECK (VALUE BETWEEN 11 AND 99) тогда определение таблицы offices можно записать так: Определить таблицу offices и ее столбцы. CREATE TABLE OFFICES (OFFICE VALID OFFICE ID NOT NULL, CITY VARCHAR(15) NOT NULL, \ REGION VARCHAR(10) NOT NULL, MGR INTEGER, TARGET MONEY, SALES MONEY NOT NULL) Теперь СУБД будет автоматически проверять каждую добавляемую в эту таблицу строку на предмет того, находится ли указанный в строке номер офиса в требуемом диапазоне значений. Домены особенно эффективны, когда в базе данных одни и те же ограничения применимы сразу к нескольким столбцам. В нашей учебной базе данных номера офисов появляются в таблицах offices и salesreps, поэтому домен valid 0ffice id можно применить к соответствующим столбцам обеих таблиц В промышленных базах данных могут существовать десятки и сотни столбцов, данные которых относятся к одному и тому же домену. Значения по умолчанию и отсутствующие значения В определении каждого столбца указывается, допускается ли хранение в нем значений null. В больщинстве СУБД и в стандарте SQL по умолчанию считается, что значения null допускаются. Если же столбец обязательно должен содержать данные, необходимо включить офаничение not null В СУБД Sybase и SQL Server, наоборот, предполагается, что значения null недопустимы, если столбец явно не объявлен с офаничением null Как стандарт SQL2, так и многие реляционные СУБД поддерживают задание для столбцов значений по умолчанию, которые указываются в определении столбца. Вот пример инсфукции create table для таблицы offices, задающей значения по умолчанию: Определить таблицу offices со значениями по умолчанию (синтаксис стандарта ANSI/ISO) CREATE TABLE OFFICES (OFFICE INTEGER NOT NULL, CITY VARCHAR(15) NOT NULL, REGION VARCHAR(IO) NOT NULL DEFAULT Eastern, MGR INTEGER DEFAULT 106, TARGET MONEY DEFAULT NOLL, SALES MONEY NOT NULL DEFAULT 0 00) При добавлении в определенную таким образом таблицу данных о новом офисе необходимо задать только его идентификатор и город, в котором расположен офис По умолчанию устанавливаются регион - Eastern (Восточный), менеджер офиса - Сэм Кларк (идентификатор служащего 106), текущий объем продаж - ноль, план продаж - null Отметим, что в определении столбца target можно не указывать предложение default null, по умолчанию он все равно будет принимать значения null Определения первичного и внешнего ключей Кроме определений столбцов таблицы, в инструкции create table указьшается информация о первичном ключе таблицы и ее связях с другими таблицами базы данных Эта информация содержится в предложениях primary key и foreign key Вначале они появились в СУБД компании IBM, а затем были добавлены в стандарт ANSI/ISO Большинство основных реляционных СУБД поддерживзет эти предложения В предложении primary key задается столбец или столбцы, которые образуют первичный ключ таблицы Как говорилось в главе 4, этот столбец (ити комбинация столбцов) слжит в качестве уникального идентификатора строк таблицы СУБД автоматически следит за тем, чтобы первичный ключ каждой строки таблицы имел уникальное значение Кроме того, в определениях столбцов первичного ключа должно бьп-ь указано, что они не могут содержать значения null (имеют ограничение not null) В предложении foreign key задается внешний ключ таблицы и определяется связь, которую он создает для нее с другой таблицей (таблицей-предком) В нем указьшаются столбец или столбцы создаваемой таблицы, которые образуют внешний ключ, таблица, связь с которой создает внешний ключ, это таблица-предок, а определяемая таблица в данном отношении является потомком, необязательное имя для этого отношения, оно не используется в инструкциях SQL, но может появляться в сообщениях об ошибках и потребуется в дальнейшем, если будет необходимо удалить внешний ключ, как СУБД должна обращаться со значениями null в одном или нескольких столбцах внешнего ключа при связывании его со строками таблицы-предка, необязательное правило удаления для данного отношения (cascade, set null, set default или no action, как описывалось в главе 11), которое определяет действие, предпринимаемое при удалении строки-предка, необязательное правило обновления для данного отношения (эти правила описаны в главе 11), которое определяет действие, предпринимаемое при обновлении первичного ключа в строке-предке, необязательное условие на значение, которое офаничивает данные в таблице так, чтобы они отвечали определенному критерию отбора Ниже приводится расширенная инструкция create table для таблицы orders, в которую входит определение первичного ключа и трех внешних ключей, имеющихся в таблице Определить таблицу ORDERS с первичным и внешними ключами CREATE TABLE (ORDER NUM ORDER DATE CUST REP MFR PRODUCT QTY AMOUNT PRIMARY KEY CONSTRAINT FOREIGN KEY REFERENCES ON DELETE CONSTRAINT FOREIGN KEY REFERENCES ON DELETE CONSTRAINT FOREIGN KEY REFERENCES ON DELETE ORDERS INTEGER NOT NULL, DATE NOT NULL, INTEGER NOT NULL, INTEGER, CHAR(3) NOT NULL, CHAR(5) NOT NULL, INTEGER NOT NULL, MONEY NOT NULL, (ORDER NUM) , PLACEDBY (CUST) CUSTOMERS CASCADE, TAKENBY (REP) SALESREPS SET NULL, IS FOR (MFR, PRODUCT) PRODUCTS RESTRICT) Ha рис 13 2 изображены три созданные этой инструкцией связи с присвоенными им именами В общем случае связи следует давать имя, поскольку оно помогает лучше понять, какая именно связь создана внешним ключом Например, каждый заказ делается клиентом, идентификатор которого находится в столбце cust таблицы orders Связь С ЭТИМ столбцом получила имя placedby (кем сделан) Табпивд CUSTOHERS Таблица SALESREPS Таблица PRODUCTS
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |