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
28- );
29-
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
42- );
43-
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)
1+ CREATE TABLE Cliente (
2+ IDCliente INTEGER PRIMARY KEY ,
3+ NomeCliente TEXT ,
4+ EmailCliente TEXT ,
5+ Cidade TEXT
1546);
1557
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)
8+ CREATE TABLE Plano (
9+ Plano TEXT PRIMARY KEY ,
10+ PrecoMensal DECIMAL
16411);
16512
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)
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)
17921);
18022
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)
23+ CREATE TABLE Filme_Assistido (
24+ IDAssinatura INTEGER ,
25+ NomeFilme TEXT ,
26+ FOREIGN KEY (IDAssinatura) REFERENCES Assinatura(IDAssinatura)
18927);
0 commit comments