1 | -- Drop tables and views if exist
|
---|
2 | DROP TABLE IF EXISTS aktivniprodukti CASCADE;
|
---|
3 | DROP VIEW IF EXISTS aktivniprodukti CASCADE;
|
---|
4 |
|
---|
5 | -- Customer
|
---|
6 | CREATE TABLE customer (
|
---|
7 | CustomerID INT PRIMARY KEY,
|
---|
8 | CustomerName VARCHAR(100),
|
---|
9 | CustomerSurName VARCHAR(100),
|
---|
10 | Email VARCHAR(100),
|
---|
11 | Address VARCHAR(255),
|
---|
12 | CustomerContact VARCHAR(20),
|
---|
13 | Password VARCHAR(255) NOT NULL
|
---|
14 | );
|
---|
15 |
|
---|
16 | -- CustomerFeedback
|
---|
17 | CREATE TABLE customerfeedback (
|
---|
18 | FeedbackID INT PRIMARY KEY,
|
---|
19 | CustomerID INT,
|
---|
20 | ProductID INT,
|
---|
21 | Rating INT CHECK (Rating BETWEEN 1 AND 5),
|
---|
22 | Comment TEXT,
|
---|
23 | FeedbackDate DATE,
|
---|
24 | TransactionID INT,
|
---|
25 | CONSTRAINT customerfeedback_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
|
---|
26 | CONSTRAINT customerfeedback_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID),
|
---|
27 | CONSTRAINT customerfeedback_transaction_fk FOREIGN KEY (TransactionID) REFERENCES procurement(TransactionID)
|
---|
28 | );
|
---|
29 |
|
---|
30 | -- Employee
|
---|
31 | CREATE TABLE employee (
|
---|
32 | EmployeeID INT PRIMARY KEY,
|
---|
33 | EmployeeName VARCHAR(100),
|
---|
34 | EmployeeSurName VARCHAR(100),
|
---|
35 | Position VARCHAR(100),
|
---|
36 | Department VARCHAR(100),
|
---|
37 | Email VARCHAR(100),
|
---|
38 | Password VARCHAR(100)
|
---|
39 | );
|
---|
40 |
|
---|
41 | -- Maintenance
|
---|
42 | CREATE TABLE maintenance (
|
---|
43 | MainID INT PRIMARY KEY,
|
---|
44 | EmployeeID INT,
|
---|
45 | ProductID INT,
|
---|
46 | MainDate DATE,
|
---|
47 | Description TEXT,
|
---|
48 | Cost NUMERIC(10,2),
|
---|
49 | Status VARCHAR(10) DEFAULT 'Pending',
|
---|
50 | StartTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
---|
51 | EndTime TIMESTAMP,
|
---|
52 | CONSTRAINT maintenance_status_check CHECK (Status IN ('Pending', 'Completed')),
|
---|
53 | CONSTRAINT maintenance_employee_fk FOREIGN KEY (EmployeeID) REFERENCES employee(EmployeeID),
|
---|
54 | CONSTRAINT maintenance_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
|
---|
55 | );
|
---|
56 |
|
---|
57 | -- Procurement
|
---|
58 | CREATE TABLE procurement (
|
---|
59 | TransactionID INT PRIMARY KEY,
|
---|
60 | EmployeeID INT,
|
---|
61 | CustomerID INT,
|
---|
62 | ProductID INT,
|
---|
63 | ProcurementDate DATE,
|
---|
64 | Quantity INT,
|
---|
65 | Status VARCHAR(10) DEFAULT 'Pending',
|
---|
66 | Notified BOOLEAN DEFAULT FALSE,
|
---|
67 | GroupID VARCHAR(255),
|
---|
68 | CONSTRAINT procurement_employee_fk FOREIGN KEY (EmployeeID) REFERENCES employee(EmployeeID),
|
---|
69 | CONSTRAINT procurement_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
|
---|
70 | CONSTRAINT procurement_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID),
|
---|
71 | CONSTRAINT procurement_status_check CHECK (Status IN ('Pending', 'Approved', 'Rejected'))
|
---|
72 | );
|
---|
73 |
|
---|
74 | -- Product
|
---|
75 | CREATE TABLE product (
|
---|
76 | ProductID INT PRIMARY KEY,
|
---|
77 | Model VARCHAR(100),
|
---|
78 | Price NUMERIC(10,2),
|
---|
79 | LicensePlate VARCHAR(50),
|
---|
80 | Status VARCHAR(15) NOT NULL,
|
---|
81 | CONSTRAINT product_status_check CHECK (Status IN ('available', 'sold', 'rented', 'maintenance'))
|
---|
82 | );
|
---|
83 |
|
---|
84 | -- T_Type
|
---|
85 | CREATE TABLE t_type (
|
---|
86 | TransactionID INT PRIMARY KEY,
|
---|
87 | Type VARCHAR(10) NOT NULL,
|
---|
88 | Duration INT,
|
---|
89 | MonthlyPay NUMERIC(10,2),
|
---|
90 | TotalPrice NUMERIC(10,2),
|
---|
91 | CONSTRAINT t_type_type_check CHECK (Type IN ('Rent', 'Buy')),
|
---|
92 | CONSTRAINT t_type_transaction_fk FOREIGN KEY (TransactionID) REFERENCES procurement(TransactionID)
|
---|
93 | );
|
---|
94 |
|
---|
95 | -- Trailer
|
---|
96 | CREATE TABLE trailer (
|
---|
97 | ProductID INT PRIMARY KEY,
|
---|
98 | Capacity NUMERIC(10,2),
|
---|
99 | CONSTRAINT trailer_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
|
---|
100 | );
|
---|
101 |
|
---|
102 | -- Truck
|
---|
103 | CREATE TABLE truck (
|
---|
104 | ProductID INT PRIMARY KEY,
|
---|
105 | HP INT,
|
---|
106 | CONSTRAINT truck_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
|
---|
107 | );
|
---|
108 |
|
---|
109 | -- Views (Customer views product)
|
---|
110 | CREATE TABLE views (
|
---|
111 | CustomerID INT NOT NULL,
|
---|
112 | ProductID INT NOT NULL,
|
---|
113 | PRIMARY KEY (CustomerID, ProductID),
|
---|
114 | CONSTRAINT views_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
|
---|
115 | CONSTRAINT views_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
|
---|
116 | );
|
---|
117 |
|
---|
118 | -- Wallet
|
---|
119 | CREATE TABLE wallet (
|
---|
120 | WalletID SERIAL PRIMARY KEY,
|
---|
121 | CustomerID INT NOT NULL,
|
---|
122 | Balance NUMERIC(10,2) NOT NULL DEFAULT 0.00,
|
---|
123 | CardNumber VARCHAR(16),
|
---|
124 | ExpiryDate DATE,
|
---|
125 | CVV VARCHAR(4),
|
---|
126 | CardHolderName VARCHAR(100),
|
---|
127 | CONSTRAINT wallet_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID)
|
---|
128 | );
|
---|
129 |
|
---|
130 | -- View aktivniprodukti (PostgreSQL syntax)
|
---|
131 | CREATE OR REPLACE VIEW aktivniprodukti AS
|
---|
132 | SELECT product.ProductID,
|
---|
133 | product.Model,
|
---|
134 | product.Price,
|
---|
135 | product.LicensePlate
|
---|
136 | FROM product
|
---|
137 | WHERE product.Status = 'available';
|
---|