1
+ -- MANUFACTURER
2
+
3
+ CREATE TABLE manufacturer (
4
+ id SERIAL ,
5
+ name VARCHAR (50 ) NOT NULL ,
6
+ num_employees INT ,
7
+ CONSTRAINT pk_manufacturer PRIMARY KEY (id)
8
+ );
9
+
10
+ SELECT * FROM manufacturer;
11
+
12
+ INSERT INTO manufacturer (name, num_employees)
13
+ VALUES (' Ford' , 29000 );
14
+
15
+ INSERT INTO manufacturer (name, num_employees)
16
+ VALUES (' Toyota' , 45000 );
17
+
18
+ -- MODEL
19
+
20
+ CREATE TABLE model (
21
+ id SERIAL ,
22
+ name VARCHAR (50 ) NOT NULL ,
23
+ id_manufacturer INT ,
24
+ CONSTRAINT pk_model PRIMARY KEY (id),
25
+ CONSTRAINT fk_model_manufacturer FOREIGN KEY (id_manufacturer) REFERENCES manufacturer(id)
26
+ );
27
+
28
+ SELECT * FROM model;
29
+
30
+ INSERT INTO model (name, id_manufacturer)
31
+ VALUES (' Mondeo' , 1 );
32
+
33
+ INSERT INTO model (name, id_manufacturer)
34
+ VALUES (' Fiesta' , 1 );
35
+
36
+ INSERT INTO model (name, id_manufacturer)
37
+ VALUES (' Prius' , 2 );
38
+
39
+ -- VERSION
40
+
41
+ CREATE TABLE version (
42
+ id SERIAL ,
43
+ name VARCHAR (50 ) NOT NULL ,
44
+ engine VARCHAR (50 ),
45
+ price NUMERIC ,
46
+ cc NUMERIC (2 ,1 ),
47
+ id_model INT ,
48
+ CONSTRAINT pk_version PRIMARY KEY (id),
49
+ CONSTRAINT fk_version_model FOREIGN KEY (id_model) REFERENCES model(id) ON UPDATE set null ON DELETE set null
50
+ );
51
+
52
+ SELECT * FROM version;
53
+
54
+ INSERT INTO version (name, engine, price, cc, id_model) VALUES (' Basic' , ' Diesel 4C' , 30000 , 1 .9 , 2 );
55
+ INSERT INTO version (name, engine, price, cc, id_model) VALUES (' Medium' , ' Diesel 5C' , 50000 , 2 .2 , 2 );
56
+ INSERT INTO version (name, engine, price, cc, id_model) VALUES (' Advance' , ' Diesel 6C V' , 80000 , 3 .2 , 2 );
57
+
58
+ INSERT INTO version (name, engine, price, cc, id_model) VALUES (' Sport' , ' Gasolina 4C' , 50000 , 2 .1 , 3 );
59
+ INSERT INTO version (name, engine, price, cc, id_model) VALUES (' Sport advance' , ' Gasolina 8C' , 90000 , 3 .2 , 3 );
60
+
61
+ -- EXTRA
62
+ CREATE TABLE extra (
63
+ id SERIAL ,
64
+ name VARCHAR (50 ) NOT NULL ,
65
+ description VARCHAR (300 ),
66
+ CONSTRAINT pk_extra PRIMARY KEY (id)
67
+ );
68
+
69
+ CREATE TABLE extra_version (
70
+ id_version INT ,
71
+ id_extra INT ,
72
+ price NUMERIC NOT NULL CHECK (price >= 0 ),
73
+ CONSTRAINT pk_extra_version PRIMARY KEY (id_version, id_extra),
74
+ CONSTRAINT fk_version_extra FOREIGN KEY (id_version) REFERENCES version(id) ON UPDATE cascade ON DELETE cascade ,
75
+ CONSTRAINT fk_extra_version FOREIGN KEY (id_extra) REFERENCES extra(id) ON UPDATE cascade ON DELETE cascade
76
+ );
77
+
78
+ INSERT INTO extra (name, description)
79
+ VALUES (' Techo solar' , ' Techo solar flamante lorem ipsum dolor ...' );
80
+
81
+ INSERT INTO extra (name, description)
82
+ VALUES (' Climatizador' , ' lorem ipsum dolor ...' );
83
+
84
+ INSERT INTO extra (name, description)
85
+ VALUES (' WiFi' , ' lorem ipsum dolor ...' );
86
+
87
+ INSERT INTO extra (name, description)
88
+ VALUES (' Frigorífico' , ' lorem ipsum dolor ...' );
89
+
90
+ SELECT * FROM extra;
91
+
92
+ SELECT * FROM extra_version;
93
+
94
+ -- Ford Mondeo Basic techo solar
95
+ INSERT INTO extra_version VALUES (1 , 1 , 3000 );
96
+ -- Ford Mondeo Basic climatizador
97
+ INSERT INTO extra_version VALUES (1 , 2 , 1000 );
98
+ -- Ford Mondeo Basic WiFi
99
+ INSERT INTO extra_version VALUES (1 , 3 , 500 );
100
+
101
+ -- Ford Mondeo Advance techo solar
102
+ INSERT INTO extra_version VALUES (3 , 1 , 3300 );
103
+ -- Ford Mondeo Advance climatizador
104
+ INSERT INTO extra_version VALUES (3 , 2 , 1200 );
105
+ -- Ford Mondeo Advance WiFi
106
+ INSERT INTO extra_version VALUES (3 , 3 , 500 );
107
+
108
+ CREATE TABLE employee (
109
+ id SERIAL ,
110
+ name VARCHAR (30 ),
111
+ nif VARCHAR (9 ) NOT NULL UNIQUE,
112
+ phone VARCHAR (9 ),
113
+ CONSTRAINT pk_employee PRIMARY KEY (id)
114
+ );
115
+
116
+ INSERT INTO employee(name, nif, phone) VALUES (' Bob' , ' 123456789' , ' 111111111' );
117
+ INSERT INTO employee(name, nif, phone) VALUES (' Mike' , ' 123456781' , ' 111111112' );
118
+ SELECT * FROM employee;
119
+
120
+ CREATE TABLE customer (
121
+ id SERIAL ,
122
+ name VARCHAR (30 ),
123
+ email VARCHAR (50 ) NOT NULL UNIQUE,
124
+ CONSTRAINT pk_customer PRIMARY KEY (id)
125
+ );
126
+
127
+ INSERT INTO customer(name, email) VALUES (' customer1' , ' c1@gmail.com' );
128
+ INSERT INTO customer(name, email) VALUES (' customer2' , ' c2@gmail.com' );
129
+ SELECT * FROM customer;
130
+
131
+ CREATE TABLE vehicle (
132
+ id SERIAL ,
133
+ license_num VARCHAR (7 ),
134
+ creation_date DATE ,
135
+ price_gross NUMERIC ,
136
+ price_net NUMERIC ,
137
+ type VARCHAR (30 ),
138
+
139
+ id_manufacturer INT ,
140
+ id_model INT ,
141
+ id_version INT ,
142
+ id_extra INT ,
143
+
144
+ CONSTRAINT pk_vehicle PRIMARY KEY (id),
145
+ CONSTRAINT fk_vehicle_manufacturer FOREIGN KEY (id_manufacturer) REFERENCES manufacturer(id),
146
+ CONSTRAINT fk_vehicle_model FOREIGN KEY (id_model) REFERENCES model(id),
147
+ CONSTRAINT fk_vehicle_extra_version FOREIGN KEY (id_version, id_extra) REFERENCES extra_version(id_version, id_extra)
148
+ );
149
+
150
+ SELECT * FROM vehicle;
151
+ SELECT * FROM manufacturer;
152
+ SELECT * FROM model;
153
+ SELECT * FROM extra_version;
154
+ SELECT * FROM vehicle;
155
+
156
+ INSERT INTO vehicle (license_num, price_gross, id_manufacturer, id_model, id_version, id_extra)
157
+ VALUES (' 1234LLL' , 40000 , 1 , 2 , 1 , 2 );
158
+
159
+ INSERT INTO vehicle (license_num, price_gross, id_manufacturer, id_model, id_version, id_extra)
160
+ VALUES (' 3456EEE' , 60000 , 1 , 3 , 3 , 3 );
161
+
162
+ CREATE TABLE sale (
163
+ id SERIAL ,
164
+ sale_date DATE ,
165
+ channel VARCHAR (300 ),
166
+
167
+ id_vehicle INT ,
168
+ id_employee INT ,
169
+ id_customer INT ,
170
+
171
+ CONSTRAINT pk_sale PRIMARY KEY (id),
172
+ CONSTRAINT fk_sale_vehicle FOREIGN KEY (id_vehicle) REFERENCES vehicle(id),
173
+ CONSTRAINT fk_sale_employee FOREIGN KEY (id_employee) REFERENCES employee(id),
174
+ CONSTRAINT fk_sale_customer FOREIGN KEY (id_customer) REFERENCES customer(id)
175
+ );
176
+
177
+ INSERT INTO sale(sale_date, channel, id_vehicle, id_employee, id_customer)
178
+ VALUES (' 2022-01-01' , ' Phone' , 1 , 1 , 1 );
179
+
180
+ SELECT * FROM sale;
0 commit comments