diff --git a/perfect_pet_data/perfect_pet_db_data_model.sql b/perfect_pet_data/perfect_pet_db_data_model.sql new file mode 100644 index 0000000000000000000000000000000000000000..5f9d1e5341caee2ae71f0676c4852d8c43582fff --- /dev/null +++ b/perfect_pet_data/perfect_pet_db_data_model.sql @@ -0,0 +1,108 @@ +--schema = perfect_pet + +-- relation doctor +-- DROP TABLE IF EXISTS perfect_pet.doctor; +CREATE TYPE medical_specialty AS ENUM ('surgery','general'); +CREATE TABLE IF NOT EXISTS perfect_pet.doctor +( + id_doctor integer NOT NULL, + first_name character varying(150) NOT NULL, + last_name character varying(150) NOT NULL, + specialty medical_specialty NOT NULL, + license_number character varying(15) NOT NULL, + period_start_date DATE NOT NULL, + period_end_date DATE DEFAULT NULL, + max_monthly_hours FLOAT DEFAULT 0, + CONSTRAINT doctor_pkey PRIMARY KEY (id_doctor) +); + +------------------------------------------------------------------ +-- relation microchip +-- DROP TABLE IF EXISTS perfect_pet.microchip; +CREATE TABLE IF NOT EXISTS perfect_pet.microchip +( + id_microchip integer NOT NULL, + number character varying(9) NOT NULL, + implant_date DATE NOT NULL, + CONSTRAINT microchip_pkey PRIMARY KEY (id_microchip) +); + +------------------------------------------------------------------ +-- relation animal +-- DROP TABLE IF EXISTS perfect_pet.animal; +CREATE TYPE animal_species AS ENUM ('canine','feline'); +CREATE TYPE animal_gender AS ENUM ('female','male'); +CREATE TABLE IF NOT EXISTS perfect_pet.animal +( + id_animal integer NOT NULL, + species animal_species NOT NULL, + breed character varying(50) NOT NULL, + name character varying(50) NOT NULL, + id_microchip integer NOT NULL, + gender animal_gender NOT NULL, + dob DATE DEFAULT NULL, + weight FLOAT, + hash_id character varying(10) NOT NULL, + id_client integer NOT NULL, + CONSTRAINT animal_pkey PRIMARY KEY (id_animal) +); + +ALTER TABLE perfect_pet.animal +ADD CONSTRAINT FK_animal_microchip FOREIGN KEY (id_microchip) +REFERENCES perfect_pet.microchip(id_microchip) MATCH SIMPLE +ON UPDATE NO ACTION +ON DELETE NO ACTION; + +ALTER TABLE perfect_pet.animal +ADD CONSTRAINT FK_animal_client FOREIGN KEY (id_client) +REFERENCES perfect_pet.client(id_client) MATCH SIMPLE +ON UPDATE NO ACTION +ON DELETE NO ACTION; + +------------------------------------------------------------------ +--relation appointment +-- DROP TABLE IF EXISTS perfect_pet.appointment; +CREATE TYPE appointment_time AS ENUM ('8','9' ,'10','11','12','13','14','15','16','17','18','19','20'); +CREATE TYPE appointment_reason AS ENUM ('injured pet','initial visit','surgery','follow-up surgery','annual visit','follow up','sick pet','follow-up'); +CREATE TABLE IF NOT EXISTS perfect_pet.appointment +( + id_appointment integer NOT NULL, + id_animal integer NOT NULL, + id_doctor integer NOT NULL, + date DATE NOT NULL, + time appointment_time NOT NULL, + main_reason appointment_reason NOT NULL, + CONSTRAINT appointment_pkey PRIMARY KEY (id_appointment) +); + +ALTER TABLE perfect_pet.appointment +ADD CONSTRAINT FK_appointment_animal FOREIGN KEY (id_animal) +REFERENCES perfect_pet.animal(id_animal) MATCH SIMPLE +ON UPDATE NO ACTION +ON DELETE NO ACTION; + +ALTER TABLE perfect_pet.appointment +ADD CONSTRAINT FK_appointment_doctor FOREIGN KEY (id_doctor) +REFERENCES perfect_pet.doctor(id_doctor) MATCH SIMPLE +ON UPDATE NO ACTION +ON DELETE NO ACTION; + +------------------------------------------------------------------ +-- relation client +CREATE TABLE IF NOT EXISTS perfect_pet.client +( + id_client integer NOT NULL, + first_name character varying(150) NOT NULL, + last_name character varying(150) NOT NULL, + city character varying(50) NOT NULL, + phone_number character varying(10) NOT NULL, + id_animal integer NOT NULL, + CONSTRAINT client_pkey PRIMARY KEY (id_client) +); + +ALTER TABLE perfect_pet.client +ADD CONSTRAINT FK_client_animal FOREIGN KEY (id_animal) +REFERENCES perfect_pet.animal(id_animal) MATCH SIMPLE +ON UPDATE NO ACTION +ON DELETE NO ACTION; +