Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Типы данных SQL




Таблицы

Для сохранения информации в БД необходимо создать одну или несколько таблиц. Для создания таблицы нужно выполнить оператор языка SQL create table, его упрошенный синтаксис приведен ниже:

create table <имя таблицы> (

<имя столбца 1> <тип 1>

[, <имя столбца 2> <тип 2>

[, … ] ][2])

go

 

Альтернативный способ создания таблицы — команда Создать таблицу…, вызываемая из контекстного меню узла Таблицы дерева объектов, подчиненного узлу, соответствующему БД, в которой создается таблица. Созданная база данных появляется в дереве объектов (окно Обозреватель объектов) после обновления узла Таблицы (команда контекстного меню Обновить).

Основные типы данных языка SQL (на примере диалекта Transact-SQL Microsoft SQL Server 2008) приведены в таблице 1.1.


Таблица 1.1.

Тип Форма записи Размерность Пример
char[(n)] или character[(n)] Последовательность символов длины n, заключенных в знаки апострофа, если n опущено – 1 символ; для хранения данных всегда отводится поле в n символов 1.. 8000 ‘char’
varchar[(n)] см. char[(n)]; для хранения данных отводится поле длины, соответствующей числу фактически заданных символов 1.. 8000 ‘varchar’
text[3] или varchar(max) Последовательность символов переменной длины большой размерности 2^31–1 (2 ГБ) ‘text’
nchar[(n)] То же, что и char в формате Unicode 1.. 4000 ‘nchar’
nvarchar[(n)] То же, что и varchar в формате Unicode 1.. 4000 ‘nvarchar’
ntext или nvarchar(max) То же, что и text в формате Unicode 2^30–1 (2 ГБ) ‘ntext’
bit 0 или 1 0.. 1  
tinyint Целое без знака 0.. 255  
smallint Целое со знаком –2^15.. 2^15–1 –32233
int Целое со знаком –2^31.. 2^31–1  
bigint Целое со знаком –2^63.. 2^63–1  
decimal[(p[,s])] или numeric[(p[,s])] Вещественное с фиксированной точкой (всего p значащих цифр, s значащих цифр после «.», по умолчанию s = 0) –10^38+1.. 10^38-1 –12.44
real Вещественное с плавающей точкой, для хранения отводится 4 байта, эквивалентно float(24) –3,40E+38.. –1,18E–38,0 и 1,18E–38.. 3,40E+38   3.3E–5
float[(n)] Вещественное с плавающей точкой, для хранения отводится 4 байта (7 цифр), если n в диапазоне 1..24, 8 байт (15 цифр), если n – 25..53 –1,79E+308.. –2,23E–308,0 и 2,23E–308.. –1,79E+308   –3.3E5
smallmoney Вещественное с фиксированной точкой c 4-мя знаками после «.» –214748,3648 ..214748,3647 –55.3333
money Вещественное с фиксированной точкой c 4-мя знаками после «.» примерно –900..+900 триллионов 33.4455
smalldatetime Дата и время с точностью до секунд, дата от времени отделяется пробелом, разделителями в поле даты служат «–» или «/»,разделителем в поле времени – «:», 01/01/1900.. 06/06/2079 '2000-05-08 12:35:29'
datetime Дата и время с точностью до микросекунд, значения микросекунд от времени отделяются символом «.» 01/01/1753.. 31/12/9999 '2000-05-08 12:35:29.999'
date Дата 01/01/0001.. 31/12/9999 '2000-05-08 12:35:29.999'
time Время с точностью до наносекунд 00:00:00.. 23:59:59 '10:10:10.9999999'
datetime2 Комбинация date и time    
datetimeoffset Комбинация date и time с указанием смещения часового пояса   '2007/05/08 12:35:29.1234567 +12:15'
binary[(n)] Двоичные данные фиксированной длины, если n опущено – 1 байт 1.. 8000
varbinary[(n)] Двоичные данные переменной длины, если n опущено – 1 байт 1.. 8000
image[4] или varbinary(max) Двоичные данные переменной длины 2^31–1 (2 ГБ)
timestamp[5] или rowversion Реализуемый на основе binary(8) автоматически формируемый код версии строки
uniqueidentifier 16-байтовый идентификатор GUID.
xml Синтаксически правильный XML-документ. 2^31–1 (2 ГБ)

 

Ниже приведен пример создания таблицы Студент (Ном_зач – номер зачетной книжки):

 

create table Студент (

Ном_Зач int,

ФИО varchar(50),

Группа char(5))

go

 

Для удаления таблицы служит оператор drop table <имя таблицы>. Альтернативный способ удаления таблицы — команда Удалить, вызываемая из контекстного меню узла, соответствующего удаляемой таблице в дереве объектов.

В определении столбцов таблицы можно помимо задания типа данных указывать директивы:

