SYBASE (988809), страница 4
Текст из файла (страница 4)
Кроме указанных выше трех типов ограничений, различают ограничения на уровне таблицы и на уровне колонки. Ограничения на уровне колонки действуют только для одной колонки и указываются сразу после имени и типа колонки. Ограничения на уровне таблицы действуют для двух и более колонок и указываются отдельной структурой. Ограничения на уровне таблицы могут включать структуру foreign key (внешний ключ) и список из одного и более имен колонок.
Типы данных:
Категория типа данных | Запись | Размерность | Размер в байтах |
Целые числа | а) tinyint б) smallint в) int (integer) | 0¸255 -32768¸32767 (-215¸215-1) -2147483648¸2147483647 (-231¸231-1) | 1 байт 2 байта 4 байта |
Вещественные числа с фиксированной точкой | а) numeric(p, s) б) decimal (p, s) (dec) | -1038¸1038-1 -1038¸1038-1 | 2¸17 байт 2¸17 байт |
Вещественные числа с плавающей точкой | а) float (precision) б) double precision в) real | от ЭВМ от ЭВМ от ЭВМ | 4б. или 8б. 8 байт 4 байта |
Деньги | а) smallmoney б) money | -214748.3648¸ 214748.3647 -922337203685477.5808¸ 922337203685477.5807 | 4 байта 8 байт |
Дата/время | а) smalldatetime б) datetime | 1.01.1900¸6.06.2079 1.01.1753¸31.12.9999 | 4 байта 8 байт |
Символьные данные | а) char (n) б) varchar (n) в) nchar (b) г) nvarchar (n) д) text | 0¸255 байт 0¸255 байт 0¸255байт 0¸255 байт 0¸231-1 байт (0¸2147483647) | n байт фактическая длина @@ncharsize*n @@ncharsize*фактдлина от 2К до 2 Гбайт |
Двоичные данные | а) binary (n) б) varbinary (n) в) image | 0¸255байт 0¸255 байт 0¸231-1 байт (0¸2147483647) | n байт фактич. длина от 2К до 2 Гбайт |
Битовые данные | bit | 0 или 1 | 1 бит (1/8 байта) |
Пример создания таблиц в учебной БД:
(структура БД приведена в приложении VI)
Имя БД: MPEI1
Владелец: STUD1
1) Создание таблицы с именем POSS:
create table poss
(nomer integer,
fio char(40) not null,
data_rogden char (6),
pol char (1),
sem_polog_k char (1),
spec char (6),
kat_obuch_k char(2),
vuz_k integer,
mp char (2),
gp char (2),
mo char (2),
gok char (2))
2) Создание таблицы с именем VUZ_GOROD:
create table vuz_gorod
(cod_vuza integer,
nazvanie_vuza char (25),
cod_goroda char (3),
nazvanie_goroda char (20),
cod_stran char (2),
nazvanie_stran char (15))
3) Создание таблицы с именем VUZ:
create table vuz
(cod integer,
uch_zavedenie char (25))
4) Создание таблицы с именем FAMILY:
create table family
(cod char (1),
family_status (12))
5) Создание таблицы с именем KAT_OBUCH:
create table kat_obuch
(cod char (2),
kat_obucheniya char (16))
6) Создание таблицы с именем GOROD:
create table gorod
(cod char (3),
nazvanie_goroda char (20))
Загрузка таблиц данными выполняется с помощью оператора INSERT (1-ая форма).
Оператор INSERT:
insert [into] [<имя БД>.[<владелец>.]]{<имя таблицы>|<имя представления>}[(<список колонок>)]
{values (<выр.1>[,<выр.2>]...) | select_statement}
Примеры операторов INSERT для созданных таблиц:
1) insert poss values
(534305, 'ЖУРАВЛЕВ АВЕРЬЯН АЛЕКСЕЕВИЧ', '000073’, 'M', '0','001001', '05',
0129000, '08', '90', '03', '95')
2) insert vuz_gorod values
(1115842, 'С.-П. ИИЖТ', '002', 'САНКТ-ПЕТЕРБУРГ', '01', 'РОССИЯ')
3) insert vuz values
(1962902, 'СТАВР.МЕД.ИНСТ.')
4) insert family values
('0', 'ХОЛОСТ')
5) insert kat_obuch values
('03', 'СТУДЕНТ')
6) insert gorod values
('003', 'АСТРАХАНЬ')
Ограничения целостности данных
Ссылочная целостность - это правила, управляющие целостностью данных и устанавливающие определенные (специфические) взаимосвязи между первичными и внешними ключами различных таблиц. SQL-сервер сохраняет ссылочную целостность с помощью пользовательских триггеров.
Умолчание - это опция или свойство (значения) поля или типа данных, выбираемое системой в случае неопределенности.
Умолчания и правила определяют ограничения целостности, которые вступают в силу во время ввода и модификации данных.
Правило - это спецификация, контролирующая данные при вводе в определенное поле или в поле пользовательского типа данных.
Правила ссылочной целостности требуют, чтобы данные, вводимые в "связанную" таблицу, определяющую правило, должны сравниваться со значениями в "основной" таблице. Вы не можете удалить записи или обновить значения колонок в "основной" таблице, не сопоставив их со значениями в "связанной" таблице. Кроме этого, вы не можете удалить "основную" таблицу до тех пор, пока не будет удалена "связанная" таблица или пока не сменится правило ссылочной целостности.
Пользовательские типы данных - это типы данных, определенные пользователем в термах существующих системных типов данных (на основе базовых типов данных). Пользовательские типы данных могут быть ограничены правилами и умолчаниями.
Пример использования правила: контроль двух колонок
create table my_publishers
(pub_id char (4),
pub_name varchar (40),
constraint my_chr_constraint
check (pub_id in ("1389", "0736", "0877")
or pub_name not like "Bad News Books"))
Пример использования умолчаний:
create table my_titles
(title_id char (6),
title varchar (80),
price money default null,
total_sales int default 0)
Пример использования контроля значения поля (при вводе, т.е. оператор INSERT):
create table my_new_publishers
(pub_id char (4)
check (pub_id in ("1389", "0736", "0877", "1622","1756")
or pub_id like "99 [0-9][0-9]"),
pub_name varchar (40),
city varchr (20),
state char (2))
Примеры определения пользовательских типов данных:
execute sp_addtype nm, "varchar (30)"
execute sp_addtype p#, "char (10)"
Определение контрольных ограничений
Контрольные ограничения определяются для контроля значений при вводе в поле таблицы. Контрольное ограничение определяет условие поиска, которому должно удовлетворять значение поля перед вводом в таблицу.
Условие поиска может включать:
-
список константных выражений с функцией in;
-
диапазон константных выражений с функцией between;
-
множество условий с функцией like.
Константные выражения обычно включают в себя арифметические операции и встроенные функции.
Но условие поиска не может включать подзапросы, многофункциональные спецификации и адресные спецификации.
Существуют два типа контрольных ограничений:
-
на уровне поля;
-
на уровне таблицы.
Контрольное ограничение на уровне поля действует только для одного поля, на котором это ограничение определяется. Контрольные ограничения на уровне таблицы действуют для любых полей этой таблицы.
Создавать умолчания, правила и индексы можно не только в рамках команды create table, но и отдельными командами create. Эти команды можно использовать уже после того, как созданы и загружены таблицы. Умолчания и правила создаются для ограничения значений какого-либо одного поля таблицы.
Создание умолчаний
create default [<владелец>.]<имя умолчания>
as <константное выражение>
Создание правил
create rule [<владелец>.]<имя правила>
as <условное выражение>
где <условное выражение> аналогично условному выражению в структуре where оператора select за тем исключением, что вместо имени поля указывается аргумент правила, начинающийся со знака @. Аргумент у правила может быть только один.
Связывание правила с объектом БД (именем колонки)
sp_bindrule <имя правила>, <имя объекта> [, futureonly]
где <имя объекта> - это имя таблицы и имя колонки (<имя таблицы>.<имя колонки>).
Проверка действия правила осуществляется оператором insert (или update) после создания и связывания правила.
Пример команды create table с контрольными ограничениями:
create table poss1
( nomer integer check ( nomer between 1 and 700000),
fio char (40) not null check ( fio not like “%.%” or fio not like “%-%”),
d_rogd char (2) check ( d_rogd between “01” and “31”),
m_rogd char (2) check ( m_rogd between “01” and “12”),
g_rogd char (2) check (g_rogd between “00” and “99”),
pol char (1) check ( pol like “М” or pol like “Ж”),
sem_polog_k char (1) check ( sem_polog_k in (“0”, “1”, “2”, “3”)),
spec char (6) check ( spec between “000000” and “190046”),
kat_obuch_k char(2) check ( kat_obuch_k between “01” and “17”),
vuz_k integer check ( vuz_k between 128955 and 8199999),
mp char (2) check ( mp between “01” and “12”),
gp char (2) check ( gp between “00” and “99”),
mo char (2) check ( mo between “01” and “12”),
gok char (2) check ( gok between “00” and “99”))
Развязывание правила с объектом БД
sp_unbindrule <имя объекта> [, futureonly]
Создание индексов
Индексы бывают трех типов:
1) Составные индексы - определяются на двух и более колонках.
2) Уникальные индексы - никакие два значения индекса не могут быть равны между собой.
-
Групповые или негрупповые индесы - групповые индексы создают возможность совпадения физической и логической последовательностей записей в таблице; в негрупповых индексах - этого нет.
Команда создания индекса:
create [unique] [clustered | nonclustered] index
(<имя индекса> on [[<имя БД>.] <владелец>.] <имя табл.>
(<имя колонки> [,<имя колонки>]...)
[with {fillfactor=x, ignore_dup_key, sorted_data,