Вы находитесь на странице: 1из 8

Практическая работа №2

СОЗДАНИЕ И ЗАПОЛНЕНИЕ БАЗЫ ДАННЫХ

1. Откройте консоль The MySQL Command Line Shell в меню пуск.

2. Для создания базы данных используется команда create database. Создайте базу
данных «Students» с помощью выражения:

create database Students;


3. После создания базы данных выберите новую БД с помощью выражения:

use Students

4. Немного поразмыслив о данных, описывающих человека, можно получить вот что:

• Имя, фамилия (name)


• Пол (gender)
• Дата рождения (birth date)
• Адрес (address)
• Любимое блюдо (favorite foods)
Разумеется, список не полный, но этого пока достаточно. Следующий шаг – дать
столбцам имена и назначить типы данных. В таблице показан первый вариант.
Столбец Тип Допустимые
значения
Name Varchar(40)
Gender Char(1) M, F
Birth_date Date
Address Varchar(100)
Favorite_foods Varchar(200)
Столбцы name, address и favorite_foods типа varchar позволяют записывать информацию
в свободной форме. В столбце gender (пол) допускается только один символ, M (М) или F (Ж).
Столбцу birth_date (дата рождения) назначен тип date, поскольку точное время не требуется.
Опираясь на концепцию нормализации (что является процессом обеспечения отсутствия
в БД дублирующихся (кроме внешних ключей) или составных столбцов), при повторном
анализе столбцов таблицы возникают следующие соображения:
• Столбец name на самом деле является составным объектом, включающим имя и
фамилию.
• Поскольку несколько человек могут иметь одинаковые имя, пол, дату рождения и т. д.,
в таблице person нет столбцов, гарантирующих уникальность.
• Столбец address – тоже составной объект, включающий улицу, город, штат/область,
страну и почтовый индекс.
• Столбец favorite_foods – это список, содержащий 0, 1 или более не зависимых
элементов. Было бы лучше вынести эти данные в отдельную таблицу, включающую внешний
ключ к таблице person, чтобы обозначить человека, к которому приписано конкретное блюдо.
В табл. 2 можно увидеть нормализованный вариант таблицы person после учета всех
этих замечаний.
Теперь, когда у таблицы person есть первичный ключ (person_id), гарантирующий
уникальность, следующим шагом будет построение таблицы favorite_food, включающей
внешний ключ к таблице person. Результат показан в табл. 3.
Столбцы person_id и food (блюдо) образуют первичный ключ таблицы favorite_food.
Столбец person_id также является внешним ключом к таблице person.
Таблица 2 — Таблица Person, второе приближение
Допустимые
Столбец Тип
значения
Person_id Smallint (unsigned)
First_name Varchar(20)
Last_name Varchar(20)
Gender Char(1) M, F
Birth_date Date
address Varchar(100)
City Varchar(20)
Country Varchar(20)
Таблица 3 — Таблица Favorite_food (любимое блюдо)
Столбец Тип
Person_id Smallint (unsigned)
Food Varchar(20)
Как и данные целого типа, данные с плавающей точкой могут быть определены как
unsigned (беззнаковые), но это только предотвращает хранение в столбце отрицательных чисел,
но не изменяет диапазон данных, которые могут быть сохранены в столбце.
5. Теперь, по завершении проектирования двух таблиц для размещения персональной
информации, следующим шагом является формирование SQL выражений для создания таблиц
в БД. Для создания таблицы используется команда create table. Вот выражение для создания
таблицы «person»:
CREATE TABLE person
(person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
gender CHAR(1),
birth_date DATE,
address VARCHAR(100),
city VARCHAR(20),
country VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id)
);

После обработки выражения create table сервер MySQL возвращает сообщение «Query
OK, 0 rows affected» (Запрос выполнен без ошибок, 0 строк подверглось обработке), что говорит
об отсутствии синтаксических ошибок в выражении.
В этом выражении должно быть понятно все, кроме последнего элемента. При описании
таблицы необходимо сообщить серверу БД, какой столбец или столбцы будут играть роль
первичного ключа таблицы. Осуществляется это путем создания ограничения (constraint) для
таблицы. В описание таблицы можно добавить ограничение одного из нескольких типов.
Данное ограничение является ограничением первичного ключа (primary key constraint). Оно
накладывается на столбец person_id и получает имя pk_person. Обычно начинают имена
ограничений первичного ключа с приставки pk, а затем указывают имя таблицы, чтобы при
просмотре списка таких ограничений было ясно, чем каждое из них является.
Говоря об ограничении, упомянем еще один тип, который мог бы быть полезным для
таблицы person. В табл. 2 был добавлен третий столбец для допустимых значений
определенных столбцов (например 'M' и 'F' для столбца gender). Это другой тип ограничения –
проверочное ограничение (check constraint), ограничивающее допустимые значения кон-
кретного столбца. MySQL позволяет вводить в описание столбца проверочное ограничение:
gender CHAR(1) CHECK (gender IN ('M','F')),
На большинстве серверов БД проверочные ограничения работают со ответствующим
образом, а сервер MySQL допускает описание проверочных ограничений, но не выполняет их
проверку. Но MySQL предоставляет другой символьный тип данных – enum (перечисление),
который вводит проверочное ограничение в описание типа. Вот как это выглядело бы для
описания столбца gender:
gender ENUM('M','F'),
Вот как выглядит создание таблицы person с введением типов данных enum для столбца
gender:
CREATE TABLE person
(person_id SMALLINT UNSIGNED,
fname VARCHAR(20),
lname VARCHAR(20),
gender ENUM('M','F'),
birth_date DATE,
address VARCHAR(30),
city VARCHAR(20),
state VARCHAR(20),
country VARCHAR(20),
postal_code VARCHAR(20),
CONSTRAINT pk_person PRIMARY KEY (person_id)
);
Если требуется убедиться, что таблица person действительно существует, можно
использовать команду describe (описать) (или desc для краткости) и посмотреть описание
таблицы:
DESC person;

