Россия, г.Кемерово ул.Весенняя д.21 кв.29, КузГТУ, 2003 |
Лекция 10: Создание таблиц баз данных
Создание и удаление пользовательских типов данных при помощи 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 будут иметь свой дисковый накопитель, предназначенный для их ввода-вывода до тех пор, пока в этой же группе файлов не будут созданы другие таблицы.