(i) null или not null — разрешение/запрет NULL-значений (NULL – специальная константа языка SQL, показывающая, что при вставке данных в таблицу не было задано значение соответствующего столбца);

(ii) default <значение по умолчанию>;

(iii) check <условие проверки>;

(iv) unique – требование, что бы все значения в столбце были различны;

(v) primary key – определение первичного ключа для однозначной идентификации записей в таблице.

Использование данных директив иллюстрирует пример, приведенный ниже (БД не может содержать двух одноименных таблиц, предыдущая версия таблицы Студент должна быть удалена директивой drop table):

 

create table Студент (

Ном_Зач int primary key,

ФИО varchar(50) not null,

Сер_Ном_Пасп char(12) not null unique,

Гражданство varchar(50) default 'Российская Федерация',

Адрес varchar(250) null,

Факультет char(1) not null check (Факультет in ('1', '2', '3', '4')),

Группа char(5) not null)

go

 

В примере столбец Ном_Зач является первичным ключом таблицы, директива primary key автоматически влечет ограничения not null (значение первичного ключа не может быть неопределенным) и unique (все значения в столбцах первичного ключа должны быть различны). Столбцы ФИО и Группа являются обязательными (не содержат NULL-значений), столбец Адрес может не заполняться (допускает NULL-значения). Серия и номер паспорта студента (Сер_Ном_Пасп) обязательный столбец, кроме того, все значения в нем должны быть различны. Столбец Гражданство является необязательным, но для него определено значение по умолчанию, которое будет подставляться, если соответствующее значение не указано при вставке данных в таблицу. Для столбца Факультет задано условие проверки – значение должно соответствовать одному из четырех элементов множества (оператор in возвращает логическое значение И или Л, в зависимости от того принадлежит или не принадлежит элемент множеству). В общем случае в директиве check может задаваться логическое условие, в котором используются имя столбца, константы, операции сравнения (>, >=, < …), логические операции (and, or, not), рассмотренный выше оператор in, скобки.

СУБД будет отклонять попытки добавления записей в таблицы, если добавляемые значения нарушают ограничения столбцов, определенные в create table. Директивы primary key, unique, check могут задаваться как на уровне столбца (в определении столбца), так и на уровне таблицы (в конце create table), в последнем случае они обеспечивают возможности создания составных ключей (включающих более одного столбца), проверки уникальности сочетания значений различных столбцов, совместную проверку значений различных столбцов таблицы.

В приведенном ниже примере:

 

create table Студент (

Ном_Зач int primary key,

ФИО varchar(50) not null,

Сер_Пасп char(5) not null,

Ном_Пасп char(6) not null,

Факультет char(1) not null check (Факультет in ('1', '2', '3', '4')),

Группа char(5) not null,

unique (Сер_Пасп, Ном_Пасп),

check (Факультет = left(Группа,1)))

go

 

директива unique использована для обеспечения уникальности значений столбцов Сер_Пасп и Ном_Пасп, таким образом, серии и номера паспортов, хранимые в отдельных столбцах таблицы, могут совпадать у различных студентов, но их сочетание должно быть уникальным в каждой из записей. Для полей Факультет и Группа проверяется, что бы первый символ в столбце Группа совпадал с номером факультета.

Составные первичные ключи используются, когда в таблице нет столбца, значения которого обеспечивают уникальную идентификацию строк, примером такой таблицы может служить:

create table Оценка (

Ном_Зач int not null,

Дисциплина varchar(50) not null,

Оценка tinyint not null,

primary key (Ном_Зач, Дисциплина))

go

 

Студент получает оценки по разным дисциплинам, по одной дисциплине получают оценки много студентов, таким образом, только сочетание значений в столбцах Ном_Зач и Дисциплина позволяет произвести однозначную идентификацию записи.

Приведенный пример иллюстрирует возможность использования составного ключа, вместе с тем, при создании таблиц следует стремиться, что бы ключи были как можно короче, поэтому использование столбца с типом данных varchar(50) в качестве ключевого не является удачным. В таких случаях вводят специальный (системный, «суррогатный») ключ. Так как значения данных ключей не имеет смысла с точки зрения предметной области и используются только в целях идентификации записей, организации ссылок, современные СУБД предлагают механизм для их автоматического формирования. В MS SQL для этих целей реализована директива identity [ (<начальное значение> [, <приращение> ]) ], используемая в сочетании с типом данных int. Если <начальное значение> и <приращение> опущены, в качестве их значений используется 1. Примером автоматического формирования ключа в таблице Оценка может служить следующий (предыдущая версия таблицы Оценка должна быть удалена директивой drop table):

 

create table Оценка (

Id int identity primary key,

Ном_Зач int not null,

Дисциплина varchar(50) not null,

Оценка tinyint not null)

go




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 2101; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.069 сек.