Смысл столбцов 1 и 2 результата выполнения выражения describe очевиден. Столбец 3


показывает, можно ли пропустить тот или иной столбец при вводе данных в таблицу.
Четвертый столбец показывает, участвует ли столбец в формировании какого-либо ключа
(первичного или внешнего). В данном случае столбец person_id отмечен как первичный ключ.
Столбец 5 показывает, будет ли определенный столбец заполнен значением по умолчанию в
случае, если он пропущен при вводе данных в таблицу. Для столбца person_id значением по
умолчанию является 0, хотя оно будет использовано только один раз, поскольку каждая строка
таблицы person должна содержать в данном столбце уникальное значение (это первичный
ключ). Шестой столбец (названный Extra (дополнительно)) содержит любую другую
информацию, относящуюся к столбцу.
6. Теперь, после создания таблицы person, следующий шаг – создать таблицу
favorite_food
7. Это очень похоже на выражение create table для таблицы person, за несколькими
исключениями:
• Поскольку у человека может быть несколько любимых блюд (что и стало причиной
создания данной таблицы), одного столбца person_id для обеспечения уникальности в таблице
недостаточно. Поэтому первичный ключ данной таблицы состоит из двух столбцов: person_id и
food.
• Таблица favorite_food содержит другой тип ограничения – ограничение внешнего
ключа (foreignkey constraint). Оно ограничивает значения столбца person_id таблицы
favorite_food, позволяя ему включать только те значения, которые есть в таблице person. При
таком ограничении не получится включить в таблицу favorite_food строку, показывающую, что
person_id 27 любит пиццу, если в таблице person нет строки со значением 27 для person_id.
После выполнения выражения create table по команде describe будет выведено
следующее:
Самостоятельное задание:
1) Создать новую базу данных — Banks. Даная БД будет моделировать банк, об-
служивающий небольшой населенный пункт.
2) В это БД будет следующий набор таблиц

Account Конкретный счет, открытый для конкретного клиента


Customer Физическое или юридическое лицо, известные банку
Department Группа сотрудников банка, реализующая определенную банковскую функцию
Employee Человек, работающий в банке
Product Услуга банка, предлагаемая клиентам
Product_type Группа функционально схожих услуг
Transaction Изменение баланса счета

3) Создайте таблицу Product_type


Столбец Тип Ключ Имя Ключа
product_type_cd Varchar(10) PRIMARY pk_ product_type_cd
name Varchar(50) — —

4) Создайте таблицу Product


Столбец Тип Ключ Имя Ключа
product_cd Varchar(10) PRIMARY pk_ product_cd
product_type_cd Varchar(10) foreign fk_ product_type_cd
name Varchar(50) — —

5) Создайте таблицу Customer


Столбец Тип Ключ Имя Ключа
cust_id INT UNSIGNED PRIMARY pk_ cust_id
cust_type_cd enum(‘I’,’B’) — —
FullName Varchar(60) — —
address Varchar(60) — —

6) Создайте таблицу Department


Столбец Тип Ключ Имя Ключа
dept_id SMALLINT UNSIGNED PRIMARY pk_ dept_id
name Varchar(30) — —

7) Создайте таблицу Employee


Столбец Тип Ключ Имя Ключа
emp_id SMALLINT UNSIGNED PRIMARY pk_ emp_id
dept_id SMALLINT UNSIGNED foreign fk_ dept_id
fname Varchar(20) — —
lname Varchar(20) — —
start_date Date — —
end_date Date — —

8) Создайте таблицу Account

Столбец Тип Ключ Имя Ключа


account_id INT UNSIGNED PRIMARY pk_ account_id
avail_balance Float (10,2) — —
cust_id INT UNSIGNED foreign fk_a_ cust_id
open_date Date — —
open_emp_id SMALLINT UNSIGNED foreign fk_a_emp_id
product_cd Varchar(10) foreign fk_ product_cd
status enum(‘ACTIVE’,’CLOSED’,’FROZEN’) — —

9) Создайте таблицу Transaction


Столбец Тип Ключ Имя Ключа
txn_id INT UNSIGNED PRIMARY pk_ txn_id
account_id INT UNSIGNED foreign fk_ account_id
amount double(10,2) — —
txn_date datetime — —
txn_type_cd enum(‘DBT’,’CDT’) — —

Вам также может понравиться