Skip to content

Instantly share code, notes, and snippets.

@PolarNick239
Last active January 15, 2016 10:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PolarNick239/20cd572cbe162558f507 to your computer and use it in GitHub Desktop.
Save PolarNick239/20cd572cbe162558f507 to your computer and use it in GitHub Desktop.
DB Demo Fitness Centers
DROP VIEW IF EXISTS AreaUsers;
DROP VIEW IF EXISTS PersonActualContracts;
DROP TABLE IF EXISTS Contracts, ContractTypes, Persons, Areas, AreaTypes, Houses;
CREATE TABLE Houses (
HouseId SERIAL PRIMARY KEY NOT NULL,
Name VARCHAR(256) NOT NULL,
Address VARCHAR(1024) NOT NULL,
Phone VARCHAR(256) NOT NULL
);
CREATE TABLE AreaTypes (
AreaTypeId SERIAL PRIMARY KEY NOT NULL,
TypeName VARCHAR(256) NOT NULL
);
CREATE TABLE Areas (
AreaId SERIAL PRIMARY KEY NOT NULL,
HouseId INTEGER NOT NULL,
AreaTypeId INTEGER NOT NULL,
Description VARCHAR(1024),
FOREIGN KEY (HouseId) REFERENCES Houses (HouseId) ON DELETE CASCADE,
FOREIGN KEY (AreaTypeId) REFERENCES AreaTypes (AreaTypeId) ON DELETE CASCADE
);
CREATE TABLE Persons (
PersonId SERIAL PRIMARY KEY NOT NULL,
FullName VARCHAR(1024) NOT NULL,
Registered TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE ContractTypes (
ContractTypeId SERIAL PRIMARY KEY NOT NULL,
DaysNumber INTEGER NOT NULL,
AreaTypeIdRestriction INTEGER,
AreaIdRestriction INTEGER,
HouseIdRestriction INTEGER,
FOREIGN KEY (AreaTypeIdRestriction) REFERENCES AreaTypes (AreaTypeId) ON DELETE CASCADE,
FOREIGN KEY (AreaIdRestriction) REFERENCES Areas (AreaId) ON DELETE CASCADE,
FOREIGN KEY (HouseIdRestriction) REFERENCES Houses (HouseId) ON DELETE CASCADE
);
CREATE INDEX index_ct_area_type_id ON ContractTypes (AreaTypeIdRestriction);
CREATE INDEX index_ct_area_id ON ContractTypes (AreaIdRestriction);
CREATE INDEX index_ct_house_id ON ContractTypes (HouseIdRestriction);
CREATE TABLE Contracts (
ContractId SERIAL PRIMARY KEY NOT NULL,
ContractTypeId INTEGER NOT NULL,
PersonId INTEGER NOT NULL,
CreatedDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
ActualFrom TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (PersonId) REFERENCES Persons (PersonId) ON DELETE CASCADE,
FOREIGN KEY (ContractTypeId) REFERENCES ContractTypes (ContractTypeId) ON DELETE CASCADE
);
CREATE INDEX index_contracts_actual_from ON Contracts (ActualFrom);
CREATE OR REPLACE FUNCTION contract_restrictions_assertion()
RETURNS TRIGGER AS $$
DECLARE
AreaIdRestriction INT;
AreaTypeIdRestriction INT;
BEGIN
IF NOT EXISTS(SELECT AreaId
FROM Areas
INNER JOIN Houses ON Houses.HouseId = Areas.HouseId
WHERE (Houses.HouseId = NEW.HouseIdRestriction OR NEW.HouseIdRestriction ISNULL)
AND (AreaTypeId = NEW.AreaTypeIdRestriction OR NEW.AreaTypeIdRestriction ISNULL)
AND (AreaId = NEW.AreaIdRestriction OR NEW.AreaIdRestriction ISNULL))
THEN
RAISE EXCEPTION 'Conflicting ContractType restrictions: HouseIdRestriction=% AreaIdRestriction=% AreaTypeIdRestriction=%',
NEW.HouseIdRestriction, NEW.AreaIdRestriction, NEW.AreaTypeIdRestriction;
ELSE
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER UpdateContractTypesAssertion BEFORE INSERT OR UPDATE ON ContractTypes FOR EACH ROW EXECUTE PROCEDURE contract_restrictions_assertion();
CREATE OR REPLACE VIEW AreaUsers AS
SELECT
Areas.AreaId,
Areas.Description,
Houses.Name,
count(Contracts.PersonId) AS PeopleNumber
FROM Areas
INNER JOIN Houses ON Areas.HouseId = Houses.HouseId
CROSS JOIN Contracts
INNER JOIN ContractTypes ON Contracts.ContractTypeId = ContractTypes.ContractTypeId
WHERE (Areas.HouseId = ContractTypes.HouseIdRestriction OR ContractTypes.HouseIdRestriction ISNULL)
AND (Areas.AreaTypeId = ContractTypes.AreaTypeIdRestriction OR ContractTypes.AreaTypeIdRestriction ISNULL)
AND (Areas.AreaId = ContractTypes.AreaIdRestriction OR ContractTypes.AreaIdRestriction ISNULL)
AND (Contracts.ActualFrom < CURRENT_TIMESTAMP AND
CURRENT_TIMESTAMP < Contracts.ActualFrom + INTERVAL '1 day' * ContractTypes.DaysNumber)
GROUP BY Areas.AreaId, Houses.Name;
CREATE OR REPLACE VIEW UserAreas AS
SELECT
Contracts.PersonId,
Areas.AreaId,
Contracts.ContractId
FROM Areas
INNER JOIN Houses ON Areas.HouseId = Houses.HouseId
CROSS JOIN Contracts
INNER JOIN ContractTypes ON Contracts.ContractTypeId = ContractTypes.ContractTypeId
WHERE (Areas.HouseId = ContractTypes.HouseIdRestriction OR ContractTypes.HouseIdRestriction ISNULL)
AND (Areas.AreaTypeId = ContractTypes.AreaTypeIdRestriction OR ContractTypes.AreaTypeIdRestriction ISNULL)
AND (Areas.AreaId = ContractTypes.AreaIdRestriction OR ContractTypes.AreaIdRestriction ISNULL);
CREATE OR REPLACE VIEW PersonActualContracts AS
SELECT
Persons.PersonId,
Persons.FullName,
sum(CASE WHEN (Contracts.ActualFrom < CURRENT_TIMESTAMP AND
CURRENT_TIMESTAMP < Contracts.ActualFrom + INTERVAL '1 day' * ContractTypes.DaysNumber)
THEN 1
ELSE 0 END) AS ContractsNumber
FROM Persons
LEFT JOIN Contracts ON Persons.PersonId = Contracts.PersonId
LEFT JOIN ContractTypes ON Contracts.ContractTypeId = ContractTypes.ContractTypeId
GROUP BY Persons.PersonId, Persons.FullName;
CREATE OR REPLACE FUNCTION delete_users_without_contracts()
RETURNS VOID AS $$
BEGIN
DELETE FROM Persons
WHERE PersonId IN (SELECT PersonId
FROM PersonActualContracts
WHERE ContractsNumber = 0);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION area_intersection_intervals(person_id1 INTEGER, person_id2 INTEGER)
RETURNS TABLE(person_1_name VARCHAR, person_2_name VARCHAR, area_id INTEGER, area_name VARCHAR, house_name VARCHAR, from_date TIMESTAMP, to_date TIMESTAMP, contract_1_id INTEGER, contract_2_id INTEGER) AS $$
BEGIN
RETURN QUERY SELECT
p1.FullName,
p2.FullName,
area.AreaId,
area.Description,
house.Name,
GREATEST(c1.ActualFrom, c2.ActualFrom),
LEAST(c1.ActualFrom + INTERVAL '1 day' * ct1.DaysNumber,
c2.ActualFrom + INTERVAL '1 day' * ct2.DaysNumber),
c1.ContractId,
c2.ContractId
FROM UserAreas AS ua1 CROSS JOIN UserAreas AS ua2
INNER JOIN Persons AS p1 ON ua1.PersonId = p1.PersonId
INNER JOIN Persons AS p2 ON ua2.PersonId = p2.PersonId
INNER JOIN Contracts AS c1 ON ua1.ContractId = c1.ContractId
INNER JOIN ContractTypes AS ct1 ON c1.ContractTypeId = ct1.ContractTypeId
INNER JOIN Contracts AS c2 ON ua2.ContractId = c2.ContractId
INNER JOIN ContractTypes AS ct2 ON c2.ContractTypeId = ct2.ContractTypeId
INNER JOIN Areas AS area ON ua1.AreaId = area.AreaId
INNER JOIN Houses AS house ON area.HouseId = house.HouseId
WHERE ua1.PersonId = person_id1 AND ua2.PersonId = person_id2
AND ua1.AreaId = ua2.AreaId
AND
GREATEST(c1.ActualFrom, c2.ActualFrom) < LEAST(c1.ActualFrom + INTERVAL '1 day' * ct1.DaysNumber,
c2.ActualFrom + INTERVAL '1 day' * ct2.DaysNumber);
END;
$$ LANGUAGE plpgsql;
INSERT INTO Houses (Name, Address, Phone) VALUES
('Фитнес Хаус Престиж на Королева', 'пр. Королева, д. 7', '610-06-06'),
('Фитнес Хаус Престиж на Левашовском', 'пр. Левашовский, д. 13 (ул. Барочная, д. 10)', '610-06-06'),
('Фитнес Хаус Престиж на Хошимина', 'ул. Выборгское шоссе, д. 15', '610-06-06'),
('Фитнес Хаус Престиж на Гашека', 'ул. Я. Гашека, д. 17А', '610-06-06'),
('Фитнес Хаус Престиж на Пулковском', 'ул. Пулковское шоссе, д. 35', '610-06-06'),
('Фитнес Хаус на Стачек', 'пр. Стачек 47, лит. Ж', '610-06-06'),
('Фитнес Хаус в Гатчине', 'ул. Генерала Кныша, д. 2 А', '610-06-06'),
('Фитнес Хаус в Девяткино', 'ул. Главная, 60', '610-06-06'),
('Фитнес Хаус в Колпино', 'ул. Тверская, д. 36/3, лит. А', '610-06-06'),
('Фитнес Хаус в Лахте', 'пр. Лахтинский, д. 85', '610-06-06'),
('Фитнес Хаус в Петергофе', 'пр. Санкт-Петербургский, д. 60', '610-06-06'),
('Фитнес Хаус на Выборгской наб.', 'наб. Выборгская, д. 61', '610-06-06');
INSERT INTO AreaTypes (TypeName) VALUES
('бассейн'),
('тренажеры'),
('сумо'),
('гимнастика');
INSERT INTO Areas (HouseId, AreaTypeId, Description) VALUES
(2, 2, 'Пупер-Мега-Супер-тренажеры'),
(7, 1, 'Мега-Супер-бассейн'),
(12, 3, 'Гипер-Пупер-сумо'),
(9, 1, 'Супер-Супер-Супер-бассейн'),
(4, 3, 'Мега-Супер-сумо'),
(10, 4, 'Мега-Супер-гимнастика'),
(6, 4, 'Пупер-Пупер-гимнастика'),
(11, 2, 'Гипер-тренажеры'),
(12, 1, 'Вау-бассейн'),
(8, 2, 'Мега-тренажеры'),
(11, 3, 'Супер-Мега-сумо'),
(8, 3, 'Вау-сумо'),
(8, 4, 'Гипер-Вау-гимнастика'),
(8, 3, 'Гипер-сумо'),
(8, 4, 'Мега-Мега-гимнастика'),
(2, 1, 'Мега-бассейн'),
(8, 3, 'Вау-Мега-сумо'),
(4, 3, 'Супер-сумо'),
(4, 3, 'Гипер-Супер-Супер-сумо'),
(6, 1, 'Гипер-Вау-бассейн'),
(7, 3, 'Пупер-Мега-сумо'),
(8, 1, 'Супер-Вау-бассейн'),
(12, 2, 'Мега-тренажеры'),
(9, 2, 'Гипер-Супер-Пупер-тренажеры'),
(9, 2, 'Мега-Супер-тренажеры'),
(4, 2, 'Вау-Гипер-Супер-тренажеры'),
(5, 1, 'Супер-Супер-бассейн'),
(10, 1, 'Супер-Мега-Вау-бассейн'),
(8, 1, 'Пупер-Супер-бассейн'),
(9, 2, 'Гипер-Вау-Гипер-тренажеры'),
(8, 1, 'Мега-Пупер-Гипер-бассейн'),
(2, 1, 'Мега-Супер-бассейн'),
(5, 1, 'Вау-бассейн'),
(9, 1, 'Супер-Супер-Супер-бассейн'),
(12, 3, 'Гипер-сумо'),
(9, 4, 'Супер-Гипер-гимнастика'),
(8, 1, 'Вау-Гипер-Пупер-бассейн'),
(9, 2, 'Гипер-Вау-Гипер-тренажеры'),
(1, 4, 'Пупер-Супер-гимнастика'),
(1, 2, 'Пупер-тренажеры'),
(2, 4, 'Супер-гимнастика'),
(1, 3, 'Супер-Мега-Гипер-сумо'),
(11, 4, 'Супер-Мега-Вау-гимнастика'),
(8, 2, 'Гипер-Гипер-тренажеры'),
(5, 3, 'Гипер-Гипер-сумо'),
(1, 4, 'Мега-гимнастика'),
(3, 1, 'Мега-бассейн'),
(10, 4, 'Мега-Вау-Супер-гимнастика');
INSERT INTO Persons (FullName) VALUES
('Игорь Рожков'),
('Галина Киселёва'),
('Инесса Кондратьева'),
('Богдан Панфилов'),
('Лилия Коновалова'),
('Никита Уваров'),
('Артур Носов'),
('Илья Алексеев'),
('Андрей Морозов'),
('Руслан Константинов'),
('Альбина Вишнякова'),
('Милана Куликова'),
('Мила Александрова'),
('Назар Кузнецов'),
('Таисия (Тая, Тася) Бобылёва'),
('Степан Фадеев'),
('Василий Кудряшов'),
('Максим Некрасов'),
('Кира Гаврилова'),
('Антон Копылов'),
('Лина Белоусова'),
('Камилла Осипова'),
('Анжелика Сергеева'),
('Василиса Шарова'),
('Вячеслав Жданов'),
('Ангелина Фролова'),
('Даниил Крюков'),
('Анастасия Блинова'),
('Виталий Родионов'),
('Карина Титова'),
('Анатолий Белоусов'),
('Глеб Лукин'),
('Рустам Дементьев'),
('Денис Аксёнов'),
('Павел Шилов'),
('Александра Турова'),
('Земфира Прохорова'),
('Наталья Попова'),
('Леонид Горшков'),
('Рустам Моисеев'),
('Лилия Копылова'),
('Екатерина Галкина'),
('Ярослав Третьяков'),
('Роберт Шестаков'),
('Артём Игнатьев'),
('Валерия Большакова'),
('Леонид Аксёнов'),
('Алина Тимофеева'),
('Глеб Ковалёв'),
('Олеся Филиппова'),
('Ярослав Киселёв'),
('Снежана Самойлова'),
('Ярослав Шубин'),
('Эдуард Воронцов'),
('Павел Ермаков'),
('Даниил Лазарев'),
('Валерий Шаров'),
('Дмитрий Павлов'),
('Артём Беспалов'),
('Роберт Шубин'),
('Борис Савельев'),
('Илона Романова'),
('Антон Сысоев'),
('Фёдор Кузьмин'),
('Виолетта Рябова'),
('Гузель Лыткина'),
('Марк Дементьев'),
('Егор Лыткин'),
('Альбина Цветкова'),
('Андрей Третьяков'),
('Лолита Красильникова'),
('Максим Никифоров'),
('Тарас Жуков'),
('Святослав Вишняков'),
('Кирилл Устинов'),
('Егор Филиппов'),
('Азамат Селиверстов'),
('Инна Абрамова'),
('Давид Елисеев'),
('Герман Фокин'),
('Марианна Вишнякова'),
('Никита Мухин'),
('Анжелика Савина'),
('Снежана Евдокимова'),
('Антон Гаврилов'),
('Егор Калинин'),
('Арсений Фокин'),
('Анна Афанасьева'),
('Леся Горшкова'),
('Анатолий Казаков'),
('Илона Шестакова'),
('Людмила Исаева'),
('Борис Муравьёв'),
('Снежана Русакова'),
('Егор Сафонов'),
('Валентин Воронцов'),
('Антонина Павлова'),
('Ринат Колесников'),
('Эдуард Родионов'),
('Вячеслав Некрасов'),
('Зоя Хохлова'),
('Артур Назаров'),
('Ильдар Котов'),
('Марат Горшков'),
('Андрей Зыков'),
('Арсений Костин'),
('Арина Медведева'),
('Мила Фомина'),
('Земфира Рожкова'),
('Борис Копылов'),
('Нонна Виноградова'),
('Вероника Лукина'),
('Альберт Баранов'),
('Мила Семёнова'),
('Валерия Петрова'),
('Мадина Коновалова'),
('Роберт Соколов'),
('Дмитрий Аксёнов'),
('Ангелина Блохина'),
('Богдан Жданов'),
('Динара Калинина'),
('Ульяна Абрамова'),
('Георгий Панов'),
('Григорий Филиппов'),
('Борис Лазарев'),
('Инга Суворова'),
('Марат Веселов'),
('Лиана Веселова'),
('Альберт Петров'),
('Евгения Белова'),
('Тимофей Суханов'),
('Марианна Агафонова'),
('Карина Рогова'),
('Майя Панова'),
('Роман Жуков'),
('Лилия Михайлова'),
('Полина Ковалёва'),
('Лина Щукина'),
('Ульяна Никонова'),
('Виолетта Орехова'),
('Давид Костин'),
('Валерий Константинов'),
('Эльдар Семёнов'),
('Зинаида Муравьёва'),
('Нонна Шилова'),
('Яна Шилова'),
('Аркадий Мишин'),
('Марк Киселёв'),
('Григорий Воронов'),
('Василий Воронцов'),
('Тамара Михеева'),
('Григорий Пономарёв'),
('Герман Сидоров'),
('Ева Самсонова'),
('Эрик Русаков'),
('Майя Воронова'),
('Сергей Носов'),
('Евгения Якушева'),
('Виктор Лазарев'),
('Виолетта Шубина'),
('Инна Копылова'),
('Мария Кудряшова'),
('Нонна Пестова'),
('Денис Гаврилов'),
('Анастасия Рябова'),
('Камилла Ефремова'),
('Ева Жданова'),
('Карина Борисова'),
('Ася Антонова'),
('Алексей Степанов'),
('Зинаида Петрова'),
('Тарас Дмитриев'),
('Илья Ильин'),
('Марьяна Медведева'),
('Марта Копылова'),
('Роберт Юдин'),
('Диана Васильева'),
('Олеся Рогова'),
('Светлана Лобанова'),
('Наталья Фёдорова'),
('Антон Селиверстов'),
('Никита Субботин'),
('Полина Савина'),
('Фёдор Дьячков'),
('Григорий Воронов'),
('Нелли Гордеева'),
('Инесса Селезнёва'),
('Дина Дьячкова'),
('Татьяна Евсеева'),
('Арсений Соколов'),
('Зоя Денисова'),
('Раиса Зиновьева'),
('Яна Ефремова'),
('Алексей Терентьев'),
('Иван Андреев'),
('Эдуард Ефимов'),
('Юрий Горбачёв'),
('Роман Капустин'),
('Игорь Доронин'),
('Константин Ермаков'),
('Алиса Дмитриева'),
('Ринат Сысоев'),
('Каролина Лукина'),
('Леся Миронова'),
('Валерий Зуев'),
('Альберт Носов'),
('Альберт Беспалов'),
('Лолита Шарапова'),
('Лидия Шашкова'),
('Глеб Лаврентьев'),
('Назар Соболев'),
('Земфира Тихонова'),
('Рашид Ситников'),
('Мила Колобова'),
('Тимофей Кабанов'),
('Елизавета Сысоева'),
('Василиса Белозёрова'),
('Евгений Игнатьев'),
('Леонид Носков'),
('Виталия Суворова'),
('Юлия Михайлова'),
('Эльдар Русаков'),
('Людмила Новикова'),
('Раиса Куликова'),
('Антонина Федосеева'),
('Дина Дорофеева'),
('Азат Артемьев'),
('Никита Шестаков'),
('Варвара Носкова'),
('Эдуард Михеев'),
('Рашид Матвеев'),
('Иванна Смирнова'),
('Захар Александров'),
('Фёдор Евсеев'),
('Кирилл Мишин'),
('Валентина Попова'),
('Екатерина Алексеева'),
('Геннадий Кудрявцев'),
('Марта Ершова'),
('Кира Нестерова'),
('Лина Белоусова'),
('Владислав Филиппов'),
('Азат Соколов'),
('Ангелина Гусева'),
('Роза Ефимова'),
('Павел Савельев'),
('Карина Шестакова'),
('Вячеслав Калашников'),
('Семён Кузьмин'),
('Роман Кононов'),
('Богдан Суханов'),
('Наталья Кошелева'),
('Любовь Капустина'),
('Анатолий Туров'),
('Илья Морозов'),
('Азамат Лыткин'),
('Диана Назарова'),
('Никита Григорьев'),
('Жанна Веселова'),
('Евгения Медведева'),
('Семён Семёнов'),
('Ева Зайцева'),
('Альберт Моисеев'),
('Герман Белозёров'),
('Евгений Федосеев'),
('Снежана Авдеева'),
('Светлана Абрамова'),
('Ася Симонова'),
('Артур Никифоров'),
('Инесса Ковалёва'),
('Захар Русаков'),
('Святослав Фокин'),
('Каролина Ширяева'),
('Денис Игнатьев'),
('Марат Мишин'),
('Диана Осипова'),
('Марьяна Агафонова'),
('Алиса Виноградова'),
('Владислава (Влада) Лебедева'),
('Георгий Щербаков'),
('Алла Титова'),
('Георгий Ермаков'),
('Арсений Абрамов'),
('Нина Антонова'),
('Василий Большаков'),
('Роман Данилов'),
('Алсу Анисимова'),
('Эмиль Матвеев'),
('Марианна Архипова'),
('Ильдар Белов'),
('Владимир Кудряшов'),
('Аркадий Некрасов'),
('Кристина Михайлова'),
('Камилла Тимофеева'),
('Станислав Рыбаков'),
('Зарина Беляева'),
('Лина Моисеева'),
('Виолетта Рыбакова'),
('Олеся Бобылёва'),
('Марат Поляков'),
('Виолетта Зуева'),
('Артём Журавлёв'),
('Алсу Герасимова'),
('Тарас Красильников'),
('Марина Павлова'),
('Никита Герасимов'),
('Лариса Павлова'),
('Таисия (Тая, Тася) Брагина'),
('Ринат Одинцов'),
('Камилла Емельянова'),
('Борис Антонов'),
('Роза Осипова'),
('Вадим Борисов'),
('Ева Лихачёва'),
('Мадина Степанова'),
('Марианна Савельева'),
('Дмитрий Елисеев'),
('Ольга Аксёнова'),
('Вячеслав Шилов'),
('Виктор Савельев'),
('Владимир Фролов'),
('Иван Крылов'),
('Андрей Фёдоров'),
('Святослав Симонов'),
('Иван Куликов'),
('Татьяна Савина'),
('Милана Зайцева'),
('Тарас Новиков'),
('Николай Кузьмин'),
('Екатерина Анисимова'),
('Ирина Воронова'),
('Руслана Зиновьева'),
('Ярослав Устинов'),
('Майя Лебедева'),
('Зоя Владимирова'),
('Нонна Горбачёва'),
('Азат Симонов'),
('Полина Казакова'),
('Степан Блинов'),
('Камилла Юдина'),
('Ирина Кошелева'),
('Мирослава Мамонтова'),
('Регина Силина'),
('Юлия Русакова'),
('Александра Иванова'),
('Сергей Орлов'),
('Ярослав Кулагин'),
('Элина Лыткина'),
('Вадим Сазонов'),
('Богдан Щукин'),
('Кирилл Сергеев'),
('Ильдар Яковлев'),
('Василий Дорофеев'),
('Леонид Котов'),
('Кира Исакова'),
('Роберт Захаров'),
('Екатерина Елисеева'),
('Станислав Беляев'),
('Динара Самойлова'),
('Константин Большаков'),
('Артур Романов'),
('Оксана Чернова'),
('Григорий Данилов'),
('Нонна Киселёва'),
('Инна Зимина'),
('Марина Соколова'),
('Елена Соловьёва'),
('Роман Фёдоров'),
('Любовь Лихачёва'),
('Любовь Рожкова'),
('Александра Мартынова'),
('Владислав Копылов'),
('Константин Гущин'),
('Глеб Петухов'),
('Семён Кудряшов'),
('Георгий Вишняков'),
('Кирилл Карпов'),
('Даниил Денисов'),
('Дарья Евдокимова'),
('Александр Красильников'),
('Азат Павлов'),
('Тарас Артемьев'),
('Степан Мельников'),
('Борис Елисеев'),
('Леонид Одинцов'),
('Вадим Кошелев'),
('Никита Тетерин'),
('Анатолий Алексеев'),
('Владислава (Влада) Суханова'),
('Сабина Лыткина'),
('Елизавета Емельянова'),
('Азат Костин'),
('Эльдар Русаков'),
('Ольга Соловьёва'),
('Георгий Коновалов'),
('Сергей Киселёв'),
('Анатолий Воронцов'),
('Дина Николаева'),
('Даниил Лихачёв'),
('Елена Крюкова'),
('Геннадий Гурьев'),
('Элина Белозёрова'),
('Виталий Виноградов'),
('Алия Устинова'),
('Марк Павлов'),
('Дарья Константинова'),
('Евгений Зиновьев'),
('Егор Гришин'),
('Раиса Кириллова'),
('Арсений Лапин'),
('Варвара Григорьева'),
('Валерий Брагин'),
('Лилия Петрова'),
('Владислав Кошелев'),
('Тимофей Жданов'),
('Сабина Дмитриева'),
('Владимир Шилов'),
('Константин Костин'),
('Эдуард Суворов'),
('Валерий Капустин'),
('Алина Лапина'),
('Эдуард Константинов'),
('Станислав Шубин'),
('Эмиль Никонов'),
('Алевтина Фомина'),
('Алексей Зимин'),
('Фёдор Марков'),
('Дарья Тимофеева'),
('Марат Баранов'),
('Павел Мишин'),
('Кирилл Борисов'),
('Любовь Авдеева'),
('Василий Тимофеев'),
('Инесса Овчинникова'),
('Нина Белякова'),
('Николай Кудрявцев'),
('Леонид Владимиров'),
('Руслан Доронин'),
('Екатерина Баранова'),
('Зарина Романова'),
('Артур Казаков'),
('Геннадий Быков'),
('Лина Захарова'),
('Альберт Михеев'),
('Валентин Новиков'),
('Ульяна Беспалова'),
('Антон Комиссаров'),
('Светлана Григорьева'),
('Арсений Воронцов'),
('Владислав Карпов'),
('Рашид Марков'),
('Кира Калашникова'),
('Иван Родионов'),
('Валерия Игнатова'),
('Полина Суханова'),
('Ильдар Терентьев'),
('Мария Елисеева'),
('Алла Лазарева'),
('Гульнара (Гульназ, Гуля) Савельева'),
('Евгений Галкин'),
('Эдуард Шаров'),
('Альберт Киселёв'),
('Жанна Фёдорова'),
('Карина Савина'),
('Лариса Евдокимова'),
('Василиса Капустина'),
('Глеб Суханов'),
('Лидия Орлова'),
('Анна Моисеева'),
('Ася Субботина'),
('Даниил Бирюков'),
('Артём Харитонов'),
('Жанна Зайцева'),
('Борис Беляев'),
('Земфира Владимирова'),
('Варвара Копылова'),
('Алсу Игнатова'),
('Мирослава Елисеева'),
('Валерия Фёдорова'),
('Алия Игнатьева');
INSERT INTO ContractTypes (DaysNumber, AreaTypeIdRestriction, AreaIdRestriction, HouseIdRestriction) VALUES
(186, NULL, 42, NULL),
(365, NULL, 23, NULL),
(31, NULL, NULL, 10),
(365, NULL, NULL, NULL),
(365, NULL, 7, NULL),
(186, NULL, NULL, 11),
(186, NULL, NULL, NULL),
(31, 2, NULL, NULL),
(730, 4, NULL, NULL),
(186, NULL, 27, NULL),
(365, NULL, NULL, 2),
(730, NULL, 31, NULL),
(365, 1, NULL, NULL),
(186, NULL, NULL, 8),
(365, 4, NULL, NULL),
(365, NULL, 7, NULL),
(365, NULL, 19, NULL),
(186, NULL, 12, NULL),
(31, NULL, 43, NULL),
(730, NULL, NULL, NULL),
(365, NULL, NULL, 4),
(365, NULL, 13, NULL),
(365, NULL, 15, NULL),
(31, 3, NULL, NULL),
(365, NULL, NULL, 10),
(31, NULL, 9, NULL),
(31, 1, NULL, NULL),
(365, NULL, 15, NULL),
(365, NULL, NULL, NULL),
(365, NULL, NULL, 3),
(186, NULL, NULL, 8),
(186, NULL, 35, NULL),
(31, NULL, NULL, NULL),
(365, NULL, NULL, NULL),
(730, NULL, NULL, 7),
(365, NULL, 2, NULL),
(186, 2, NULL, NULL),
(31, NULL, 5, NULL),
(730, NULL, NULL, 10),
(31, NULL, NULL, 9),
(186, NULL, NULL, NULL),
(31, NULL, NULL, 11),
(186, 2, NULL, NULL),
(730, NULL, NULL, 10),
(365, NULL, NULL, 10),
(730, 4, NULL, NULL),
(31, NULL, 34, NULL),
(365, NULL, NULL, 1),
(730, NULL, 5, NULL),
(31, NULL, NULL, 4),
(31, NULL, NULL, NULL),
(730, NULL, NULL, 8),
(186, NULL, 34, NULL),
(365, NULL, NULL, 6),
(365, NULL, NULL, 8),
(365, NULL, NULL, 2),
(730, NULL, NULL, 6),
(365, NULL, NULL, 10),
(186, NULL, NULL, NULL),
(365, NULL, NULL, NULL),
(365, NULL, 36, NULL),
(730, NULL, NULL, 7),
(365, NULL, NULL, 4),
(365, NULL, NULL, 8),
(186, 1, NULL, NULL),
(186, NULL, 4, NULL),
(730, 2, NULL, NULL),
(31, 3, NULL, NULL),
(31, NULL, NULL, 1),
(186, NULL, NULL, NULL),
(365, NULL, NULL, 12),
(730, NULL, 48, NULL),
(186, NULL, NULL, 2),
(186, NULL, 36, NULL),
(31, NULL, NULL, NULL),
(365, NULL, NULL, 11),
(730, 2, NULL, NULL),
(730, NULL, NULL, 8),
(365, NULL, NULL, 4),
(365, NULL, NULL, NULL),
(730, 3, NULL, NULL),
(365, NULL, NULL, NULL),
(365, NULL, NULL, 10),
(31, NULL, NULL, NULL),
(186, NULL, 7, NULL),
(31, NULL, 22, NULL),
(31, NULL, 21, NULL),
(365, NULL, NULL, 6),
(730, 4, NULL, NULL),
(186, 3, NULL, NULL),
(31, NULL, 5, NULL),
(730, NULL, 35, NULL),
(730, NULL, NULL, 4),
(186, NULL, 40, NULL),
(730, NULL, 36, NULL),
(31, NULL, NULL, 10),
(31, 2, NULL, NULL),
(186, NULL, 47, NULL),
(186, NULL, NULL, 8),
(730, NULL, NULL, NULL),
(31, NULL, NULL, 7),
(186, NULL, NULL, 11),
(365, NULL, 11, NULL),
(730, NULL, NULL, NULL),
(31, NULL, 27, NULL),
(186, 4, NULL, NULL),
(730, NULL, NULL, 3),
(365, NULL, NULL, 1),
(730, NULL, 6, NULL),
(730, NULL, NULL, NULL),
(31, NULL, 26, NULL),
(365, NULL, NULL, 11),
(31, NULL, NULL, NULL),
(730, NULL, NULL, 12),
(186, NULL, NULL, 2),
(186, NULL, NULL, 12),
(730, NULL, NULL, 6),
(365, NULL, NULL, NULL),
(31, 4, NULL, NULL),
(365, NULL, NULL, 5),
(31, NULL, NULL, 9),
(365, NULL, NULL, 10),
(31, NULL, 17, NULL),
(31, NULL, 41, NULL),
(31, NULL, 12, NULL),
(730, NULL, NULL, 10),
(31, NULL, 1, NULL),
(186, 1, NULL, NULL),
(186, NULL, NULL, 5),
(365, NULL, NULL, 9),
(365, NULL, NULL, 2),
(365, 4, NULL, NULL),
(186, NULL, NULL, 12),
(730, NULL, NULL, NULL),
(730, NULL, NULL, 4),
(365, NULL, NULL, NULL),
(186, NULL, NULL, 5),
(365, NULL, NULL, 8),
(186, NULL, NULL, 9),
(730, NULL, NULL, 5),
(186, 1, NULL, NULL),
(365, NULL, NULL, 10),
(31, NULL, NULL, 2),
(365, NULL, NULL, 7);
INSERT INTO Contracts (ContractTypeId, PersonId) VALUES
(98, 1),
(92, 1),
(68, 2),
(98, 3),
(59, 3),
(122, 4),
(58, 5),
(71, 5),
(129, 5),
(115, 6),
(75, 6),
(5, 7),
(39, 7),
(83, 8),
(10, 8),
(122, 9),
(46, 9),
(1, 9),
(87, 10),
(68, 10),
(66, 10),
(109, 11),
(80, 12),
(37, 13),
(98, 13),
(4, 13),
(12, 14),
(43, 14),
(63, 14),
(86, 15),
(134, 16),
(41, 17),
(118, 17),
(118, 17),
(103, 18),
(50, 18),
(118, 19),
(115, 19),
(62, 19),
(135, 20),
(141, 21),
(133, 22),
(12, 23),
(97, 24),
(81, 25),
(29, 25),
(85, 26),
(67, 27),
(76, 27),
(71, 28),
(11, 29),
(44, 29),
(141, 30),
(73, 31),
(10, 31),
(41, 32),
(134, 33),
(96, 33),
(69, 33),
(102, 34),
(83, 35),
(35, 36),
(7, 37),
(100, 37),
(14, 38),
(22, 39),
(69, 39),
(12, 40),
(4, 41),
(29, 42),
(12, 42),
(84, 43),
(142, 43),
(5, 43),
(76, 44),
(129, 45),
(49, 46),
(118, 46),
(92, 46),
(113, 47),
(107, 47),
(79, 48),
(113, 48),
(80, 49),
(130, 49),
(44, 49),
(70, 50),
(144, 51),
(73, 51),
(11, 52),
(109, 53),
(29, 53),
(33, 54),
(31, 55),
(83, 55),
(51, 55),
(69, 56),
(84, 57),
(57, 57),
(46, 57),
(66, 58),
(97, 58),
(9, 58),
(23, 59),
(70, 59),
(36, 59),
(35, 60),
(1, 61),
(12, 61),
(89, 62),
(53, 62),
(62, 62),
(82, 63),
(103, 64),
(23, 65),
(87, 65),
(81, 65),
(47, 66),
(128, 66),
(64, 66),
(71, 67),
(106, 67),
(106, 67),
(99, 68),
(15, 69),
(125, 69),
(27, 70),
(41, 71),
(11, 72),
(39, 72),
(97, 73),
(71, 74),
(91, 75),
(115, 75),
(45, 76),
(104, 77),
(135, 77),
(39, 78),
(64, 78),
(87, 78),
(52, 79),
(28, 79),
(5, 80),
(69, 80),
(124, 80),
(81, 81),
(71, 82),
(90, 82),
(118, 82),
(41, 83),
(112, 84),
(127, 85),
(47, 85),
(53, 86),
(44, 87),
(66, 87),
(92, 87),
(96, 88),
(70, 88),
(40, 89),
(69, 89),
(3, 90),
(33, 90),
(123, 90),
(131, 91),
(137, 92),
(80, 92),
(43, 93),
(85, 94),
(36, 95),
(32, 96),
(124, 97),
(126, 97),
(123, 98),
(91, 98),
(84, 99),
(58, 99),
(129, 100),
(64, 101),
(5, 102),
(92, 102),
(110, 102),
(68, 103),
(14, 103),
(115, 103),
(144, 104),
(59, 104),
(112, 104),
(30, 105),
(77, 106),
(19, 106),
(109, 106),
(31, 107),
(69, 107),
(98, 107),
(32, 108),
(123, 108),
(117, 109),
(57, 109),
(78, 110),
(137, 110),
(51, 110),
(83, 111),
(4, 112),
(27, 112),
(119, 113),
(18, 114),
(16, 114),
(40, 114),
(40, 115),
(15, 115),
(20, 115),
(81, 116),
(60, 116),
(79, 116),
(29, 117),
(82, 117),
(7, 118),
(92, 118),
(72, 118),
(36, 119),
(104, 119),
(65, 119),
(46, 120),
(17, 120),
(118, 120),
(39, 121),
(138, 121),
(132, 122),
(32, 122),
(36, 123),
(49, 124),
(62, 124),
(57, 124),
(100, 125),
(36, 126),
(81, 126),
(45, 126),
(122, 127),
(7, 128),
(33, 128),
(41, 128),
(88, 129),
(52, 129),
(91, 129),
(143, 130),
(125, 130),
(3, 130),
(16, 131),
(63, 132),
(48, 132),
(109, 133),
(63, 134),
(98, 134),
(110, 134),
(63, 135),
(127, 135),
(59, 135),
(87, 136),
(115, 136),
(14, 137),
(50, 138),
(6, 139),
(125, 139),
(104, 140),
(103, 141),
(88, 142),
(78, 143),
(66, 143),
(58, 144),
(107, 144),
(119, 145),
(29, 146),
(70, 147),
(86, 147),
(87, 147),
(111, 148),
(9, 148),
(73, 149),
(59, 150),
(94, 150),
(61, 151),
(40, 151),
(45, 151),
(60, 152),
(121, 152),
(9, 152),
(5, 153),
(76, 154),
(91, 154),
(27, 155),
(97, 156),
(17, 156),
(121, 156),
(89, 157),
(49, 157),
(103, 158),
(94, 159),
(88, 160),
(133, 160),
(129, 160),
(87, 161),
(136, 162),
(73, 163),
(120, 163),
(132, 163),
(117, 164),
(47, 165),
(102, 165),
(49, 166),
(27, 167),
(50, 168),
(125, 169),
(106, 170),
(117, 170),
(119, 171),
(99, 171),
(120, 172),
(143, 173),
(10, 173),
(56, 173),
(78, 174),
(2, 175),
(129, 176),
(19, 176),
(21, 177),
(36, 177),
(31, 178),
(48, 179),
(38, 179),
(98, 180),
(90, 180),
(120, 180),
(18, 181),
(53, 181),
(96, 182),
(54, 183),
(86, 183),
(16, 183),
(8, 184),
(96, 184),
(142, 184),
(7, 185),
(15, 185),
(141, 185),
(141, 186),
(73, 187),
(88, 187),
(18, 187),
(45, 188),
(20, 189),
(11, 189),
(85, 189),
(30, 190),
(110, 191),
(23, 191),
(51, 192),
(97, 192),
(13, 192),
(91, 193),
(143, 194),
(4, 194),
(62, 195),
(60, 195),
(102, 196),
(40, 197),
(10, 197),
(48, 197),
(124, 198),
(8, 198),
(21, 198),
(121, 199),
(120, 199),
(30, 200),
(78, 201),
(110, 201),
(128, 202),
(44, 202),
(72, 203),
(83, 203),
(134, 204),
(117, 204),
(59, 204),
(95, 205),
(55, 205),
(24, 205),
(137, 206),
(133, 207),
(68, 208),
(27, 209),
(42, 209),
(69, 210),
(75, 210),
(84, 210),
(112, 211),
(59, 212),
(137, 212),
(143, 212),
(103, 213),
(86, 213),
(34, 214),
(78, 214),
(82, 215),
(83, 215),
(120, 216),
(86, 216),
(128, 216),
(129, 217),
(113, 217),
(78, 217),
(34, 218),
(65, 218),
(38, 218),
(89, 219),
(32, 219),
(117, 220),
(79, 220),
(9, 220),
(8, 221),
(62, 222),
(95, 222),
(61, 223),
(125, 223),
(99, 224),
(60, 224),
(37, 225),
(53, 225),
(67, 226),
(44, 226),
(92, 227),
(102, 228),
(36, 228),
(110, 229),
(43, 229),
(15, 229),
(97, 230),
(27, 231),
(32, 231),
(121, 232),
(46, 232),
(67, 232),
(10, 233),
(126, 233),
(43, 234),
(16, 234),
(119, 234),
(48, 235),
(113, 235),
(109, 235),
(106, 236),
(28, 236),
(14, 237),
(88, 237),
(121, 237),
(71, 238),
(95, 239),
(57, 239),
(11, 239),
(36, 240),
(44, 241),
(71, 241),
(143, 241),
(90, 242),
(132, 242),
(57, 242),
(22, 243),
(107, 243),
(82, 243),
(12, 244),
(111, 244),
(85, 245),
(31, 245),
(73, 246),
(115, 247),
(131, 248),
(74, 248),
(110, 249),
(63, 250),
(84, 251),
(117, 251),
(54, 251),
(44, 252),
(54, 252),
(115, 253),
(119, 253),
(32, 254),
(10, 254),
(110, 254),
(140, 255),
(69, 255),
(8, 255),
(131, 256),
(60, 256),
(25, 257),
(35, 257),
(135, 258),
(25, 259),
(14, 259),
(38, 259),
(63, 260),
(27, 261),
(97, 261),
(139, 261),
(19, 262),
(38, 263),
(16, 264),
(63, 265),
(39, 265),
(97, 265),
(45, 266),
(24, 266),
(114, 266),
(80, 267),
(35, 267),
(43, 268),
(69, 269),
(3, 269),
(62, 269),
(115, 270),
(34, 270),
(52, 271),
(138, 271),
(116, 272),
(143, 273),
(102, 273),
(34, 273),
(136, 274),
(40, 274),
(102, 274),
(81, 275),
(59, 276),
(105, 277),
(56, 277),
(107, 277),
(100, 278),
(71, 279),
(49, 279),
(13, 280),
(63, 280),
(92, 281),
(8, 281),
(98, 282),
(60, 283),
(98, 283),
(29, 284),
(14, 285),
(46, 285),
(97, 285),
(21, 286),
(16, 287),
(92, 287),
(17, 287),
(16, 288),
(22, 288),
(89, 289),
(79, 289),
(137, 290),
(84, 291),
(73, 292),
(124, 292),
(39, 293),
(113, 293),
(121, 294),
(13, 294),
(53, 294),
(99, 295),
(27, 295),
(37, 295),
(21, 296),
(128, 296),
(127, 297),
(107, 297),
(92, 297),
(25, 298),
(124, 298),
(90, 298),
(63, 299),
(135, 299),
(2, 300),
(131, 300),
(17, 300),
(67, 301),
(79, 301),
(90, 302),
(66, 303),
(116, 303),
(71, 303),
(107, 304),
(105, 304),
(94, 304),
(64, 305),
(103, 305),
(95, 305),
(51, 306),
(64, 307),
(14, 308),
(102, 308),
(23, 308),
(123, 309),
(10, 310),
(142, 310),
(12, 310),
(115, 311),
(29, 311),
(111, 311),
(30, 312),
(106, 313),
(91, 314),
(123, 315),
(25, 316),
(65, 317),
(77, 317),
(92, 317),
(54, 318),
(61, 318),
(15, 318),
(8, 319),
(33, 319),
(144, 320),
(56, 320),
(33, 321),
(64, 322),
(57, 322),
(25, 322),
(8, 323),
(87, 323),
(8, 324),
(139, 324),
(44, 324),
(3, 325),
(62, 326),
(37, 327),
(107, 327),
(38, 327),
(62, 328),
(99, 328),
(53, 329),
(43, 329),
(65, 329),
(52, 330),
(65, 330),
(43, 331),
(68, 332),
(67, 332),
(124, 333),
(33, 333),
(129, 334),
(65, 334),
(3, 334),
(50, 335),
(24, 335),
(117, 336),
(108, 336),
(13, 337),
(45, 337),
(57, 338),
(68, 338),
(55, 339),
(23, 339),
(25, 339),
(82, 340),
(21, 341),
(62, 342),
(40, 342),
(130, 343),
(109, 343),
(67, 344),
(93, 344),
(70, 345),
(5, 345),
(140, 346),
(109, 346),
(13, 346),
(59, 347),
(75, 347),
(118, 347),
(31, 348),
(76, 348),
(62, 349),
(139, 349),
(54, 350),
(85, 350),
(22, 350),
(116, 351),
(2, 351),
(19, 351),
(68, 352),
(122, 352),
(19, 353),
(115, 354),
(96, 354),
(124, 354),
(57, 355),
(129, 355),
(28, 355),
(82, 356),
(124, 356),
(33, 356),
(73, 357),
(40, 357),
(127, 358),
(88, 359),
(112, 360),
(14, 360),
(50, 360),
(15, 361),
(83, 361),
(18, 362),
(78, 362),
(84, 363),
(73, 363),
(24, 364),
(118, 365),
(48, 365),
(43, 365),
(102, 366),
(17, 367),
(30, 367),
(138, 368),
(124, 369),
(38, 369),
(133, 369),
(88, 370),
(89, 370),
(130, 370),
(38, 371),
(70, 371),
(16, 371),
(12, 372),
(34, 373),
(84, 373),
(81, 374),
(115, 374),
(113, 375),
(63, 375),
(68, 376),
(107, 376),
(41, 376),
(3, 377),
(45, 377),
(101, 377),
(60, 378),
(121, 379),
(2, 380),
(92, 380),
(34, 381),
(32, 381),
(56, 382),
(9, 382),
(41, 382),
(143, 383),
(114, 384),
(108, 385),
(63, 385),
(21, 385),
(19, 386),
(13, 386),
(20, 387),
(131, 387),
(41, 387),
(42, 388),
(2, 389),
(67, 389),
(67, 390),
(94, 390),
(63, 391),
(131, 392),
(16, 392),
(117, 392),
(123, 393),
(103, 394),
(98, 395),
(112, 395),
(139, 396),
(127, 396),
(30, 396),
(36, 397),
(97, 398),
(118, 398),
(105, 398),
(5, 399),
(73, 399),
(141, 400),
(12, 401),
(97, 401),
(109, 401),
(41, 402),
(68, 402),
(28, 403),
(140, 403),
(102, 404),
(70, 404),
(52, 405),
(75, 405),
(18, 406),
(114, 406),
(86, 406),
(102, 407),
(22, 408),
(50, 408),
(18, 409),
(27, 410),
(37, 411),
(143, 412),
(117, 412),
(123, 412),
(141, 413),
(87, 413),
(142, 413),
(133, 414),
(135, 414),
(98, 415),
(40, 415),
(56, 415),
(38, 416),
(114, 416),
(123, 416),
(109, 417),
(28, 417),
(130, 417),
(98, 418),
(126, 418),
(26, 418),
(74, 419),
(44, 420),
(102, 420),
(69, 421),
(139, 422),
(1, 423),
(138, 424),
(2, 425),
(39, 425),
(100, 425),
(52, 426),
(49, 426),
(109, 427),
(85, 427),
(34, 427),
(120, 428),
(23, 429),
(96, 429),
(3, 430),
(34, 430),
(82, 431),
(46, 432),
(129, 433),
(16, 433),
(80, 434),
(22, 434),
(133, 435),
(43, 435),
(63, 436),
(74, 437),
(35, 437),
(2, 438),
(68, 439),
(117, 440),
(124, 441),
(127, 441),
(17, 441),
(140, 442),
(24, 442),
(32, 442),
(123, 443),
(7, 443),
(108, 444),
(70, 445),
(37, 445),
(76, 446),
(19, 447),
(131, 448),
(66, 448),
(105, 449),
(53, 450),
(127, 450),
(122, 450),
(28, 451),
(44, 451),
(26, 452),
(103, 452),
(30, 453),
(44, 453),
(13, 454),
(120, 454),
(74, 454),
(22, 455),
(14, 455),
(65, 455),
(23, 456),
(46, 457),
(33, 458),
(128, 458),
(63, 458),
(139, 459),
(94, 459),
(7, 459),
(31, 460),
(4, 461),
(95, 461),
(55, 462),
(68, 462),
(69, 463),
(15, 463),
(38, 464),
(40, 465),
(135, 465),
(87, 466),
(61, 466),
(121, 467),
(49, 467),
(66, 468),
(92, 469),
(44, 470),
(93, 470),
(117, 471),
(36, 471),
(110, 471),
(113, 472),
(24, 472),
(62, 473),
(86, 473),
(34, 474),
(26, 474),
(39, 475),
(91, 476),
(75, 476),
(67, 477),
(112, 477),
(104, 477),
(76, 478),
(90, 479),
(125, 479),
(50, 480);
-- Bad contract type
INSERT INTO ContractTypes (DaysNumber, AreaTypeIdRestriction, AreaIdRestriction, HouseIdRestriction) VALUES
(186, 3, 1, 2);
-- Deleting Person without actual contracts
SELECT COUNT(PersonId) FROM Persons;
SELECT * From PersonActualContracts WHERE PersonId = 480;
SELECT * FROM Contracts WHERE PersonId = 480;
UPDATE Contracts SET ActualFrom = ActualFrom - interval '10 years' WHERE PersonId = 480;
SELECT * FROM Contracts WHERE PersonId = 480;
SELECT * From PersonActualContracts WHERE PersonId = 480;
SELECT delete_users_without_contracts();
SELECT COUNT(PersonId) FROM Persons;
#
# Copyright (c) 2016, Nikolay Polyarnyi
# All rights reserved.
#
from collections import defaultdict
import random
random.seed(239)
families = ['Смирнов', 'Иванов', 'Кузнецов', 'Соколов', 'Попов', 'Лебедев', 'Козлов', 'Новиков', 'Морозов', 'Петров', 'Волков', 'Соловьёв', 'Васильев', 'Зайцев', 'Павлов', 'Семёнов', 'Голубев', 'Виноградов', 'Богданов', 'Воробьёв', 'Фёдоров', 'Михайлов', 'Беляев', 'Тарасов', 'Белов', 'Комаров', 'Орлов', 'Киселёв', 'Макаров', 'Андреев', 'Ковалёв', 'Ильин', 'Гусев', 'Титов', 'Кузьмин', 'Кудрявцев', 'Баранов', 'Куликов', 'Алексеев', 'Степанов', 'Яковлев', 'Сорокин', 'Сергеев', 'Романов', 'Захаров', 'Борисов', 'Королёв', 'Герасимов', 'Пономарёв', 'Григорьев', 'Лазарев', 'Медведев', 'Ершов', 'Никитин', 'Соболев', 'Рябов', 'Поляков', 'Цветков', 'Данилов', 'Жуков', 'Фролов', 'Журавлёв', 'Николаев', 'Крылов', 'Максимов', 'Сидоров', 'Осипов', 'Белоусов', 'Федотов', 'Дорофеев', 'Егоров', 'Матвеев', 'Бобров', 'Дмитриев', 'Калинин', 'Анисимов', 'Петухов', 'Антонов', 'Тимофеев', 'Никифоров', 'Веселов', 'Филиппов', 'Марков', 'Большаков', 'Суханов', 'Миронов', 'Ширяев', 'Александров', 'Коновалов', 'Шестаков', 'Казаков', 'Ефимов', 'Денисов', 'Громов', 'Фомин', 'Давыдов', 'Мельников', 'Щербаков', 'Блинов', 'Колесников', 'Карпов', 'Афанасьев', 'Власов', 'Маслов', 'Исаков', 'Тихонов', 'Аксёнов', 'Гаврилов', 'Родионов', 'Котов', 'Горбунов', 'Кудряшов', 'Быков', 'Зуев', 'Третьяков', 'Савельев', 'Панов', 'Рыбаков', 'Суворов', 'Абрамов', 'Воронов', 'Мухин', 'Архипов', 'Трофимов', 'Мартынов', 'Емельянов', 'Горшков', 'Чернов', 'Овчинников', 'Селезнёв', 'Панфилов', 'Копылов', 'Михеев', 'Галкин', 'Назаров', 'Лобанов', 'Лукин', 'Беляков', 'Потапов', 'Некрасов', 'Хохлов', 'Жданов', 'Наумов', 'Шилов', 'Воронцов', 'Ермаков', 'Дроздов', 'Игнатьев', 'Савин', 'Логинов', 'Сафонов', 'Капустин', 'Кириллов', 'Моисеев', 'Елисеев', 'Кошелев', 'Костин', 'Горбачёв', 'Орехов', 'Ефремов', 'Исаев', 'Евдокимов', 'Калашников', 'Кабанов', 'Носков', 'Юдин', 'Кулагин', 'Лапин', 'Прохоров', 'Нестеров', 'Харитонов', 'Агафонов', 'Муравьёв', 'Ларионов', 'Федосеев', 'Зимин', 'Пахомов', 'Шубин', 'Игнатов', 'Филатов', 'Крюков', 'Рогов', 'Кулаков', 'Терентьев', 'Молчанов', 'Владимиров', 'Артемьев', 'Гурьев', 'Зиновьев', 'Гришин', 'Кононов', 'Дементьев', 'Ситников', 'Симонов', 'Мишин', 'Фадеев', 'Комиссаров', 'Мамонтов', 'Носов', 'Гуляев', 'Шаров', 'Устинов', 'Вишняков', 'Евсеев', 'Лаврентьев', 'Брагин', 'Константинов', 'Корнилов', 'Авдеев', 'Зыков', 'Бирюков', 'Шарапов', 'Никонов', 'Щукин', 'Дьячков', 'Одинцов', 'Сазонов', 'Якушев', 'Красильников', 'Гордеев', 'Самойлов', 'Князев', 'Беспалов', 'Уваров', 'Шашков', 'Бобылёв', 'Доронин', 'Белозёров', 'Рожков', 'Самсонов', 'Мясников', 'Лихачёв', 'Буров', 'Сысоев', 'Фомичёв', 'Русаков', 'Стрелков', 'Гущин', 'Тетерин', 'Колобов', 'Субботин', 'Фокин', 'Блохин', 'Селиверстов', 'Пестов', 'Кондратьев', 'Силин', 'Меркушев', 'Лыткин', 'Туров']
female_names = ['Алевтина', 'Александра', 'Алёна', 'Алина', 'Алиса', 'Алия', 'Алла', 'Алсу', 'Альбина', 'Анастасия', 'Ангелина', 'Анжелика', 'Анна', 'Антонина', 'Арина', 'Ася', 'Валентина', 'Валерия', 'Варвара', 'Василиса', 'Вера', 'Вероника', 'Виктория', 'Виолетта', 'Виталия', 'Владислава (Влада)', 'Галина', 'Гузель', 'Гульнара (Гульназ, Гуля)', 'Дана', 'Дарья', 'Диана', 'Дина', 'Динара', 'Ева', 'Евгения', 'Екатерина', 'Елена', 'Елизавета', 'Жанна', 'Зарина', 'Земфира', 'Зинаида', 'Зоя', 'Иванна', 'Изабелла', 'Илона', 'Инга', 'Инесса', 'Инна', 'Ирина', 'Камилла', 'Кира', 'Карина', 'Каролина', 'Кристина', 'Ксения', 'Лариса', 'Леся', 'Лиана', 'Лидия', 'Лилия', 'Лина', 'Лолита', 'Любовь', 'Людмила', 'Мадина', 'Майя', 'Маргарита', 'Марина', 'Мария', 'Марта', 'Мила', 'Милана', 'Милена', 'Марианна', 'Мирослава', 'Марьяна', 'Надежда', 'Наталья', 'Нина', 'Нелли', 'Нонна', 'Оксана', 'Олеся', 'Ольга', 'Полина', 'Раиса', 'Регина', 'Римма', 'Роза', 'Руслана', 'Сабина', 'Светлана', 'Снежана', 'Софья', 'Таисия (Тая, Тася)', 'Тамара', 'Татьяна', 'Ульяна', 'Элина', 'Эльвира', 'Юлия', 'Яна']
male_names = ['Азамат', 'Азат', 'Александр', 'Алексей', 'Альберт', 'Анатолий', 'Андрей', 'Антон', 'Артём', 'Аркадий', 'Арсений', 'Артур', 'Богдан', 'Борис', 'Валерий', 'Валентин', 'Василий', 'Вадим', 'Владимир', 'Владислав', 'Виктор', 'Виталий', 'Вячеслав', 'Григорий', 'Глеб', 'Герман', 'Георгий', 'Геннадий', 'Давид', 'Даниил', 'Дмитрий', 'Денис', 'Евгений', 'Егор', 'Захар', 'Иван', 'Игорь', 'Ильдар', 'Илья', 'Кирилл', 'Константин', 'Леонид', 'Марат', 'Марк', 'Максим', 'Михаил', 'Назар', 'Никита', 'Николай', 'Олег', 'Павел', 'Пётр', 'Рашид', 'Ринат', 'Роберт', 'Роман', 'Руслан', 'Рустам', 'Святослав', 'Станислав', 'Степан', 'Сергей', 'Семён', 'Тарас', 'Тимофей', 'Филипп', 'Фёдор', 'Эрик', 'Эльдар', 'Эмиль', 'Эдуард', 'Юрий', 'Ярослав']
houses_data = [('Фитнес Хаус Престиж на Королева', 'пр. Королева, д. 7', '610-06-06'),
('Фитнес Хаус Престиж на Левашовском', 'пр. Левашовский, д. 13 (ул. Барочная, д. 10)', '610-06-06'),
('Фитнес Хаус Престиж на Хошимина', 'ул. Выборгское шоссе, д. 15', '610-06-06'),
('Фитнес Хаус Престиж на Гашека', 'ул. Я. Гашека, д. 17А', '610-06-06'),
('Фитнес Хаус Престиж на Пулковском', 'ул. Пулковское шоссе, д. 35', '610-06-06'),
('Фитнес Хаус на Стачек', 'пр. Стачек 47, лит. Ж', '610-06-06'),
('Фитнес Хаус в Гатчине', 'ул. Генерала Кныша, д. 2 А', '610-06-06'),
('Фитнес Хаус в Девяткино', 'ул. Главная, 60', '610-06-06'),
('Фитнес Хаус в Колпино', 'ул. Тверская, д. 36/3, лит. А', '610-06-06'),
('Фитнес Хаус в Лахте', 'пр. Лахтинский, д. 85', '610-06-06'),
('Фитнес Хаус в Петергофе', 'пр. Санкт-Петербургский, д. 60', '610-06-06'),
('Фитнес Хаус на Выборгской наб.', 'наб. Выборгская, д. 61', '610-06-06')]
houses_n = len(houses_data)
areas_n = houses_n * 4
people_n = areas_n * 10
contract_types_n = areas_n * 3
max_person_contracts_n = 3
area_types = ['бассейн', 'тренажеры', 'сумо', 'гимнастика']
areas_prefix = ['Супер-', 'Пупер-', 'Гипер-', 'Мега-', 'Вау-']
houses_areas = defaultdict(lambda: [])
areas_type = {}
data_script = open('data_new.sql', 'w')
print = lambda s: data_script.write(s + '\n')
print('INSERT INTO Houses (Name, Address, Phone) VALUES')
for i, (name, address, phone) in enumerate(houses_data):
print(' (\'{}\', \'{}\', \'{}\'){}'.format(name, address, phone, ';' if i == houses_n - 1 else ','))
print('')
print('INSERT INTO AreaTypes (TypeName) VALUES')
for i, area_type in enumerate(area_types):
print(' (\'{}\'){}'.format(area_type, ';' if i == len(area_types) - 1 else ','))
print('')
print('INSERT INTO Areas (HouseId, AreaTypeId, Description) VALUES')
for i in range(areas_n):
house_id = random.randint(1, houses_n)
area_type_id = random.randint(0, len(area_types) - 1)
area_type = area_types[area_type_id]
description_length = random.randint(1, 3)
description = ''
for j in range(description_length):
description += areas_prefix[random.randint(0, len(areas_prefix) - 1)]
description += area_type
print(' ({}, {}, \'{}\'){}'.format(house_id, area_type_id + 1, description, ';' if i == areas_n - 1 else ','))
area_id = i + 1
houses_areas[house_id].append(area_id)
areas_type[area_id] = area_type_id
print('')
print('INSERT INTO Persons (FullName) VALUES')
for i in range(people_n):
family_id = random.randint(0, len(families) - 1)
family = families[family_id]
is_female = random.randint(0, 1)
if is_female:
name_id = random.randint(0, len(female_names) - 1)
name = female_names[name_id]
family += 'а'
else:
name_id = random.randint(0, len(male_names) - 1)
name = male_names[name_id]
fullname = name + ' ' + family
print(' (\'{}\'){}'.format(fullname, ';' if i == people_n - 1 else ','))
print('')
print('INSERT INTO ContractTypes (DaysNumber, AreaTypeIdRestriction, AreaIdRestriction, HouseIdRestriction) VALUES')
for i in range(contract_types_n):
days_number = [31, 6 * 31, 365, 2 * 365][random.randint(0, 3)]
restriction_type = random.randint(0, 2 ** 3 - 1)
house_restriction = None
area_restriction = None
area_type_restriction = None
if restriction_type % 2 == 1:
house_restriction = random.randint(1, houses_n)
if (restriction_type / 2) % 2 == 1:
if house_restriction is not None:
house_areas = houses_areas[house_restriction]
area_restriction = house_areas[random.randint(0, len(house_areas) - 1)]
else:
area_restriction = random.randint(1, areas_n)
if (restriction_type / 4) % 2 == 1:
if area_restriction is not None:
area_type_restriction = areas_type[area_restriction]
else:
area_type_restriction = random.randint(1, len(area_types))
if area_type_restriction is None:
area_type_restriction = 'NULL'
if area_restriction is None:
area_restriction = 'NULL'
if house_restriction is None:
house_restriction = 'NULL'
print(' ({}, {}, {}, {}){}'.format(days_number, area_type_restriction, area_restriction, house_restriction,
';' if i == contract_types_n - 1 else ','))
print('')
print('INSERT INTO Contracts (ContractTypeId, PersonId) VALUES')
for i in range(people_n):
contracts_n = random.randint(1, max_person_contracts_n)
for j in range(contracts_n):
contract_type_id = random.randint(1, contract_types_n)
print(' ({}, {}){}'.format(contract_type_id, i + 1,
';' if (i == people_n - 1 and j == contracts_n - 1) else ','))
data_script.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment