Логическая модель данных (ERD)


ERD Портал Осмотры
Исходник PlantUML
@startuml

package Управление_пользователями {
class Пользователь < Пользователи > {
  - ID_Пользователь: UUID NN
  - Роль: ID_Роль NN
  - Дата регистрации: datime NN
  - Статуc: string enum NN
  - Фамилия:	string NN
  - Имя:	string NN
  - Отчество:	string
  - Логин:	string NN
  - Пароль:	string NN
  - Номер телефона:	string NN
}

class Верификация < Пользователи > {
  - ID_Верификация: UUID NN
  - Пользователь: ID_Пользователь NN
  - Ссылка:	string NN
  - Дата и время создания ссылки:	datetime NN
  - Срок жизни ссылки:	datetime NN
}

class Роль < Пользователи > {
  - ID_Пользователь: UUD NN
  - Наименование: string NN
  -- Права роли --
}



class Заявка_на_проверку_СБ < Пользователи > {
  - ID_Заявка: UUID NN
  - Пользователь: ID_Пользователь NN
  - Статус: string enum NN
  --Характеристики--
}

}

package Реестр_Исполнителей {

class Исполнитель <  > {
  - ID_Исполнитель: UUID NN
  - Пользователь: ID_Пользователь NN
  - Вид лица: string enum NN
  - Наименование: string NN
  - ИНН: int
  - ОГРН: int
  - Телефон: string
  - Эл. почта: string
  --Характеристики--
}

class Ресурс_Исполнителя < > {
  - ID_Ресурс_Исполнителя: UUID NN
  - Исполнитель: ID_Исполнитель
  - Тип ресурса: ID_Тип_ресурса NN
  - Характеристики: ID_Атрибуты_ресурса NN 
  }


class Характеристика < > {
  - ID_Характеристика: UUID NN
  - Атрибут характеристики: ID_Атрибуты_ресурсов NN
  - Значение: string NN
 }

}

package Реестр_Агентов {

  class Агент < Пользователи > {
  - ID_Агент: UUID NN
  - Пользователь: ID_Пользователь NN
  - Вид лица: string enum NN
  - Наименование: string NN
  - ИНН: int
  - Паспортные данные физ.лица: string
  - Прописка физ.лица: string
  - Телефон: string
  - Эл. почта: string
  --Характеристики--
  }

}

package Справочники {

class Судно < Справочник > {
  - ID_Судно: UUID NN
  - Наименование: string NN
  - Описание: string
  - Статус: string enum NN
  --Характеристики судна--
  - Класс судна: string enum NN
  - ФИО Капитана: string NN
  - ИМО: string NN
  - Флаг: string enum NN
  - Длина, м: float NN
  - Ширина, м: float NN
  - Осадка, м: float NN
  - Площадь обследования, м2: float NN
  - Собственник судна: string NN

}

class Порт < Справочник > {
  - ID_Порт: UUID NN
  - Наименование: string NN
  - Статус: string 
  - Страна: string enum
  - Координаты: string
}

class Причал < Справочник > {
  - ID_Причал: UUID NN
  - Порт: ID_Порт
  - Наименование: string NN
  - Координаты: string
}

class Стоянка < Справочник > {
  - ID_Стоянка: UUID NN
  - Порт: ID_Порт
  - Наименование: string NN
  - Координаты: string

}

class Типы_ресурсов < Справочник > {
  - ID_Типресурса: UUID NN
  - Наименование: string NN
  - Атрибуты: ID_Атрибуты_ресурса NN
}

class Атрибуты_ресурса < Справочник > {
  - ID_Атрибуты_ресурса: UUID NN
  - Название атрибута: string NN
  - Тип данных: string enum
}

}


package Управление_заявками {

class Заявка < Заявки > {
  - ID_Заявка: UUID NN
  - Статус: string enum NN
  - Агент: ID_Агент 
  - Заказчик: ID_Заказчик NN
  - Дата и время создания: datime NN
  - Автор заявки: ID_Пользователь NN
  - Судно: ID_Судно
  --Характеристики заявки--
  - Город проведения: string enum
  - Основание проведения обследования: string 
  - Предыдущий порт: ID_Порт NN
  - Дата и время выхода из порта: date
  - Следующий порт: ID_Порт NN
  - Плановая дата и время захода в порт: date
}

class История_изменений_заявки < Заявки > {
  - ID_История: UUID NN
  - Заявка: ID_Заявка NN
  - Дата и время изменений: datetime NN
  - Автор изменений: ID_пользователь NN
  - Статус до: string
  - Статус после: string
  - Слепок ДО изменений
}

class Заказчик < > {
  - ID_Заказчик: UUID NN
  - Наимеенование: string NN
  - Контактное лицо: string NN
  - Контактный телефон: string NN
  - Контактный e-mail: string NN
}

class План_осмотра < > {
  - ID_План: UUID NN
  - Заявка: ID_Заявка NN
  - Плановая дата и время начала осмотра: datetime
  - Плановая дата и время завершения осмотра: datetime
  - Зона проведения: ID_Стоянка
  - Ресурсы: ID_Ресурса_в_осмотре NN
}


class Осмотр < > {
  - ID_Осмотр: UUID NN
  - Заявка: ID_Заявка NN
  - Дата и время начала: datetime NN
  - Дата и время завершения: datetime NN
  - Продолжительность чч-мм: time NN
  - Место проведения: ID_локация
  - Глубина, м: float NN
  - Температура воздуха, С: int NN
  - Температура воды, С: int NN
  - Течение, уз: float NN
  - Высота волны мин, м: float NN
  - Высота волны макс, м: float NN
  - Скорость ветра мин, м/с: float NN
  - Скорость ветра макс, м/с: float NN
  - Видимосто, м: float NN
  - Результат: string enum
}

class Ресурсы_в_осмотре < > {
  - ID_Ресурса_в_осмотре: UUID NN
  - План: ID_План
  - Ресурс: ID_Ресурс_Исполнителя

}

class Комментарий < > {
  - ID_Комментарий: UUID NN
  - Заявка: ID_Заявка NN
  - Автор: ID_Пользователь NN
  - Текст: string NN
  - Дата и время создания: datetime NN
}

class Файл < > {
  - ID_Файл: UUID NN
  - Название: string NN
  - Формат: string NN
  - Заявка: ID_Заявка NN
  - Автор: ID_Пользователь NN
  - Дата и время создания: datetime NN
}

class Статистика  #palegreen {
  - Кол-во заявок выполненных
  - Кол-во заявок отмененных
  - Кол-во заявок невыполненных
  - На конец месяца: date 
  - На конец недели: date
  - На конец дня: date
}

}

package Уведомления {
class Уведомление < > {
  - ID_Уведомление: UUID NN
  - Заявка: ID_Заявка NN
  - Текст: string NN
  - Дата и время создания: datetime NN
  - Получатель: ID_Пользователь NN
  - Статус: string enum
}

}


