Программирование >>  Программный интерфейс приложений 

1 ... 12 13 14 [ 15 ] 16 17 18 ... 264


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

Я предполагаю, что все члены Исторической Лиги живт в США. Для международных организаций это будет упрощением, но для нащей задачи это вполне подходит В случае хранения адресов из разных стран читатель обязательно увязнет в проблемах хранения адреса в различных форматах. Например, применение почтового индекса не является международным стандартом, многие страны делятся на провинции и области, а не на щтаты.

Телефонный номер. Очень полезен для поддержания контактов с членами Исторической Лиги .

Ключевые слова для определения области интересов. Без сомнения, областью научных интересов всех членов Исторической Лиги является история США, но вероятно, что каждый из них имеет свои специфические интересы. Этот столбец предназначен для хранения соответствующей информации. Он будет полезен для поиска по интересам.

Создание таблиц

Теперь можно приступить к созданию таблиц базы данных Историческая Лига . Воспользуемся оператором create table, который имеет следующий синтаксис:

create table tbl name (column specs)

Здесь атрибут tbl name содержит имя таблицы, а coluinn specs - спецификацию столбцов и индексов в таблице (если они имеются). Индексы нужны для ускорения просмотра таблицы. О них мы поговорим позже в главе 4, Оптимизация запросов .

Оператор create table, предназначенный для создания таблицы president, имеет следующий вид:

create table president (

last name varchar{15) not null, first name varchar(15) not null, suffix varchar{5) null, City varchar(20) not null, State varchar(2) not null, birth date not null, death date null

Ho перед этим нужно запустить mysql, используя команду: % mysql samp db

64 Часть I. Использование СУБД MySQL



Затем введите оператор create table, приведенный выше (не забудьте ввести точку с запятой в конце оператора, в противном случае mysql не будет знать, где оператор кончается).

Для создания таблицы president с помошью файла из дистрибуции примера базы данных (см. раздел Получение и инсталляция дистрибуции базы данных samp db ) запустите из оболочки следуюшую команду:

% mysql samp db < create president.sql

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

Спецификация столбца в операторе create table состоит из имени столбца, типа (вид значений, которые столбец может содержать) и, возможно, кое-каких атрибутов столбца.

В таблице president используется два типа столбцов. Это типы

varchar и date.

Тип varchar (п) подразумевает, что столбец содержит символьные (строковые) данные переменной длины при максимальной длине п каждый. Значение п выбирается в зависимости от того, какой максимальной длины ожидается значение столбца. Так, state объявлен как varchar (2). Этого достаточно, если для хранения названия штата будет использоваться его традиционная двухбуквенная аббревиатура. Другие строковые столбцы должны быть длинней, чтобы вместить более длинные названия.

Еше одним типом данных, которым мы здесь воспользовались, является тип date. Читателя может удивить то, что формат хранения данных начинается с года. Стандарт формата даты yyyy-mm-dd - это стандарт представления данных ANSI SQL.

Единственный атрибут столбцов, которым мы воспользуемся в таблице president, - это атрибут null (значения данного столбца могут быть пустыми) и not null (значения данного столбца не могут быть пустыми). Большинство столбцов имеют атрибут not null. Это означает, что они всегда должны быть заполнены. Только два столбца могут иметь пустые значения - это suffix (суффиксы большей частью в именах отсутствуют) и death (некоторые президенты живы, и дата смерти отсутствует).

Оператор create table, предназначенный для создания таблицы member, имеет такой вид:

CREATE TABLE member (

last name VARCHAR(20) NOT NOLL, first name VARCHAR(20) NOT NOLL, suffix VARCHAR(5) NOLL,

expiration DATE NOLL DEFAOLT 0000-00-00 , email VARCHAR(100) NOLL, street VARCHAR(50) NOLL,

3-1729



city VARCHAR(50) NULL, state VARCHAR(2) NULL, zip VARCHAR(IO) NULL, phone VARCHAR(20) NULL, interests VARCHAR(255) NULL

Введите этот оператор из mysql или запустите из оболочки следующую команду:

% mysql samp db < create member.sql

С точки зрения типов столбцов, таблица member не представляет особого интереса: все столбцы, за исключением одного столбца, заданы как строки переменной длины. Одно исключение - столбец expiration имеет тип date Его значение по умолчанию 0000-00-00 . Оно означает, что дата введена не была. Сделано это потому, что expiration может иметь пустое значение, что свидетельствует о пожизненном членстве. Однако значением по умолчанию столбца, который может иметь пустое значение, есть пустое значение при условии, что другое значение по умолчанию не определено. Возникает ситуация, когда при создании записи для нового члена не вводится дата истечения срока полномочий, член получает пожизненное членство! Воспользовавшись значением по умолчанию 0000-00-00 , мы решаем эту проблему. Это также позволит производить периодическую проверку на правильность ввода даты.

Прошу обратить внимание на то, что я забыл задать столбец для хранения идентификационного номера членства Это было сделано преднамеренно для того, чтобы иметь возможность демонстрации работы оператора alter table.

Давайте убедимся, что нам удалось создать именно такую таблицу, какую мы хотели.

mysql> DESCRIBE president

1 Field

1 Type

1 Null

Key 1 default 1 Extra

1 last name

1 varchardS)

1 1 1

1 first name

1 varchar(15)

1 1 1

1 suffix

1 varchar(5)

1 YES

1 NULL 1 1

1 city

1 varchar(20)

1 1 1

1 state

1 char{2)

1 1 1

1 birth

1 date

10000-00-001 1

1 death

1 date -+-

1 YES -+-

1 NULL 1 1 H-+-+-+

Для версии 3.23 результат работы этого оператора включает еще один столбец, содержащий информацию о правах доступа. Для простоты этот столбец включен.

Все вроде-бы нормально, за исключением одного: столбец state имеет тип char(2). Это странно. Разве он не был объявлен как varchar(2)? Да, был, но СУБД MySQL по умолчанию изменила тип с varchar на char. Причина - проблема оптимизации области хранения



1 ... 12 13 14 [ 15 ] 16 17 18 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика