Nincs leírás

AlekseevAP 41ae0ee59d Обновить 'README.md' 1 hónapja
README.md 41ae0ee59d Обновить 'README.md' 1 hónapja

README.md

Таблица 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)

);