|
|
1 месяц назад | |
|---|---|---|
| README.md | 1 месяц назад |
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 | Контактный телефон родителя |
| 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 – администратору) |
Ниже приведён скрипт для СУБД 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)
);