Изучаем SQL. №16. Внешние ключи и связи между таблицами. Один ко многим.

Изучаем SQL
Итак, представим ситуацию, что у нас есть база данных какого-то предприятия. И есть две таблицы. Первая — ФИО рабочего, вторя — их профессии. Допустим, каждый рабочий работает на какой-то профессии, то есть у него одна профессия, но людей с такой профессией в его цеху 100. Отсюда следует, что у рабочего есть одна профессия, а у профессии много рабочих.
Чтобы не запутать вас еще сильнее, давайте приступим к созданию базы данных и ее наполнению.
Запускаем наш сервер, если вы работаете из-под windows. В работе с базой данных MySQL я по прежнему использую HeidiSQL, что и вам советую.

Создадим базу данных завод (zavod). А в ней две таблицы: рабочий (worker) — (id,name,p_id) и профессия (prof)- (id,name).
Код worker:

CREATE TABLE `worker` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(50) NOT NULL DEFAULT '0',
	`p_id` INT(11) NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`)
)
ENGINE=InnoDB
;

Изучаем SQL.

Код prof:

CREATE TABLE `prof` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(50) NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`)
)
ENGINE=InnoDB
;

Изучаем SQL.

Теперь сделаем внешний ключ и дадим ему название FK1. Нам нужно, чтобы p_id у рабочих ссылалось на id в таблице профессий.
Для этого изменим таблицу worker:

ALTER TABLE `worker` ADD CONSTRAINT `FK1` FOREIGN KEY (`p_id`) REFERENCES `prof` (`id`);

Изучаем SQL.

А теперь заполним табличку профессий:

INSERT INTO prof (name) VALUES ('Уборщица');
INSERT INTO prof (name) VALUES ('Сварщик');
INSERT INTO prof (name) VALUES ('Слесарь');

И табличку рабочих, указав имя и id профессии:

INSERT INTO worker (name,p_id) VALUES ('Нина',1);
INSERT INTO worker (name,p_id) VALUES ('Олег',3);
INSERT INTO worker (name,p_id) VALUES ('Игорь',2);
INSERT INTO worker (name,p_id) VALUES ('Иван',2);
INSERT INTO worker (name,p_id) VALUES ('Сергей',3);
INSERT INTO worker (name,p_id) VALUES ('Ольга',1);

Ну что ж, таблицы мы заполнили, время проверять правильность наших действий:

SELECT w.name as имя,p.name as профессия FROM worker w LEFT JOIN prof p ON w.p_id = p.id;

Изучаем SQL.

Любишь играть в страйкбол или охотиться, а может ты опытный турист? Тогда скорей купи оптическое снаряжение в инетрнет магазине тактического снаряжения Bullpup. Большой выбор и доступные цены.

1 thought on “Изучаем SQL. №16. Внешние ключи и связи между таблицами. Один ко многим.

  1. Привет, админ.
    Всё проработал.
    Хотелось бы продолжения банкета в том же стиле, о внутренних процедурах и тому подобному. как, что, зачем, и когда и как применять.
    Спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *