| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- -- Создание таблицы поставщиков
- CREATE TABLE IF NOT EXISTS suppliers (
- supplier_id SERIAL PRIMARY KEY,
- organization_name VARCHAR(150) NOT NULL,
- address VARCHAR(255),
- contacts VARCHAR(100),
- rating INTEGER CHECK (rating BETWEEN 1 AND 10),
- products VARCHAR(150)
- );
- -- Создание таблицы кормов
- CREATE TABLE IF NOT EXISTS feed (
- feed_id SERIAL PRIMARY KEY,
- feed_type VARCHAR(100) NOT NULL,
- quantity NUMERIC(10,2) CHECK (quantity >= 0)
- );
- -- Создание таблицы поставок кормов
- CREATE TABLE IF NOT EXISTS feed_supply (
- supply_id SERIAL PRIMARY KEY,
- supplier_id INTEGER NOT NULL,
- feed_id INTEGER NOT NULL,
- supply_date DATE NOT NULL,
- CONSTRAINT fk_feed_supply_supplier
- FOREIGN KEY (supplier_id)
- REFERENCES suppliers(supplier_id)
- ON DELETE CASCADE,
- CONSTRAINT fk_feed_supply_feed
- FOREIGN KEY (feed_id)
- REFERENCES feed(feed_id)
- ON DELETE CASCADE
- );
- -- Создание таблицы закупок
- CREATE TABLE IF NOT EXISTS purchase_list (
- purchase_id SERIAL PRIMARY KEY,
- number VARCHAR(50) NOT NULL,
- purchase_date DATE NOT NULL,
- product_name VARCHAR(150) NOT NULL,
- quantity NUMERIC(10,2) CHECK (quantity > 0),
- supplier_id INTEGER NOT NULL,
- CONSTRAINT fk_purchase_supplier
- FOREIGN KEY (supplier_id)
- REFERENCES suppliers(supplier_id)
- ON DELETE CASCADE
- );
- -- Создание таблицы должностей
- CREATE TABLE IF NOT EXISTS positions (
- position_id SERIAL PRIMARY KEY,
- position_name VARCHAR(100) NOT NULL,
- salary NUMERIC(10,2) CHECK (salary > 0)
- );
- -- Создание таблицы сотрудников
- CREATE TABLE IF NOT EXISTS employees (
- employee_id SERIAL PRIMARY KEY,
- full_name VARCHAR(150) NOT NULL,
- birth_date DATE,
- gender VARCHAR(10),
- passport_data VARCHAR(50),
- inn VARCHAR(12) UNIQUE,
- phone VARCHAR(20),
- address VARCHAR(255),
- position_id INTEGER NOT NULL,
- CONSTRAINT fk_employee_position
- FOREIGN KEY (position_id)
- REFERENCES positions(position_id)
- ON DELETE RESTRICT
- );
- -- Создание таблицы вольеров
- CREATE TABLE IF NOT EXISTS enclosures (
- enclosure_id SERIAL PRIMARY KEY,
- enclosure_number VARCHAR(50) NOT NULL,
- enclosure_type VARCHAR(100) NOT NULL
- );
- -- Создание таблицы животных
- CREATE TABLE IF NOT EXISTS animals (
- animal_id SERIAL PRIMARY KEY,
- name VARCHAR(100) NOT NULL,
- species VARCHAR(100) NOT NULL,
- birth_date DATE,
- enclosure_id INTEGER NOT NULL,
- CONSTRAINT fk_animal_enclosure
- FOREIGN KEY (enclosure_id)
- REFERENCES enclosures(enclosure_id)
- ON DELETE RESTRICT
- );
- -- Создание таблицы клиентов
- CREATE TABLE IF NOT EXISTS clients (
- client_id SERIAL PRIMARY KEY,
- full_name VARCHAR(150) NOT NULL,
- address VARCHAR(255),
- phone VARCHAR(20)
- );
- -- Создание таблицы услуг
- CREATE TABLE IF NOT EXISTS services (
- service_id SERIAL PRIMARY KEY,
- service_type VARCHAR(150) NOT NULL,
- price NUMERIC(10,2) CHECK (price > 0)
- );
- -- Создание таблицы заказов услуг
- CREATE TABLE IF NOT EXISTS service_orders (
- order_id SERIAL PRIMARY KEY,
- client_id INTEGER NOT NULL,
- service_id INTEGER NOT NULL,
- employee_id INTEGER NOT NULL,
- order_date DATE NOT NULL,
- quantity INTEGER CHECK (quantity > 0),
- total_cost NUMERIC(12,2),
- CONSTRAINT fk_order_client
- FOREIGN KEY (client_id)
- REFERENCES clients(client_id)
- ON DELETE CASCADE,
- CONSTRAINT fk_order_service
- FOREIGN KEY (service_id)
- REFERENCES services(service_id)
- ON DELETE RESTRICT,
- CONSTRAINT fk_order_employee
- FOREIGN KEY (employee_id)
- REFERENCES employees(employee_id)
- ON DELETE RESTRICT
- );
- -- Создание таблицы наблюдений
- CREATE TABLE IF NOT EXISTS observations (
- observation_id SERIAL PRIMARY KEY,
- employee_id INTEGER NOT NULL,
- animal_id INTEGER NOT NULL,
- observation_date DATE NOT NULL,
- comment TEXT,
- CONSTRAINT fk_observation_employee
- FOREIGN KEY (employee_id)
- REFERENCES employees(employee_id)
- ON DELETE CASCADE,
- CONSTRAINT fk_observation_animal
- FOREIGN KEY (animal_id)
- REFERENCES animals(animal_id)
- ON DELETE CASCADE
- );
- -- Создание функции для автоматического расчета итоговой стоимости услуги
- CREATE OR REPLACE FUNCTION calculate_total_cost()
- RETURNS TRIGGER AS
- $$
- BEGIN
- SELECT NEW.quantity * price
- INTO NEW.total_cost
- FROM services
- WHERE service_id = NEW.service_id;
- RETURN NEW;
- END;
- $$ LANGUAGE plpgsql;
- -- Создание триггера для автоматического вызова функции расчета стоимости
- CREATE TRIGGER trg_calculate_total_cost
- BEFORE INSERT OR UPDATE ON service_orders
- FOR EACH ROW
- EXECUTE FUNCTION calculate_total_cost();
|