Порт --{ Причал
Порт --{ Стоянка


Пользователь -- Верификация
Пользователь }-- Роль
Пользователь --{ Комментарий
Пользователь }-- Агент
Пользователь }-- Исполнитель
Пользователь }--{ Уведомление
Пользователь -- Заявка_на_проверку_СБ
Пользователь --{ История_изменений_заявки

Исполнитель --{ Ресурс_Исполнителя
Ресурс_Исполнителя --{ Характеристика
Ресурс_Исполнителя }-- Типы_ресурсов
Типы_ресурсов --{ Атрибуты_ресурса

Характеристика }-- Атрибуты_ресурса

Заявка "1..n" }-up- "1" Агент
Заявка "1..n" }-up- "1" Исполнитель
Заявка "1..n" }-- "1" Заказчик
Заявка }-- Порт
Заявка }-- Судно
Заявка --{ Файл
Заявка --{ Комментарий
Заявка --{ Уведомление
Заявка -- План_осмотра
План_осмотра --{ Ресурсы_в_осмотре
План_осмотра -- Стоянка
Ресурс_Исполнителя --{ Ресурсы_в_осмотре

Заявка -- Осмотр
Заявка --{ История_изменений_заявки

@enduml


Текст в plantuml

@startuml



package Управление_пользователями {
class Пользователь < Пользователи > {
  - ID_Пользователь: UUID NN
  - Роль: ID_Роль NN
  - Дата регистрации: datime NN
  - Статуc: string enum NN
  - Фамилия:  string NN
  - Имя:  string NN
  - Отчество: string
  - Логин:  string NN
  - Пароль: string NN
  - Номер телефона: string NN
}

class Верификация < Пользователи > {
  - ID_Верификация: UUID NN
  - Пользователь: ID_Пользователь NN
  - Ссылка: string NN
  - Дата и время создания ссылки: datetime NN
  - Срок жизни ссылки:  datetime NN
}

class Роль < Пользователи > {
  - ID_Пользователь: UUD NN
  - Наименование: string NN
  -- Права роли --
}


class Заявка_на_проверку_СБ < Пользователи > {
  - ID_Заявка: UUID NN
  - Пользователь: ID_Пользователь NN
  - Статус: string enum NN
  --Характеристики--
}

}

package Реестр_Исполнителей {

class Исполнитель <  > {
  - ID_Исполнитель: UUID NN
  - Пользователь: ID_Пользователь NN
  - Вид лица: string enum NN
  - Наименование: string NN
  - ИНН: string
  - ОГРН: string
  - Телефон: string
  - Эл. почта: string
  --Характеристики--
}

class Ресурс_Исполнителя < > {
  - ID_Ресурс_Исполнителя: UUID NN
  - Исполнитель: ID_Исполнитель
  - Тип ресурса: ID_Тип_ресурса NN
  - Характеристики: ID_Атрибуты_ресурса NN
  }


class Характеристика < > {
  - ID_Характеристика: UUID NN
  - Атрибут характеристики: ID_Атрибуты_ресурсов NN
  - Значение: string NN
 }

}

package Реестр_Агентов {

  class Агент < Пользователи > {
  - ID_Агент: UUID NN
  - Пользователь: ID_Пользователь NN
  - Вид лица: string enum NN
  - Наименование: string NN
  - ИНН: string
  - Телефон: string
  - Эл. почта: string
  --Характеристики--
  }

}

package Справочники {

class Судно < Справочник > {
  - ID_Судно: UUID NN
  - Наименование: string NN
  - Описание: string
  - Статус: string enum NN
  --Характеристики судна--
  - Класс судна: string enum NN
  - ФИО Капитана: string NN
  - ИМО: string NN
  - Флаг: string enum NN
  - Длина, м: float NN
  - Ширина, м: float NN
  - Осадка, м: float NN
  - Площадь обследования, м2: float NN
  - Собственник судна: string NN

}

class Порт < Справочник > {
  - ID_Порт: UUID NN
  - Наименование: string NN
  - Статус: string
  - Страна: string enum
  - Координаты: string
}

class Причал < Справочник > {
  - ID_Причал: UUID NN
  - Порт: ID_Порт
  - Наименование: string NN
  - Координаты: string
}

class Стоянка < Справочник > {
  - ID_Стоянка: UUID NN
  - Порт: ID_Порт
  - Наименование: string NN
  - Координаты: string

}

class Типы_ресурсов < Справочник > {
  - ID_Типресурса: UUID NN
  - Наименование: string NN
  - Атрибуты: ID_Атрибуты_ресурса NN
}

class Атрибуты_ресурса < Справочник > {
  - ID_Атрибуты_ресурса: UUID NN
  - Название атрибута: string NN
  - Тип данных: string enum
}

}


package Управление_заявками {

class Заявка < Заявки > {
  - ID_Заявка: UUID NN
  - Статус: string enum NN
  - Агент: ID_Агент
  - Заказчик: ID_Заказчик NN
  - Дата и время создания: datime NN
  - Автор заявки: ID_Пользователь NN
  - Судно: ID_Судно
  --Характеристики заявки--
  - Город проведения: string enum
  - Основание проведения обследования: string
  - Предыдущий порт: ID_Порт NN
  - Дата и время выхода из порта: date
  - Следующий порт: ID_Порт NN
  - Плановая дата и время захода в порт: date
}

class История_изменений_заявки < Заявки > {
  - ID_История: UUID NN
  - Заявка: ID_Заявка NN
  - Дата и время изменений: datetime NN
  - Автор изменений: ID_пользователь NN
  - Статус до: string
  - Статус после: string
  - Слепок ДО изменений
}

class Заказчик < > {
  - ID_Заказчик: UUID NN
  - Наимеенование: string NN
  - Контактное лицо: string NN
  - Контактный телефон: string NN
  - Контактный e-mail: string NN
}

class План_осмотра < > {
  - ID_План: UUID NN
  - Заявка: ID_Заявка NN
  - Плановая дата и время начала осмотра: datetime
  - Плановая дата и время завершения осмотра: datetime
  - Зона проведения: ID_Стоянка
  - Ресурсы: ID_Ресурса_в_осмотре NN
}


class Осмотр < > {
  - ID_Осмотр: UUID NN
  - Заявка: ID_Заявка NN
  - Дата и время начала: datetime NN
  - Дата и время завершения: datetime NN
  - Продолжительность чч-мм: time NN
  - Место проведения: ID_локация
  - Глубина, м: float NN
  - Температура воздуха, С: int NN
  - Температура воды, С: int NN
  - Течение, уз: float NN
  - Высота волны мин, м: float NN
  - Высота волны макс, м: float NN
  - Скорость ветра мин, м/с: float NN
  - Скорость ветра макс, м/с: float NN
  - Видимосто, м: float NN
  - Результат: string enum
}

class Ресурсы_в_осмотре < > {
  - ID_Ресурса_в_осмотре: UUID NN
  - План: ID_План
  - Ресурс: ID_Ресурс_Исполнителя

}

class Комментарий < > {
  - ID_Комментарий: UUID NN
  - Заявка: ID_Заявка NN
  - Автор: ID_Пользователь NN
  - Текст: string NN
  - Дата и время создания: datetime NN
}

class Файл < > {
  - ID_Файл: UUID NN
  - Название: string NN
  - Формат: string NN
  - Заявка: ID_Заявка NN
  - Автор: ID_Пользователь NN
  - Дата и время создания: datetime NN
}

class Статистика  #palegreen {
  - Кол-во заявок выполненных
  - Кол-во заявок отмененных
  - Кол-во заявок невыполненных
  - На конец месяца: date
  - На конец недели: date
  - На конец дня: date
}

}

package Уведомления {
class Уведомление < > {
  - ID_Уведомление: UUID NN
  - Заявка: ID_Заявка NN
  - Текст: string NN
  - Дата и время создания: datetime NN
  - Получатель: ID_Пользователь NN
  - Статус: string enum
}

}


Порт --{ Причал
Порт --{ Стоянка


Пользователь -- Верификация
Пользователь }-- Роль
Пользователь --{ Комментарий
Пользователь }-- Агент
Пользователь }-- Исполнитель
Пользователь }--{ Уведомление
Пользователь -- Заявка_на_проверку_СБ
Пользователь --{ История_изменений_заявки

Исполнитель --{ Ресурс_Исполнителя
Ресурс_Исполнителя --{ Характеристика
Ресурс_Исполнителя }-- Типы_ресурсов
Типы_ресурсов --{ Атрибуты_ресурса

Характеристика }-- Атрибуты_ресурса

Заявка "1..n" }-up- "1" Агент
Заявка "1..n" }-up- "1" Исполнитель
Заявка "1..n" }-- "1" Заказчик
Заявка }-- Порт
Заявка }-- Судно
Заявка --{ Файл
Заявка --{ Комментарий
Заявка --{ Уведомление
Заявка -- План_осмотра
План_осмотра --{ Ресурсы_в_осмотре
План_осмотра -- Стоянка
Ресурс_Исполнителя --{ Ресурсы_в_осмотре

Заявка -- Осмотр
Заявка --{ История_изменений_заявки

@enduml

Комментарии (2) · по состоянию на 2026-09-15

К странице

claude-code · 2026-09-15 09:15 МСК · открыт · 73074988

[Ревью] Критично: ERD доступна только как PNG/SVG-вложение, нет текстового представления сущностей и связей — сверить диаграмму со словарём данных программным способом невозможно, AI-агент не сможет надёжно распарсить связи из картинки. Нужна текстовая/DSL-версия схемы (например, DBML, Mermaid ER, или таблица связей) для автоматической валидации.

claude-code · 2026-09-15 13:41 МСК · 73075516

[Ревью] Пока актуально: страница по-прежнему содержит только PNG/SVG-вложение без текстового представления сущностей и связей. Рекомендация остаётся в силе: добавить текстовую/DSL-версию схемы (DBML, Mermaid ER или таблицу связей) для автоматической сверки со словарём данных.