1- CREATE TABLE Cliente (
2- IDCliente INTEGER PRIMARY KEY ,
3- NomeCliente TEXT ,
4- EmailCliente TEXT ,
5- Cidade TEXT
1+ CREATE TABLE Clients (
2+ id_client VARCHAR (6 ) PRIMARY KEY ,
3+ name VARCHAR (100 ) NOT NULL ,
4+ tax_id INTEGER UNIQUE NOT NULL CHECK (
5+ tax_id BETWEEN 100000000 AND 399999999
6+ ), -- Portuguese standard tax number for individuals
7+ email VARCHAR (100 ) UNIQUE NOT NULL CHECK (
8+ email LIKE ' %@%.%'
9+ ),
10+ phone_number VARCHAR (9 ) UNIQUE NOT NULL CHECK (
11+ (phone_number LIKE ' 91%' ) OR
12+ (phone_number LIKE ' 92%' ) OR
13+ (phone_number LIKE ' 93%' ) OR
14+ (phone_number LIKE ' 96%' ) AND
15+ LENGTH(phone_number) = 9
16+ ), -- Portuguese standard phonenumbers.
17+ date_of_birth DATE CHECK (
18+ date_of_birth <= CURRENT_DATE AND
19+ date_of_birth LIKE ' ____-__-__'
20+ ),
21+ newsletter BOOLEAN NOT NULL DEFAULT FALSE,
22+ authorization BOOLEAN NOT NULL DEFAULT FALSE,
23+ acquisition_channel VARCHAR (100 ) CHECK (
24+ acquisition_channel IN (' Instagram' , ' Facebook' , ' Tik Tok' , ' Google' , ' Events' , ' TheFork' , ' Email Marketing' , ' Friend Recommendation' )
25+ ),
26+ modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
27+ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
628);
729
8- CREATE TABLE Plano (
9- Plano TEXT PRIMARY KEY ,
10- PrecoMensal DECIMAL
30+ CREATE TABLE Products (
31+ id_product VARCHAR (6 ) PRIMARY KEY ,
32+ name VARCHAR (100 ) UNIQUE NOT NULL ,
33+ description TEXT ,
34+ product_type VARCHAR (20 ) NOT NULL CHECK (
35+ product_type IN (' beer' , ' snacks' )
36+ ),
37+ sale_price DECIMAL (10 ,2 ) NOT NULL ,
38+ current_stock FLOAT NOT NULL ,
39+ minimum_stock FLOAT NOT NULL ,
40+ modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
41+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
1142);
1243
13- CREATE TABLE Assinatura (
14- IDAssinatura INTEGER PRIMARY KEY ,
15- IDCliente INTEGER ,
16- Plano TEXT ,
17- Pagamento TEXT ,
18- DataInicio DATE ,
19- FOREIGN KEY (IDCliente) REFERENCES Cliente(IDCliente),
20- FOREIGN KEY (Plano) REFERENCES Plano(Plano)
44+ ALTER TABLE Products
45+ ADD COLUMN purchase_price DECIMAL (10 ,2 ); -- Adds purchase_price column. Stores the purchase cost of the product.
46+
47+ CREATE TABLE Employees (
48+ id_employee VARCHAR (6 ) PRIMARY KEY ,
49+ name VARCHAR (100 ) NOT NULL ,
50+ identification_doc VARCHAR (12 ) NOT NULL CHECK (
51+ identification_doc GLOB ' [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [A-Z][A-Z] [0-9]'
52+ ), -- Portuguese standard for id number
53+ tax_id INTEGER UNIQUE NOT NULL CHECK (
54+ tax_id BETWEEN 100000000 AND 399999999
55+ ), -- Portuguese standard tax number for individuals
56+ email VARCHAR (100 ) UNIQUE NOT NULL CHECK (
57+ email LIKE ' %@%.%'
58+ ),
59+ phone_number VARCHAR (9 ) UNIQUE NOT NULL CHECK (
60+ (phone_number LIKE ' 91%' ) OR
61+ (phone_number LIKE ' 92%' ) OR
62+ (phone_number LIKE ' 93%' ) OR
63+ (phone_number LIKE ' 96%' ) AND
64+ LENGTH(phone_number) = 9
65+ ), -- Portuguese standard phonenumbers.
66+ role VARCHAR (50 ) NOT NULL ,
67+ date_of_birth DATE CHECK (
68+ date_of_birth <= CURRENT_DATE AND
69+ date_of_birth LIKE ' ____-__-__'
70+ ),
71+ address TEXT ,
72+ iban VARCHAR (25 ) NOT NULL CHECK (
73+ iban LIKE ' PT%' AND LENGTH(iban)= 25
74+ ), -- Portuguese standard for IBAN.
75+ modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
76+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
77+ );
78+
79+ CREATE TABLE Suppliers (
80+ id_supplier VARCHAR (6 ) PRIMARY KEY ,
81+ company_name VARCHAR (100 ) NOT NULL ,
82+ tax_id INTEGER UNIQUE NOT NULL CHECK (
83+ tax_id BETWEEN 500000000 AND 599999999
84+ ), -- portuguese standard for companies tax id
85+ email VARCHAR (100 ) UNIQUE NOT NULL CHECK (
86+ email LIKE ' %@%.%'
87+ ),
88+ phone_number VARCHAR (9 ) UNIQUE NOT NULL CHECK (
89+ (phone_number LIKE ' 91%' ) OR
90+ (phone_number LIKE ' 92%' ) OR
91+ (phone_number LIKE ' 93%' ) OR
92+ (phone_number LIKE ' 96%' ) AND
93+ LENGTH(phone_number) = 9
94+ ), -- Portuguese standard phonenumbers.
95+ contact_person VARCHAR (100 ),
96+ address TEXT ,
97+ country VARCHAR (50 ),
98+ modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
99+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
100+ );
101+
102+ CREATE TABLE Reviews (
103+ id_client VARCHAR (6 ) PRIMARY KEY ,
104+ rating INTEGER CHECK (rating BETWEEN 1 AND 5 ),
105+ comment TEXT ,
106+ visibility BOOLEAN NOT NULL DEFAULT TRUE,
107+ review_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
108+ FOREIGN KEY (id_client) REFERENCES Clients(id_client)
109+ );
110+
111+ CREATE TABLE Events (
112+ id_event VARCHAR (6 ) PRIMARY KEY ,
113+ name VARCHAR (100 ) NOT NULL ,
114+ description TEXT ,
115+ event_type VARCHAR (50 ) NOT NULL CHECK (
116+ event_type IN (' party' , ' workshop' , ' launch' , ' other' )
117+ ),
118+ event_date DATE NOT NULL ,
119+ event_time TIME NOT NULL ,
120+ location VARCHAR (100 ),
121+ capacity INTEGER NOT NULL CHECK (capacity > 0 ),
122+ private_event BOOLEAN NOT NULL DEFAULT FALSE,
123+ price DECIMAL (10 ,2 ),
124+ modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
125+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
126+ );
127+
128+ CREATE TABLE Event_Participations (
129+ id_event VARCHAR (6 ) NOT NULL ,
130+ id_client VARCHAR (6 ) NOT NULL ,
131+ registration_date DATETIME DEFAULT CURRENT_TIMESTAMP ,
132+ PRIMARY KEY (id_event, id_client),
133+ FOREIGN KEY (id_event) REFERENCES Events(id_event),
134+ FOREIGN KEY (id_client) REFERENCES Clients(id_client)
135+ );
136+
137+ CREATE TABLE Payments (
138+ id_payment VARCHAR (6 ) PRIMARY KEY ,
139+ id_client VARCHAR (6 ),
140+ id_employee VARCHAR (6 ),
141+ amount DECIMAL (10 ,2 ) NOT NULL ,
142+ currency VARCHAR (3 ) NOT NULL CHECK (
143+ currency IN (' EUR' , ' USD' , ' GBP' )
144+ ),
145+ payment_method VARCHAR (20 ) NOT NULL CHECK (
146+ payment_method IN (' card' , ' transfer' , ' cash' )
147+ ),
148+ payment_status VARCHAR (20 ) NOT NULL CHECK (
149+ payment_status IN (' pending' , ' completed' , ' canceled' )
150+ ),
151+ payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
152+ FOREIGN KEY (id_client) REFERENCES Clients(id_client),
153+ FOREIGN KEY (id_employee) REFERENCES Employees(id_employee)
154+ );
155+
156+ CREATE TABLE Payment_Items (
157+ id_payment VARCHAR (6 ),
158+ id_product VARCHAR (6 ),
159+ quantity INTEGER NOT NULL CHECK (quantity > 0 ),
160+ unit_price DECIMAL (10 ,2 ) NOT NULL ,
161+ PRIMARY KEY (id_payment, id_product),
162+ FOREIGN KEY (id_payment) REFERENCES Payments(id_payment),
163+ FOREIGN KEY (id_product) REFERENCES Products(id_product)
164+ );
165+
166+ CREATE TABLE Orders (
167+ id_order VARCHAR (6 ) PRIMARY KEY ,
168+ id_supplier VARCHAR (6 ),
169+ id_employee VARCHAR (6 ),
170+ amount DECIMAL (10 ,2 ) NOT NULL ,
171+ currency VARCHAR (3 ) NOT NULL CHECK (currency IN (' EUR' , ' USD' , ' GBP' )),
172+ payment_method VARCHAR (20 ) NOT NULL CHECK (payment_method IN (' card' , ' transfer' , ' cash' )),
173+ payment_status VARCHAR (20 ) NOT NULL CHECK (payment_status IN (' pending' , ' completed' , ' canceled' )),
174+ order_status VARCHAR (20 ) NOT NULL CHECK (order_status IN (' pending' , ' processing' , ' shipped' , ' delivered' , ' canceled' )),
175+ order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
176+ modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
177+ FOREIGN KEY (id_supplier) REFERENCES Suppliers(id_supplier),
178+ FOREIGN KEY (id_employee) REFERENCES Employees(id_employee)
21179);
22180
23- CREATE TABLE Filme_Assistido (
24- IDAssinatura INTEGER ,
25- NomeFilme TEXT ,
26- FOREIGN KEY (IDAssinatura) REFERENCES Assinatura(IDAssinatura)
181+ CREATE TABLE Order_Items (
182+ id_order VARCHAR (6 ),
183+ id_product VARCHAR (6 ),
184+ quantity INTEGER NOT NULL CHECK (quantity > 0 ),
185+ unit_value DECIMAL (10 ,2 ) NOT NULL ,
186+ PRIMARY KEY (id_order, id_product),
187+ FOREIGN KEY (id_order) REFERENCES Orders(id_order),
188+ FOREIGN KEY (id_product) REFERENCES Products(id_product)
27189);
0 commit comments