Читайте также:
|
|
В некоторых случаях невозможно предоставить значение опре_ деленного столбца таблицы. Например, при добавлении данных о новом заказе покупателя значение столбца ship_date (дата дос_ тавки) еще не может быть определено. В этом случае говорят, что столбец является нулевым (null) (обратите внимание, я не сказал, равен нулю), что указывает на отсутствие значения.
При проектировании таблицы можно определить, какие столб_ цы могут быть нулевыми (по умолчанию), а какие – нет (это обо_ значается путем добавления ключевых слов not null (ненулевой) после описания типа).
Создание таблиц | |
Смысл столбцов 1 и 2 результата выполнения выражения describe оче_ виден. Столбец 3 показывает, можно ли пропустить тот или иной стол_ бец при вводе данных в таблицу. Я намеренно пока не включил эту тему в обсуждение (краткие рассуждения по этому вопросу можно найти во врезке «Что такое Null?»), она будет полностью рассмотрена в главе 4. Четвертый столбец показывает, участвует ли столбец в формировании какого_либо ключа (первичного или внешнего). В данном случае стол_ бец person_id отмечен как первичный ключ. Столбец 5 показывает, бу_ дет ли определенный столбец заполнен значением по умолчанию в слу_ чае, если он пропущен при вводе данных в таблицу. Для столбца per_ son_id значением по умолчанию является 0, хотя оно будет использова_ но только один раз, поскольку каждая строка таблицы person должна содержать в данном столбце уникальное значение (это первичный ключ). Шестой столбец (названный Extra (дополнительно)) содержит любую другую информацию, относящуюся к столбцу.
Теперь, после создания таблицы person, следующий шаг – создать таб_ лицу favorite_food:
mysql> CREATE TABLE favorite_food
_> (person_id SMALLINT UNSIGNED, _> food VARCHAR(20),
_> CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food), _> CONSTRAINT fk_person_id FOREIGN KEY (person_id)
_> REFERENCES person (person_id)
_> );
Query OK, 0 rows affected (0.10 sec)
Это очень похоже на выражение create table для таблицы person, за не_ сколькими исключениями:
• Поскольку у человека может быть несколько любимых блюд (что и стало причиной создания данной таблицы), одного столбца per_ son_id для обеспечения уникальности в таблице недостаточно. По_
этому первичный ключ данной таблицы состоит из двух столбцов: person_id и food.
• Таблица favorite_food содержит другой тип ограничения – ограниче_ ние внешнего ключа (foreign_key constraint). Оно ограничивает зна_чения столбца person_id таблицы favorite_food, позволяя ему вклю_ чать только те значения, которые есть в таблице person. При таком ограничении не получится включить в таблицу favorite_food строку, показывающую, что person_id 27 любит пиццу, если в таблице person нет строки со значением 27 для person_id.
Если при создании таблицы ограничение внешнего ключа не было указано, его можно добавить позже с помощью оператора alter table (изменить таблицу).
После выполнения выражения create table по команде describe будет выведено следующее:
42 Глава 2. Создание и заполнение базы данных
mysql> DESC favorite_food;+______________+______________________+______+_____+_________+_______+
| Field | Type | Null | Key | Default | Extra |
+______________+______________________+______+_____+_________+_______+
| | person_id | | | smallint(5) | unsigned | | | | PRI | | | | | | | |
| | food | | | varchar(20) | | | | | PRI | | | | | | |
+______________+______________________+______+_____+_________+_______+
Теперь, когда есть таблица, следующим логичным шагом будет доба_ вить в нее кое_какие данные.
Дата добавления: 2015-08-17; просмотров: 64 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Шаг 3: построение SQL_выражений управления схемой данных | | | Формирование числовых ключей |