Prechádzať zdrojové kódy

Обновить 'README.md'

AlekseevAP 1 mesiac pred
rodič
commit
41ae0ee59d
1 zmenil súbory, kde vykonal 151 pridanie a 1 odobranie
  1. 151 1
      README.md

+ 151 - 1
README.md

@@ -1,2 +1,152 @@
-# lab11
+### Таблица `Role` (роли пользователей)
 
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор роли |
+| name | VARCHAR(50) | NOT NULL, UNIQUE | Название роли (Родитель, Ребёнок, Администратор) |
+
+### Таблица `Person` (физические лица)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор человека |
+| first_name | VARCHAR(50) | NOT NULL | Имя |
+| last_name | VARCHAR(50) | NOT NULL | Фамилия |
+| middle_name | VARCHAR(50) | | Отчество (необязательно) |
+| role_id | INTEGER | NOT NULL, FOREIGN KEY → Role(id) | Роль человека |
+
+### Таблица `School` (школы)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор школы |
+| name | VARCHAR(100) | NOT NULL | Наименование школы |
+
+### Таблица `Source` (источники информации о центре)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор источника |
+| name | VARCHAR(100) | NOT NULL | Название источника (соцсети, интернет, друзья и т.д.) |
+
+### Таблица `Events` (мероприятия)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор мероприятия |
+| name | VARCHAR(200) | NOT NULL | Название мероприятия (Мастер-класс, Хакатон и т.д.) |
+
+### Таблица `Application` (заявки)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор заявки |
+| parent_id | INTEGER | NOT NULL, FOREIGN KEY → Person(id) | Родитель (кто подаёт заявку) |
+| child_id | INTEGER | NOT NULL, FOREIGN KEY → Person(id) | Ребёнок (участник) |
+| school_id | INTEGER | FOREIGN KEY → School(id) | Школа ребёнка |
+| class_number | INTEGER | | Номер класса (целое число) |
+| phone | VARCHAR(20) | NOT NULL | Контактный телефон родителя |
+| email | VARCHAR(100) | NOT NULL | Email родителя |
+| is_offline | BOOLEAN | NOT NULL DEFAULT TRUE | Формат: TRUE = очный, FALSE = дистанционный |
+| source_id | INTEGER | FOREIGN KEY → Source(id) | Откуда узнал о центре |
+| consent | BOOLEAN | NOT NULL DEFAULT FALSE | Согласие на обработку ПД |
+| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Дата и время создания заявки |
+| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Дата и время последнего изменения |
+
+### Таблица `Application_items` (состав заявки: мероприятия)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| application_id | INTEGER | PRIMARY KEY, FOREIGN KEY → Application(id) | Идентификатор заявки |
+| event_id | INTEGER | PRIMARY KEY, FOREIGN KEY → Events(id) | Идентификатор мероприятия |
+
+*Примечание: составной первичный ключ гарантирует уникальность пары (заявка, мероприятие).*
+
+### Таблица `Notification` (уведомления)
+
+| Поле | Тип данных | Ограничения | Описание |
+|------|------------|-------------|----------|
+| id | SERIAL | PRIMARY KEY | Идентификатор уведомления |
+| application_id | INTEGER | NOT NULL, FOREIGN KEY → Application(id) | Заявка, по которой отправлено уведомление |
+| sent_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | Дата и время отправки |
+| type | VARCHAR(20) | | Тип уведомления (parent – родителю, admin – администратору) |
+
+### 2.3. Первичные и внешние ключи, ограничения
+
+- **Первичные ключи** указаны в таблицах (столбцы id, либо составной ключ в Application_items).
+- **Внешние ключи**:
+  - Person.role_id → Role.id
+  - Application.parent_id → Person.id
+  - Application.child_id → Person.id
+  - Application.school_id → School.id
+  - Application.source_id → Source.id
+  - Application_items.application_id → Application.id
+  - Application_items.event_id → Events.id
+  - Notification.application_id → Application.id
+- **Ограничения CHECK** (можно добавить, но не обязательно):
+  - Для поля is_offline: TRUE или FALSE (булево само по себе).
+  - Для class_number: от 1 до 11 (CHECK (class_number BETWEEN 1 AND 11)).
+  - Для phone: формат проверяется приложением, в БД не обязательно.
+
+### 2.4. SQL-скрипт создания таблиц
+
+Ниже приведён скрипт для СУБД PostgreSQL (совместим с SQLite при замене SERIAL на INTEGER PRIMARY KEY AUTOINCREMENT). Скрипт сгенерирован на основе схемы.
+
+```sql
+-- Создание таблиц
+
+CREATE TABLE Role (
+    id SERIAL PRIMARY KEY,
+    name VARCHAR(50) NOT NULL UNIQUE
+);
+
+CREATE TABLE Person (
+    id SERIAL PRIMARY KEY,
+    first_name VARCHAR(50) NOT NULL,
+    last_name VARCHAR(50) NOT NULL,
+    middle_name VARCHAR(50),
+    role_id INTEGER NOT NULL REFERENCES Role(id)
+);
+
+CREATE TABLE School (
+    id SERIAL PRIMARY KEY,
+    name VARCHAR(100) NOT NULL
+);
+
+CREATE TABLE Source (
+    id SERIAL PRIMARY KEY,
+    name VARCHAR(100) NOT NULL
+);
+
+CREATE TABLE Events (
+    id SERIAL PRIMARY KEY,
+    name VARCHAR(200) NOT NULL
+);
+
+CREATE TABLE Application (
+    id SERIAL PRIMARY KEY,
+    parent_id INTEGER NOT NULL REFERENCES Person(id),
+    child_id INTEGER NOT NULL REFERENCES Person(id),
+    school_id INTEGER REFERENCES School(id),
+    class_number INTEGER,
+    phone VARCHAR(20) NOT NULL,
+    email VARCHAR(100) NOT NULL,
+    is_offline BOOLEAN NOT NULL DEFAULT TRUE,
+    source_id INTEGER REFERENCES Source(id),
+    consent BOOLEAN NOT NULL DEFAULT FALSE,
+    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+CREATE TABLE Application_items (
+    application_id INTEGER NOT NULL REFERENCES Application(id),
+    event_id INTEGER NOT NULL REFERENCES Events(id),
+    PRIMARY KEY (application_id, event_id)
+);
+
+CREATE TABLE Notification (
+    id SERIAL PRIMARY KEY,
+    application_id INTEGER NOT NULL REFERENCES Application(id),
+    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    type VARCHAR(20)
+);