Пример создания базы данных из нескольких таблиц на SQL
Пример создания базы данных на SQL в MS SQL. База данных состоит из пяти таблиц: Клиенты, Валюта, Вид_вклада, Вид_кредита, Вклады, Кредиты. Хочу отметить то, что все названия полей и названия таблиц написаны на русском языке.
Связи между таблицами:
1) таблица Клиенты связана с таблицами Вкладов и Кредитов по полю ид.
2) таблицы Вклады и Кредиты связаны соответственно с Вид_вклада и Вид_кредита по полю вид_вклада и вид_кредита соответственно.
3) таблицы Вид_вклада и Вид_кредита связаны с Валютой по полю ид_валюта.
В этой БД Вы не сможете найти связи между таблицами, поскольку они будут связаны через триггеры. В следующей записи (см. Пример использования триггеров SQL для поддержания ссылочной целостности) я опубликую все триггеры, а также примеры процедур, функций и представлений.
CREATE TABLE Клиенты
(ид INTEGER NOT NULL PRIMARY KEY,
ф CHAR(30) NOT NULL,
и CHAR(30) NOT NULL,
о CHAR(30) NOT NULL,
адрес CHAR(100) NOT NULL,
н_паспорт INTEGER NOT NULL,
и_паспорт text NOT NULL,
телефон CHAR(10) NOT NULL,
фото image);
CREATE TABLE Валюта
(ид_валюта INTEGER NOT NULL PRIMARY KEY,
название CHAR (20));
CREATE TABLE Вид_вклада
(ид_вклада INTEGER NOT NULL PRIMARY KEY,
название CHAR (30),
процент DECIMAL,
мпроцент DECIMAL,
пополнение BIT,
автопролонгация BIT,
ид_валюта INTEGER,
мин_сумма INTEGER,
срок INTEGER);
CREATE TABLE Вид_кредита
(ид_кредита INTEGER NOT NULL PRIMARY KEY,
название CHAR (30) NOT NULL,
процент DECIMAL NOT NULL,
ид_валюта INTEGER NOT NULL,
срок INTEGER NOT NULL,
максумма INTEGER NOT NULL,
комиссия DECIMAL NOT NULL);
CREATE TABLE Вклады
(ид_вклад INTEGER NOT NULL PRIMARY KEY,
ид_клиент INTEGER NOT NULL,
дата_открытия DATETIME NOT NULL,
дата_закрытия DATETIME NOT NULL,
сумма INTEGER NOT NULL,
вид_вклада INTEGER NOT NULL);
CREATE TABLE Кредиты
(ид_кредит INTEGER NOT NULL PRIMARY KEY,
ид_клиент INTEGER NOT NULL,
дата_открытия DATETIME NOT NULL,
дата_закрытия DATETIME NOT NULL,
сумма INTEGER NOT NULL,
вид_кредита INTEGER NOT NULL);
go
— Пример заполнения таблиц реальными данными
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0001, ‘Сазонова’, ‘Екатерина’, ‘Викторовна’, ‘Москва, ул. Гагарина, д.4, кв. 7’, 4605, ‘Выдан 2ым отделом УФМС по Москве 15.02.1999, номер: 454513’, ‘9852010020’, BulkColumn FROM OPENROWSET(BULK ‘C:/1.bmp’, SINGLE_BLOB) as ImageLoad;
— Хочется отметить то, что таблица Клиенты содержит поле image и мы прямо в MS SQL добавляем фотографии в базу данных. К сожалению, через запрос SELECT вам не удастся посмотреть картинку. Для этого нужно более сложные средства
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0002, ‘Кадыков’, ‘Валентин’, ‘Игорович’, ‘Москва, ул. Пушкина, д.1, кв. 12’, 4606, ‘Выдан 3ым отделом УФМС по Москве 11.05.1996, номер: 414013’, ‘9266010320’, BulkColumn FROM OPENROWSET(BULK ‘C:/2.bmp’, SINGLE_BLOB) as ImageLoad;
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0003, ‘Зимин’, ‘Егор’, ‘Васильевич’, ‘Москва, ул. Набережная, д.15, кв. 125’, 4504, ‘Выдан 1ым отделом УФМС по Москве 5.11.2005, номер: 512064’, ‘9057013820’, BulkColumn FROM OPENROWSET(BULK ‘C:/3.bmp’, SINGLE_BLOB) as ImageLoad;
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0004, ‘Патрин’, ‘Антон’, ‘Александрович’, ‘Москва, ул. Победы, д.53, кв. 36’, 4502, ‘Выдан 5ым отделом УФМС по Москве 28.03.2002, номер: 480934’, ‘9160902211’, BulkColumn FROM OPENROWSET(BULK ‘C:/4.bmp’, SINGLE_BLOB) as ImageLoad;
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0005, ‘Осташков’, ‘Алексей’, ‘Петрович’, ‘Москва, ул. Красная Знамя, д.10, кв. 76’, 4501, ‘Выдан 2ым отделом УФМС по Москве 23.08.1994, номер: 400293’, ‘9098738721’, BulkColumn FROM OPENROWSET(BULK ‘C:/5.bmp’, SINGLE_BLOB) as ImageLoad;
INSERT INTO Клиенты (ид, ф, и, о, адрес, н_паспорт, и_паспорт, телефон, фото)
select 0006, ‘Волкина’, ‘Татьяна’, ‘Николаевна’, ‘Москва, ул. Пронина, д.3, кв. 54’, 4507, ‘Выдан 4ым отделом УФМС по Москве 12.10.2003, номер: 470752’, ‘9258743291’, BulkColumn FROM OPENROWSET(BULK ‘C:/6.bmp’, SINGLE_BLOB) as ImageLoad;
INSERT INTO Валюта (ид_валюта, название) VALUES (1, ‘Рубли’);
INSERT INTO Валюта (ид_валюта, название) VALUES (2, ‘Доллары’);
INSERT INTO Валюта (ид_валюта, название) VALUES (3, ‘Евро’);
go
INSERT INTO Вид_вклада (ид_вклада, название, процент, мпроцент, пополнение, автопролонгация, ид_валюта, мин_сумма, срок)
VALUES (001, ‘Базовый’, 9.5, 2.5, 1, 1, 1, 3000, 91);
INSERT INTO Вид_вклада (ид_вклада, название, процент, мпроцент, пополнение, автопролонгация, ид_валюта, мин_сумма, срок)
VALUES (002, ‘Лидер’, 10, 2, 0, 1, 1, 5000, 181);
INSERT INTO Вид_вклада (ид_вклада, название, процент, мпроцент, пополнение, автопролонгация, ид_валюта, мин_сумма, срок)
VALUES (003, ‘Почетный клиент’, 11.25, 3, 1, 0, 1, 3000, 31);
INSERT INTO Вид_вклада (ид_вклада, название, процент, мпроцент, пополнение, автопролонгация, ид_валюта, мин_сумма, срок)
VALUES (004, ‘Прогресс’, 10.75, 1.5, 1, 1, 1, 5000, 181);
INSERT INTO Вид_кредита (ид_кредита, название, процент, ид_валюта, срок, максумма, комиссия)
VALUES (01, ‘Деньги сейчас’, 20, 1, 560, 500000, 3.5);
INSERT INTO Вид_кредита (ид_кредита, название, процент, ид_валюта, срок, максумма, комиссия)
VALUES (02, ‘Просто кредит’, 21, 1, 365, 300000, 2.5);
go
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10001, 0001, ‘2010-07-19’, ‘2011-01-15’, 25000, 001);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10002, 0002, ‘2010-05-19’, ‘2011-02-17’, 35000, 002);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10003, 0003, ‘2010-05-12’, ‘2011-05-12’, 47000, 003);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10004, 0004, ‘2011-01-19’, ‘2011-07-19’, 40000, 003);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10005, 0005, ‘2010-12-10’, ‘2011-05-10’, 20000, 004);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10006, 0006, ‘2010-12-08’, ‘2011-12-08’, 50000, 002);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10007, 0001, ‘2010-11-18’, ‘2011-11-18’, 21000, 004);
INSERT INTO Вклады (ид_вклад, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_вклада)
VALUES (10008, 0006, ‘2011-03-12’, ‘2011-09-12’, 33000, 004);
INSERT INTO Кредиты (ид_кредит, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_кредита)
VALUES (1001, 0003, ‘2010-11-19’, ‘2012-11-19’, 75000, 01);
INSERT INTO Кредиты (ид_кредит, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_кредита)
VALUES (1002, 0002, ‘2009-03-12’, ‘2011-03-12’, 35000, 02);
INSERT INTO Кредиты (ид_кредит, ид_клиент, дата_открытия, дата_закрытия, сумма, вид_кредита)
VALUES (1003, 0002, ‘2010-11-10’, ‘2012-11-10’, 50000, 01);
go
— Примеры запросов к нашей базе данных:
SELECT * FROM Клиенты — введет всех клиентов с полной информацией
— Пример более сложного запроса к нашей базе данных:
SELECT ид, ф, сумма
FROM Клиенты, Вклады
WHERE ид=ид_клиент
— Этот запрос выведет ид, фамилию и суммы вкладов всех клиентов у которых есть какие-то вклады. Если бы мы не написали условие WHERE ид=ид_клиент, то получили бы очень много значений, т.к. каждая запись из первой таблицы вывелась поочередно с каждой записью из второй таблицы