Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы программирования..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
10.32 Mб
Скачать

2.3.Создание и удаление баз данных

Вкомандном языке Transact-SQL для создания базы данных используется команда CREATE DATABASE. Например:

CREATE DATABASE Test_x ON PRIM ARY

(NAME=tdb1_dat,

FILENAM E=’c:\data\tdb1_data.mdf, SIZE=10M B,

M AXSIZE= 100MB, FILEG RO W TH=10M B

)

LOG ON (NAME=tdb1 J o g ,

FILENAM E=’c:\data\tdb1_data.ldf, & SIZE=5M B, &

M AXSIZE=10G B, FILEG R O W TH =10%,

),

(NAME=tdb2_dat,

FILENAM E=’d:\data\tdb2_data.ndf S!ZE=10M B

M AXSIZE= 100MB FILEG RO W TH=10M B

),

FILEG RO UP DBGroupl (NAM E=td b_g roup 1 _dat,

FILENAM E=’f:\data\tdb_gr1_data.ndf SIZE=10M B

FILEG RO W TH=5%

).

(NAME=tdb_group2_dat, FILENAME=’g:\data\tdb_gr1_data.ndf SIZE=10MB

FILEGR0WTH=5%

).

Одна база данных может состоять из нескольких файлов данных, файло­ вых групп или журналов транзакций.

PRIMARY - файловая группа, которая рекомендуется для хранения всех системных таблиц SQL-сервера, и объектов, не назначенных другим файловым группам;

LOG ON - предназначен для хранения информации об активности в отношении базы данных (журнал транзакций);

- FILEGROUP - служит для описания файловых групп, с целью размещения объектов базы данных на других жестких дисках и группировки их свойств с точки зрения одинакового описания параметров;

-NAME - логическое имя БД или журнала, к которому можно обратиться при выполнении команд;

-FILENAME - указывает имя и путь к файлу в операционный системе (нельзя указывать сетевые диски с других компьютеров);

-SIZE - начальный размер файла, который может увеличиваться по мере необходимости;

-FILEGROWTH - приращение;

-MAXSIZE - максимальный размер файла.

Для удаления базы данных можно использовать команду DROP DATA­ BASE Test_x.

2.4. Создание и модификация таблиц баз данных

При проектировании таблиц часто бывает необходимо обеспечить авто­ матическое генерирование числовых (и не только) уникальных значений. В большинстве случаев это уникальность значений в пределах одного столбца. Существует несколько способов решения проблемы:

1.Обеспечение уникальности данных в пределах одного столбца путем определения для него ограничения целостности IDENTITY (основной способ).

2.Генерирование для столбца значений, уникальных в пределах базы данных с помощью timestamp.

3.Установка для столбца свойства rowguidcol, что обеспечивает генерирование для каждой новой строки глобального уникального идентификатора (постарайтесь не использовать).

SQL-синтаксис создания таблицы достаточно сложен. Поэтому рассмот­ рим его на серии примеров:

Простейшая таблица:

CREATE TABLE Т_1 (

id

int,

fio

varchar(50) NULL

); Таблица с полем-счетчиком:

CREATE TABLE T_1 (

id

decimal(18,0) IDENTITY (1,1) NOT NULL,

fio

varchar(50) NULL

);

 

Таблица с первичным ключом:

CREATE TABLE ТJ (

id decimal(18,0) IDENTITY (1,1) NOT NULL PRIMARY KEY, fio varchar(50) NULL

);

Создание связанных таблиц:

CREATE TABLE T1

(id int INDENT1TY(1,1) not null, Fam varchar(50),

Data_r datetime,

Pasport varchar(13) not null, Data_v datetime,

CONSTRAINT PKJd PRIMARY KEY (id),

CONSTRAINT Check_data_v CHECK (data_v>data_r and data_v<getdate()), CONSTRAINT Check_data_r CHECK (data_r>’01-01-1900’),

CONSTRAINt Unique_pasport UNIQUE NONCLUSTERED (passport), CONSTRAINT Check_pasport CHECK (passport Like

‘([0-9] [0-9] [0-9] [0-9])[0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’)); CREATE TABLE T2

(id int INDENTITY(1,1) not null, ld_parent int,

Dolgnost varchar(30) not null, CONSTRAINT PKJd PRIMARY KEY (id),

CONSTRAINT FKJd_parent FOREIGN KEY(id_parent) REFERENCES T2(id), CONSTRAINt Unique.dolgnost UNIQUE NONCLUSTERED (dolgnost)); CREATE TABLE T12

(id int INDENTITY(1,1) not null, ld_T1 int,

ld_T21 int,

Data_w datetime DEFAULT(getdate()) Null, CONSTRAINT PKJd PRIMARY KEY (id),

CONSTRAINT FKJdJI FOREIGN KEY(idJ1) REFERENCES T1 (id), CONSTRAINT FKJd_t2 FOREIGN KEY(idJ2) REFERENCES T2(id))

Если вы сомневаетесь в корректности ранее созданного объекта, оператор его создания можно просмотреть с помощью директивы:

sp_helptext 41*

Все операции с данными основаны на классических операторах:

SELECT * FROM ТJ

или SELECT fio as Worker_fio FROM T_1 или SELECT fio FROM T.Worker as TW INSERT INTO T_1 (fio) VALUES (’Иванов’);

UPDATE T J SET fio-Петров’ WHERE id=100;

DELETE FROM T_1 WHERE fio LIKE ’%OB’; Эти команды далее в тексте не поясняются. Удаление независимой таблицы:

drop table Т_1;

Удаление связанных таблиц: drop table Т2;

drop table Т1;

Все изменения структуры в схеме связанных таблиц настоятельно реко­ мендуется выполнять визуально, так как классический SQL-оператор ALTER TABLE имеет достаточно сложный синтаксис и требует знания точного наиме­ нования системных объектов, которые были созданы автоматически без участи разработчика:

ALTER TABLE [dbo].[T2] DROP CONSTRAINT FK_T2_T1

Еще одно замечание. В момент разработки структуры БД создаваемые объекты находятся в схеме разработчика (а обычно он не является владельцем БД “dbo”). Поэтому доступ к таким объектам из схем других пользователей несколько затруднен.

Например, команда SELECT * FROM t_person обратится сначала к своей схеме, а затем - к схеме dbo - и только если там имеется соответствующая таб­ лица, будет выполнена выборка. В противном случае мы получим сообщение об ошибке.

SELECT * FROM userl .t_person

Эта команда обращается к таблице, размещенной в схеме userl. Следует заметить, что в БД могут находиться объекты с одинаковыми названиями, но принадлежащие разным схемам (пользователям). Однако это нежелательно.

Для того чтобы к объектам (без уведомления владельца схемы) смогли об­ ращаться разные пользователи, следует размещать (исходно создавать) в схеме dbo. Для этого разработчик объекта должен быть наделен правом работы в схе­ ме владельца БД. Синтаксис оператора очень прост:

CREATE TABLE dbo.tl (... и т.д.)

Врезультате любой пользователь может выполнить одну и ту же команду

иполучить доступ к единому объекту БД.

SELECT * FROM t1