DDL: kreiranje.sql

File kreiranje.sql, 3.7 KB (added by 163080, 5 weeks ago)
Line 
1-- Drop tables if they exist
2DROP TABLE IF EXISTS LineItem CASCADE;
3DROP TABLE IF EXISTS Invoice CASCADE;
4DROP TABLE IF EXISTS EmailTemplate CASCADE;
5DROP TABLE IF EXISTS Employee CASCADE;
6DROP TABLE IF EXISTS Candidate CASCADE;
7DROP TABLE IF EXISTS Client CASCADE;
8DROP TABLE IF EXISTS User CASCADE;
9DROP TABLE IF EXISTS Company CASCADE;
10
11-- Drop schema if it exists
12DROP SCHEMA IF EXISTS project CASCADE;
13
14-- Create schema
15CREATE SCHEMA project;
16
17-- Create tables
18CREATE TABLE Company (
19 company_id BIGINT PRIMARY KEY,
20 name VARCHAR(255) NOT NULL,
21 address VARCHAR(4000),
22 vat VARCHAR(255),
23 email VARCHAR(255) NOT NULL,
24 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
25 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
26);
27
28CREATE TABLE User (
29 user_id BIGINT PRIMARY KEY,
30 name VARCHAR(255) NOT NULL,
31 email VARCHAR(255) UNIQUE NOT NULL,
32 password VARCHAR(255) NOT NULL,
33 role VARCHAR(50) CHECK (role IN ('Admin', 'HR', 'Finance Manager')) NOT NULL,
34 company_id BIGINT NOT NULL REFERENCES Company(company_id)
35);
36
37CREATE TABLE Employee (
38 employee_id BIGINT PRIMARY KEY,
39 name VARCHAR(255) NOT NULL,
40 email VARCHAR(255) UNIQUE NOT NULL,
41 status VARCHAR(50) CHECK (status IN ('Active', 'Inactive', 'Terminated')) NOT NULL,
42 iban VARCHAR(255),
43 cv VARCHAR(4000),
44 photo VARCHAR(4000),
45 notes TEXT,
46 project VARCHAR(255),
47 company_id BIGINT NOT NULL REFERENCES Company(company_id),
48 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
49 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
50);
51
52CREATE TABLE Candidate (
53 candidate_id BIGINT PRIMARY KEY,
54 name VARCHAR(255) NOT NULL,
55 email VARCHAR(255) UNIQUE NOT NULL,
56 status VARCHAR(50) CHECK (status IN ('Applied', 'Interview', 'Offered', 'Rejected')) NOT NULL,
57 cv VARCHAR(4000),
58 interview_stage VARCHAR(255),
59 notes TEXT,
60 company_id BIGINT NOT NULL REFERENCES Company(company_id),
61 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
62 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
63);
64
65CREATE TABLE Client (
66 client_id BIGINT PRIMARY KEY,
67 name VARCHAR(255) NOT NULL,
68 representative VARCHAR(255) NOT NULL,
69 email VARCHAR(255) UNIQUE NOT NULL,
70 phone VARCHAR(20),
71 address VARCHAR(4000),
72 vat VARCHAR(255),
73 logo VARCHAR(4000),
74 company_id BIGINT NOT NULL REFERENCES Company(company_id),
75 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
76 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
77);
78
79CREATE TABLE Invoice (
80 invoice_id BIGINT PRIMARY KEY,
81 from VARCHAR(255) NOT NULL,
82 to VARCHAR(255) NOT NULL,
83 issue_date DATE NOT NULL,
84 due_date DATE NOT NULL,
85 notes TEXT,
86 status VARCHAR(50) CHECK (status IN ('Draft', 'Pending', 'Paid', 'Overdue')) NOT NULL,
87 company_id BIGINT NOT NULL REFERENCES Company(company_id),
88 client_id BIGINT NOT NULL REFERENCES Client(client_id),
89 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
90 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
91);
92
93CREATE TABLE LineItem (
94 line_item_id BIGINT PRIMARY KEY,
95 description TEXT NOT NULL,
96 quantity INT NOT NULL CHECK (quantity > 0),
97 unit_price DECIMAL(10, 2) NOT NULL CHECK (unit_price >= 0),
98 currency VARCHAR(10) NOT NULL,
99 total DECIMAL(10, 2) NOT NULL CHECK (total >= 0),
100 invoice_id BIGINT NOT NULL REFERENCES Invoice(invoice_id)
101);
102
103CREATE TABLE EmailTemplate (
104 template_id BIGINT PRIMARY KEY,
105 type VARCHAR(50) CHECK (type IN ('New Invoice', 'Invoice Overdue', 'Welcome Employee', 'Candidate Interview Offer', 'Candidate Rejected', 'Client Welcome')) NOT NULL,
106 subject VARCHAR(255) NOT NULL,
107 body TEXT NOT NULL,
108 company_id BIGINT NOT NULL REFERENCES Company(company_id),
109 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
110 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
111);