1+ /* Создаем схему*/
2+ DROP SCHEMA IF EXISTS stepik CASCADE;
3+ CREATE SCHEMA IF NOT EXISTS stepik;
4+
5+ -- -AUTHOR
6+ DROP TABLE IF EXISTS stepik .author CASCADE;
7+ CREATE TABLE IF NOT EXISTS stepik .author (
8+ author_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
9+ name_author TEXT
10+ );
11+
12+ INSERT INTO stepik .author (name_author)
13+ VALUES (' Булгаков М.А.' ),
14+ (' Достоевский Ф.М.' ),
15+ (' Есенин С.А.' ),
16+ (' Пастернак Б.Л.' ),
17+ (' Лермонтов М.Ю.' );
18+
19+ -- -GENRE
20+ DROP TABLE IF EXISTS stepik .genre CASCADE;
21+ CREATE TABLE IF NOT EXISTS stepik .genre (
22+ genre_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
23+ name_genre TEXT
24+ );
25+
26+ INSERT INTO stepik .genre (name_genre)
27+ VALUES (' Роман' ),
28+ (' Поэзия' ),
29+ (' Приключения' );
30+
31+ -- -BOOK
32+ DROP TABLE IF EXISTS stepik .book CASCADE;
33+ CREATE TABLE IF NOT EXISTS stepik .book (
34+ book_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
35+ title TEXT ,
36+ author_id BIGINT NOT NULL ,
37+ genre_id BIGINT ,
38+ price DECIMAL (8 , 2 ),
39+ amount INT ,
40+ CONSTRAINT " FK_book_author"
41+ FOREIGN KEY (author_id) REFERENCES stepik .author (author_id) ON DELETE CASCADE ,
42+ CONSTRAINT " FK_book_genre"
43+ FOREIGN KEY (genre_id) REFERENCES stepik .genre (genre_id) ON DELETE SET NULL
44+ );
45+
46+ INSERT INTO stepik .book (title, author_id, genre_id, price, amount)
47+ VALUES (' Мастер и Маргарита' , 1 , 1 , 670 .99 , 3 ),
48+ (' Белая гвардия' , 1 , 1 , 540 .50 , 5 ),
49+ (' Идиот' , 2 , 1 , 460 .00 , 10 ),
50+ (' Братья Карамазовы' , 2 , 1 , 799 .01 , 2 ),
51+ (' Игрок' , 2 , 1 , 480 .50 , 10 ),
52+ (' Стихотворения и поэмы' , 3 , 2 , 650 .00 , 15 ),
53+ (' Черный человек' , 3 , 2 , 570 .20 , 6 ),
54+ (' Лирика' , 4 , 2 , 518 .99 , 2 );
55+
56+ -- -CITY
57+ DROP TABLE IF EXISTS stepik .city CASCADE;
58+ CREATE TABLE IF NOT EXISTS stepik .city (
59+ city_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
60+ name_city TEXT ,
61+ days_delivery INT
62+ );
63+
64+ INSERT INTO stepik .city (name_city, days_delivery)
65+ VALUES (' Москва' , 5 ),
66+ (' Санкт-Петербург' , 3 ),
67+ (' Владивосток' , 12 );
68+
69+ -- -CLIENT
70+ CREATE EXTENSION IF NOT EXISTS citext;
71+ DROP DOMAIN IF EXISTS email;
72+ CREATE DOMAIN email AS citext
73+ CHECK ( value ~
74+ ' ^[a-zA-Z0-9.!#$%&' ' *+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\. [a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
75+
76+ DROP TABLE IF EXISTS stepik .client CASCADE;
77+ CREATE TABLE IF NOT EXISTS stepik .client
78+ (
79+ client_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
80+ name_client TEXT ,
81+ city_id BIGINT ,
82+ email email,
83+ CONSTRAINT " FK_client_city"
84+ FOREIGN KEY (city_id) REFERENCES stepik .city (city_id)
85+ );
86+
87+ INSERT INTO stepik .client (name_client, city_id, email)
88+ VALUES (' Баранов Павел' , 3 , ' baranov@test' ),
89+ (' Абрамова Катя' , 1 , ' abramova@test' ),
90+ (' Семенонов Иван' , 2 , ' semenov@test' ),
91+ (' Яковлева Галина' , 1 , ' yakovleva@test' );
92+
93+ -- -BUY
94+ DROP TABLE IF EXISTS stepik .buy CASCADE;
95+ CREATE TABLE IF NOT EXISTS stepik .buy
96+ (
97+ buy_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
98+ buy_description TEXT ,
99+ client_id BIGINT DEFAULT (NULL ),
100+ CONSTRAINT " FK_buy_client"
101+ FOREIGN KEY (client_id) REFERENCES stepik .client (client_id)
102+ );
103+
104+ INSERT INTO stepik .buy (buy_description, client_id)
105+ VALUES (' Доставка только вечером' , 1 ),
106+ (NULL , 3 ),
107+ (' Упаковать каждую книгу по отдельности' , 2 ),
108+ (NULL , 1 );
109+
110+
111+ -- -BUY_BOOK
112+ DROP TABLE IF EXISTS stepik .buy_book CASCADE;
113+ CREATE TABLE IF NOT EXISTS stepik .buy_book (
114+ buy_book_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
115+ buy_id BIGINT ,
116+ book_id BIGINT ,
117+ amount INT ,
118+ CONSTRAINT " FK_buy_book_buy"
119+ FOREIGN KEY (buy_id) REFERENCES stepik .buy (buy_id),
120+ CONSTRAINT " FK_buy_book_book"
121+ FOREIGN KEY (book_id) REFERENCES stepik .book (book_id)
122+ );
123+
124+ INSERT INTO stepik .buy_book (buy_id, book_id, amount)
125+ VALUES (1 , 1 , 1 ),
126+ (1 , 7 , 2 ),
127+ (2 , 8 , 2 ),
128+ (3 , 3 , 2 ),
129+ (3 , 2 , 1 ),
130+ (3 , 1 , 1 ),
131+ (4 , 5 , 1 );
132+
133+
134+ -- -STEP
135+ DROP TABLE IF EXISTS stepik .step CASCADE;
136+ CREATE TABLE IF NOT EXISTS stepik .step (
137+ step_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
138+ name_step TEXT
139+ );
140+
141+ INSERT INTO stepik .step (name_step)
142+ VALUES (' Оплата' ),
143+ (' Упаковка' ),
144+ (' Транспортировка' ),
145+ (' Доставка' );
146+
147+ -- -BUY_STEP
148+ DROP TABLE IF EXISTS stepik .buy_step CASCADE;
149+ CREATE TABLE IF NOT EXISTS stepik .buy_step (
150+ buy_step_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
151+ buy_id INT ,
152+ step_id INT ,
153+ date_step_beg DATE ,
154+ date_step_end DATE ,
155+ CONSTRAINT " FK_buy_step_buy"
156+ FOREIGN KEY (buy_id) REFERENCES stepik .buy (buy_id),
157+ CONSTRAINT " FK_buy_step_step"
158+ FOREIGN KEY (step_id) REFERENCES stepik .step (step_id)
159+ );
160+
161+ INSERT INTO stepik .buy_step (buy_id, step_id, date_step_beg, date_step_end)
162+ VALUES (1 , 1 , ' 2020-02-20' , ' 2020-02-20' ),
163+ (1 , 2 , ' 2020-02-20' , ' 2020-02-21' ),
164+ (1 , 3 , ' 2020-02-22' , ' 2020-03-07' ),
165+ (1 , 4 , ' 2020-03-08' , ' 2020-03-08' ),
166+ (2 , 1 , ' 2020-02-28' , ' 2020-02-28' ),
167+ (2 , 2 , ' 2020-02-29' , ' 2020-03-01' ),
168+ (2 , 3 , ' 2020-03-02' , NULL ),
169+ (2 , 4 , NULL , NULL ),
170+ (3 , 1 , ' 2020-03-05' , ' 2020-03-05' ),
171+ (3 , 2 , ' 2020-03-05' , ' 2020-03-06' ),
172+ (3 , 3 , ' 2020-03-06' , ' 2020-03-10' ),
173+ (3 , 4 , ' 2020-03-11' , NULL ),
174+ (4 , 1 , ' 2020-03-20' , NULL ),
175+ (4 , 2 , NULL , NULL ),
176+ (4 , 3 , NULL , NULL ),
177+ (4 , 4 , NULL , NULL );
178+
179+ -- -BUY_ARCHIVE
180+ DROP TABLE IF EXISTS stepik .buy_archive CASCADE;
181+ CREATE TABLE IF NOT EXISTS stepik .buy_archive (
182+ buy_archive_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
183+ buy_id INT ,
184+ client_id INT ,
185+ book_id INT ,
186+ date_payment DATE ,
187+ price DECIMAL ,
188+ amount INT ,
189+ CONSTRAINT " FK_buy_archive_client"
190+ FOREIGN KEY (client_id) REFERENCES stepik .client (client_id),
191+ CONSTRAINT " FK_buy_archive_book"
192+ FOREIGN KEY (book_id) REFERENCES stepik .book (book_id)
193+ );
194+
195+ INSERT INTO stepik .buy_archive (buy_id, client_id, book_id, date_payment, price, amount)
196+ VALUES (2 , 1 , 1 , ' 2019-02-21' , 670 .60 , 2 ),
197+ (2 , 1 , 3 , ' 2019-02-21' , 450 .90 , 1 ),
198+ (1 , 2 , 2 , ' 2019-02-10' , 520 .30 , 2 ),
199+ (1 , 2 , 4 , ' 2019-02-10' , 780 .90 , 3 ),
200+ (1 , 2 , 3 , ' 2019-02-10' , 450 .90 , 1 ),
201+ (3 , 4 , 4 , ' 2019-03-05' , 780 .90 , 4 ),
202+ (3 , 4 , 5 , ' 2019-03-05' , 480 .90 , 2 ),
203+ (4 , 1 , 6 , ' 2019-03-12' , 650 .00 , 1 ),
204+ (5 , 2 , 1 , ' 2020-03-18' , 670 .60 , 2 ),
205+ (5 , 2 , 4 , ' 2020-03-18' , 780 .90 , 1 );
0 commit comments