forked from LikhithNG/DMDD-project-team_17
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_tables.sql
More file actions
147 lines (120 loc) · 4.07 KB
/
Copy pathcreate_tables.sql
File metadata and controls
147 lines (120 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
-- Main setup script
SET SERVEROUTPUT ON;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
-- Create tables
CREATE TABLE CUSTOMERS (
customer_id INTEGER PRIMARY KEY,
first_name VARCHAR2(100),
last_name VARCHAR2(100),
email VARCHAR2(50),
phone VARCHAR2(50),
address VARCHAR2(200)
);
CREATE TABLE GREENHOUSES (
greenhouse_id NUMBER PRIMARY KEY,
location VARCHAR2(100),
total_slots NUMBER
);
CREATE TABLE CROP_TYPES (
crop_type_id NUMBER PRIMARY KEY,
crop_name VARCHAR2(50),
growing_conditions VARCHAR2(200),
harvest_time_days NUMBER,
price_per_100g DECIMAL(10, 2)
);
CREATE TABLE PLANT_BEDS (
plant_bed_id NUMBER PRIMARY KEY,
slot_code VARCHAR2(20),
capacity NUMBER,
greenhouse_id NUMBER REFERENCES GREENHOUSES(greenhouse_id),
crop_type_id NUMBER REFERENCES CROP_TYPES(crop_type_id),
growth_cycle_id NUMBER,
planted_quantity NUMBER
);
CREATE TABLE GROWTH_CYCLE (
growth_cycle_id NUMBER PRIMARY KEY,
crop_type_id NUMBER REFERENCES CROP_TYPES(crop_type_id),
plant_bed_id NUMBER,
stage VARCHAR2(50),
start_date DATE,
end_date DATE
);
-- Add foreign key after both tables exist
ALTER TABLE PLANT_BEDS ADD CONSTRAINT fk_growth_cycle
FOREIGN KEY (growth_cycle_id) REFERENCES GROWTH_CYCLE(growth_cycle_id);
CREATE TABLE ORDERS (
order_id NUMBER PRIMARY KEY,
customer_id NUMBER REFERENCES CUSTOMERS(customer_id),
order_date DATE,
total_amount DECIMAL(10, 2)
);
CREATE TABLE HARVESTED_CROPS (
harvest_id NUMBER PRIMARY KEY,
crop_type_id NUMBER REFERENCES CROP_TYPES(crop_type_id),
harvest_date DATE,
quantity_kg DECIMAL(10, 2),
available_quantity_kg DECIMAL(10, 2),
growth_cycle_id NUMBER REFERENCES GROWTH_CYCLE(growth_cycle_id),
order_item_id NUMBER
);
CREATE TABLE SENSORS (
sensor_id NUMBER PRIMARY KEY,
plant_bed_id NUMBER REFERENCES PLANT_BEDS(plant_bed_id),
sensor_type VARCHAR2(50),
installation_date DATE
);
CREATE TABLE SENSOR_LOGS (
log_id NUMBER PRIMARY KEY,
sensor_id NUMBER REFERENCES SENSORS(sensor_id),
timestamp TIMESTAMP,
reading_value DECIMAL(10, 2)
);
CREATE TABLE ORDER_ITEMS (
order_item_id NUMBER PRIMARY KEY,
order_id NUMBER REFERENCES ORDERS(order_id),
harvest_id NUMBER REFERENCES HARVESTED_CROPS(harvest_id),
quantity_kg DECIMAL(10, 2)
);
-- Add foreign key after both tables exist
ALTER TABLE HARVESTED_CROPS ADD CONSTRAINT fk_order_item
FOREIGN KEY (order_item_id) REFERENCES ORDER_ITEMS(order_item_id);
ALTER TABLE CUSTOMERS
ADD CONSTRAINT unique_customer_email
UNIQUE (email);
--ALTER TABLE PLANT_BEDS
--ADD CONSTRAINT unique_crop_per_bed_per_cycle
-- UNIQUE (plant_bed_id, growth_cycle_id);
ALTER TABLE SENSORS
ADD CONSTRAINT unique_sensor_per_bed
UNIQUE (plant_bed_id, sensor_type);
ALTER TABLE SENSOR_LOGS
ADD CONSTRAINT unique_timestamp_per_sensor
UNIQUE (sensor_id, timestamp);
-- Check Constraints
ALTER TABLE PLANT_BEDS
ADD CONSTRAINT chk_capacity
CHECK (planted_quantity <= capacity);
ALTER TABLE HARVESTED_CROPS
ADD CONSTRAINT chk_minimum_harvest_quantity
CHECK (quantity_kg > 0);
ALTER TABLE HARVESTED_CROPS
ADD CONSTRAINT chk_available_quantity
CHECK (available_quantity_kg <= quantity_kg);
ALTER TABLE ORDER_ITEMS
ADD CONSTRAINT chk_order_item_quantity
CHECK (quantity_kg > 0);
ALTER TABLE GROWTH_CYCLE
ADD CONSTRAINT chk_growth_cycle_stage
CHECK (stage IN ('Seedling', 'Vegetative', 'Flowering', 'Harvest'));
--
---- synoonyms
------ Create public synonyms for easier access
CREATE PUBLIC SYNONYM CUSTOMERS FOR hydro_admin.CUSTOMERS; --
CREATE PUBLIC SYNONYM ORDERS FOR hydro_admin.ORDERS; --
CREATE PUBLIC SYNONYM ORDER_ITEMS FOR hydro_admin.ORDER_ITEMS; --
CREATE PUBLIC SYNONYM SENSORS FOR hydro_admin.SENSORS;
CREATE PUBLIC SYNONYM SENSOR_LOGS FOR hydro_admin.SENSOR_LOGS;
CREATE PUBLIC SYNONYM CROP_TYPES FOR hydro_admin.CROP_TYPES;
CREATE PUBLIC SYNONYM GROWTH_CYCLE FOR hydro_admin.GROWTH_CYCLE;
CREATE PUBLIC SYNONYM GREENHOUSES FOR hydro_admin.GREENHOUSES;
CREATE PUBLIC SYNONYM PLANT_BEDS FOR hydro_admin.PLANT_BEDS;