init.sql 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. -- Создание таблицы поставщиков
  2. CREATE TABLE IF NOT EXISTS suppliers (
  3. supplier_id SERIAL PRIMARY KEY,
  4. organization_name VARCHAR(150) NOT NULL,
  5. address VARCHAR(255),
  6. contacts VARCHAR(100),
  7. rating INTEGER CHECK (rating BETWEEN 1 AND 10),
  8. products VARCHAR(150)
  9. );
  10. -- Создание таблицы кормов
  11. CREATE TABLE IF NOT EXISTS feed (
  12. feed_id SERIAL PRIMARY KEY,
  13. feed_type VARCHAR(100) NOT NULL,
  14. quantity NUMERIC(10,2) CHECK (quantity >= 0)
  15. );
  16. -- Создание таблицы поставок кормов
  17. CREATE TABLE IF NOT EXISTS feed_supply (
  18. supply_id SERIAL PRIMARY KEY,
  19. supplier_id INTEGER NOT NULL,
  20. feed_id INTEGER NOT NULL,
  21. supply_date DATE NOT NULL,
  22. CONSTRAINT fk_feed_supply_supplier
  23. FOREIGN KEY (supplier_id)
  24. REFERENCES suppliers(supplier_id)
  25. ON DELETE CASCADE,
  26. CONSTRAINT fk_feed_supply_feed
  27. FOREIGN KEY (feed_id)
  28. REFERENCES feed(feed_id)
  29. ON DELETE CASCADE
  30. );
  31. -- Создание таблицы закупок
  32. CREATE TABLE IF NOT EXISTS purchase_list (
  33. purchase_id SERIAL PRIMARY KEY,
  34. number VARCHAR(50) NOT NULL,
  35. purchase_date DATE NOT NULL,
  36. product_name VARCHAR(150) NOT NULL,
  37. quantity NUMERIC(10,2) CHECK (quantity > 0),
  38. supplier_id INTEGER NOT NULL,
  39. CONSTRAINT fk_purchase_supplier
  40. FOREIGN KEY (supplier_id)
  41. REFERENCES suppliers(supplier_id)
  42. ON DELETE CASCADE
  43. );
  44. -- Создание таблицы должностей
  45. CREATE TABLE IF NOT EXISTS positions (
  46. position_id SERIAL PRIMARY KEY,
  47. position_name VARCHAR(100) NOT NULL,
  48. salary NUMERIC(10,2) CHECK (salary > 0)
  49. );
  50. -- Создание таблицы сотрудников
  51. CREATE TABLE IF NOT EXISTS employees (
  52. employee_id SERIAL PRIMARY KEY,
  53. full_name VARCHAR(150) NOT NULL,
  54. birth_date DATE,
  55. gender VARCHAR(10),
  56. passport_data VARCHAR(50),
  57. inn VARCHAR(12) UNIQUE,
  58. phone VARCHAR(20),
  59. address VARCHAR(255),
  60. position_id INTEGER NOT NULL,
  61. CONSTRAINT fk_employee_position
  62. FOREIGN KEY (position_id)
  63. REFERENCES positions(position_id)
  64. ON DELETE RESTRICT
  65. );
  66. -- Создание таблицы вольеров
  67. CREATE TABLE IF NOT EXISTS enclosures (
  68. enclosure_id SERIAL PRIMARY KEY,
  69. enclosure_number VARCHAR(50) NOT NULL,
  70. enclosure_type VARCHAR(100) NOT NULL
  71. );
  72. -- Создание таблицы животных
  73. CREATE TABLE IF NOT EXISTS animals (
  74. animal_id SERIAL PRIMARY KEY,
  75. name VARCHAR(100) NOT NULL,
  76. species VARCHAR(100) NOT NULL,
  77. birth_date DATE,
  78. enclosure_id INTEGER NOT NULL,
  79. CONSTRAINT fk_animal_enclosure
  80. FOREIGN KEY (enclosure_id)
  81. REFERENCES enclosures(enclosure_id)
  82. ON DELETE RESTRICT
  83. );
  84. -- Создание таблицы клиентов
  85. CREATE TABLE IF NOT EXISTS clients (
  86. client_id SERIAL PRIMARY KEY,
  87. full_name VARCHAR(150) NOT NULL,
  88. address VARCHAR(255),
  89. phone VARCHAR(20)
  90. );
  91. -- Создание таблицы услуг
  92. CREATE TABLE IF NOT EXISTS services (
  93. service_id SERIAL PRIMARY KEY,
  94. service_type VARCHAR(150) NOT NULL,
  95. price NUMERIC(10,2) CHECK (price > 0)
  96. );
  97. -- Создание таблицы заказов услуг
  98. CREATE TABLE IF NOT EXISTS service_orders (
  99. order_id SERIAL PRIMARY KEY,
  100. client_id INTEGER NOT NULL,
  101. service_id INTEGER NOT NULL,
  102. employee_id INTEGER NOT NULL,
  103. order_date DATE NOT NULL,
  104. quantity INTEGER CHECK (quantity > 0),
  105. total_cost NUMERIC(12,2),
  106. CONSTRAINT fk_order_client
  107. FOREIGN KEY (client_id)
  108. REFERENCES clients(client_id)
  109. ON DELETE CASCADE,
  110. CONSTRAINT fk_order_service
  111. FOREIGN KEY (service_id)
  112. REFERENCES services(service_id)
  113. ON DELETE RESTRICT,
  114. CONSTRAINT fk_order_employee
  115. FOREIGN KEY (employee_id)
  116. REFERENCES employees(employee_id)
  117. ON DELETE RESTRICT
  118. );
  119. -- Создание таблицы наблюдений
  120. CREATE TABLE IF NOT EXISTS observations (
  121. observation_id SERIAL PRIMARY KEY,
  122. employee_id INTEGER NOT NULL,
  123. animal_id INTEGER NOT NULL,
  124. observation_date DATE NOT NULL,
  125. comment TEXT,
  126. CONSTRAINT fk_observation_employee
  127. FOREIGN KEY (employee_id)
  128. REFERENCES employees(employee_id)
  129. ON DELETE CASCADE,
  130. CONSTRAINT fk_observation_animal
  131. FOREIGN KEY (animal_id)
  132. REFERENCES animals(animal_id)
  133. ON DELETE CASCADE
  134. );
  135. -- Создание функции для автоматического расчета итоговой стоимости услуги
  136. CREATE OR REPLACE FUNCTION calculate_total_cost()
  137. RETURNS TRIGGER AS
  138. $$
  139. BEGIN
  140. SELECT NEW.quantity * price
  141. INTO NEW.total_cost
  142. FROM services
  143. WHERE service_id = NEW.service_id;
  144. RETURN NEW;
  145. END;
  146. $$ LANGUAGE plpgsql;
  147. -- Создание триггера для автоматического вызова функции расчета стоимости
  148. CREATE TRIGGER trg_calculate_total_cost
  149. BEFORE INSERT OR UPDATE ON service_orders
  150. FOR EACH ROW
  151. EXECUTE FUNCTION calculate_total_cost();