Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5361 / 282 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 10: Создание таблиц баз данных

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Создание и удаление пользовательских типов данных при помощи T-SQL

Системная хранимая процедура sp_addtype является командой T-SQL, применяемой для создания пользовательских типов данных. При помощи запуска этой команды в то время, когда вы работаете с модельной базой данных (базой данных model), можно организовать применение нового типа данных во всех вновь создаваемых пользовательских базах данных, потому что эти базы данных создаются с такими же атрибутами, как и у базы данных model. Запуск этой команды при работе с пользовательской базой данных позволит применять новый тип данных только в этой базе данных. (Помните, что для работы с конкретной базой данных вы должны запускать команду USE имя_базы_данных.) Ниже дан пример команд T-SQL, создающих пользовательский тип данных brand_type в базе данных model:

USE model 
GO 
sp_addtype brand_type, 'smallint', 'NOT NULL' 
GO

Три параметра у sp_addtype – это имя пользовательского типа данных, системный тип данных, на котором основывается новый тип данных и возможность использования null -значений в новом типе данных. Новый тип данных, brand_type, появится во всех вновь создаваемых пользовательских базах данных. Если вы создадите пользовательский тип данных в пользовательской базе данных и захотите посмотреть новый тип данных через Enterprise Manager, то выберите команду Refresh в меню Action Enterprise Manager’а.

Чтобы удалить ненужный пользовательский тип данных, запустите команду sp_droptype в базе данных, в которой этот тип данных был определен. Ниже дан пример команд T-SQL, удаляющих пользовательский тип данных brand_type из базы данных model. (Напомним, что если вы создали этот тип данных в пользовательской базе данных и хотите, чтобы в Enterprise Manager было видно, что этот тип данных был удален, то выберите в Enterprise Manager команду Refresh в меню Action.)

USE model 
GO 
sp_droptype brand_type 
GO
Создание таблиц Product_Info и Brands с применением пользовательских типов данных

Давайте вернемся к нашему примеру базы данных. Мы создадим заново таблицу Product_Info, пользуясь новым пользовательским типом brand_type, а затем создадим таблицу Brands. Эта таблица, как и таблица Product_Info, будет иметь колонку Brand_ID и мы применим для этих колонок одинаковый пользовательский тип данных brand_type. Сначала нам надо будет удалить старую таблицу Product_Info, чтобы мы смогли бы создать ее снова. Ниже показан код, который выполнит все необходимые действия:

USE MyDB 
GO
DROP TABLE Product_Info
GO 
CREATE TABLE Product_Info 
( 
Product_ID     		smallint,
Product_Name   	char(20), 
Description    		char(30), 
Price          			smallmoney, 
Brand_ID       		brand_type 
) 
GO
CREATE TABLE Brands
(
Brand_ID       		brand_type,
Brand_Name     		char(30),
Supplier_ID    		smallint
)
GO

Задав одинаковый тип данных brand_type для колонок Brand_ID в обеих таблицах, мы гарантируем одинаковость атрибутов обеих колонок. Нам не надо помнить об особенностях типа данных, на котором основывается тип данных brand_type, мы можем просто применять новый тип данных для всех колонок Brand_ID.

Кто же должен следить за этими пользовательскими типами данных? Администратор баз данных должен знать о применяемых пользовательских типах данных, чтобы следить как за правильностью самих типов данных, так и за правильностью их применения (хотя администратор баз данных, вероятно, и есть тот человек, кто первоначально задает пользовательские типы данных). Кроме того, о том, как определены эти типы данных, должен знать программист приложений, потому что это нужно ему для создания кода приложений. А вот конечным пользователям не нужно знать о пользовательских типах данных, потому что они все равно не поймут разницу между ними.

Создание таблиц в заданной группе файлов

При помощи SQL Server вы можете задать, в какой именно группе файлов будут размещаться те или иные таблицы и данные из этих таблиц (если вы создали одну или несколько пользовательских групп файлов). Если при создании таблицы группа файлов не была задана, то таблицы будут размещаться в первичной группе файлов, если только другая группа файлов не будет задана в качестве применяемой по умолчанию. (Группы файлов применяются для размещения файлов и индексов на заданных дисках или массивах дисков. Более подробно о них и о том, как и зачем таблицы данных размещаются в файлах и в группах файлов, было рассказано в "Создание баз данных" .)

Создание таблицы Product_Info в заданной группе файлов

Предположим, что в созданной нами базе данных MyDB имеется группа файлов с именем product_group, содержащая один вторичный файл данных, который размещен на другом диске (E), чем диск, на котором размещена первичная группа файлов (С). Применяя эту методику, вы можете физически отделить свои таблицы данных от системных таблиц SQL Server. Еще мы создадим на отдельном диске (F) файл журнала, чтобы отделить ввод-вывод журнала. (Про создание баз данных и применение групп файлов см. "Создание баз данных" .) Необходимые команды могут выглядеть так:

USE master 
GO 
CREATE DATABASE MyDB 
ON PRIMARY                         		-- Явное задание первичной 
                                   		-- группы файлов (не обязательно) 
(NAME = MyDBroot,               			-- Первичный файл данных
FILENAME = 'c:\mssql2k\MSSQL\data\mydbroot.mdf', 
SIZE = 8MB, 
MAXSIZE = 10MB, 
FILEGROWTH = 1MB),
FILEGROUP product_group        		-- Группа файлов для следующего файла
(NAME = MyDBdata1,                 		-- Вторичный файл данных
FILENAME = 'e:\mssql2k\MSSQL\data\mydbdata1.ndf', 
SIZE = 1000MB, 
MAXSIZE = 1500MB, 
FILEGROWTH = 100MB) 
LOG ON 
(NAME = Logdata1,                     			-- Файл журнала
FILENAME = 'f:\log_files\logdata1.ldf', 
SIZE = 1000MB, 
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
GO

А теперь мы можем создать таблицу Product_Info в группе файлов product_group, пользуясь командой CREATE TABLE, как показано ниже.

USE MyDB 
GO 
CREATE TABLE Product_Info 
( 
Product_ID     		smallint,
Product_Name   	char(20), 
Description    		char(30), 
Price          			smallmoney, 
Brand_ID       		brand_type 
) 
on product_group 
GO

Таблица и все данные, которые будут вставлены в таблицу, разместятся на диске E, диске, на котором была задана группа файлов product_group. Поэтому данные из таблицы Product_Info будут иметь свой дисковый накопитель, предназначенный для их ввода-вывода до тех пор, пока в этой же группе файлов не будут созданы другие таблицы.

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Константин Дементьев
Константин Дементьев
Россия, г. Мичуринск