Skip to content
Snippets Groups Projects

Задание 1

Архитектура базы данных для интернет-магазина

Задание 1

Сущности и их связи:

users

  • id - первичный ключ
  • name - имя пользователя
  • email

profiles

  • id - внешний ключ (связь с users)
  • phone - номер телефона
  • birthdate - дата рождения
  • Связь: one-to-one (один профиль принадлежит одному пользователю)

orders

  • id - первичный ключ
  • owner_id - внешний ключ (связь с users)
  • Связь: one-to-one (каждый заказ принадлежит одному пользователю)

products

  • id - первичный ключ
  • title - название товара
  • price - цена
  • description - описание товара

ordered_products

  • product_id - внешний ключ (связь с products)
  • order_id - внешний ключ (связь с orders)
  • Связь: many-to-many (один товар может входить в несколько заказов, один заказ может содержать несколько товаров)
  • Промежуточная таблица используется для нормализации базы данных (соответствие первой нормальной форме).

Целостность данных

Целостность данных обеспечивается за счет удаления из ordered_products записей, соответствующих удаленному заказу.


Задание 2

Архитектура базы данных для системы управления обучением (LMS)

Задание 2

Сущности и связи:

  • students

    • id - первичный ключ
    • name - имя студента
    • email - электронная почта студента
  • students_profiles

    • student_id - внешний ключ для связи с таблицей students
    • address - адрес проживания
    • birthdate - дата рождения
    • Связь one-to-one, так как один профиль принадлежит только одному студенту
  • teachers

    • id - первичный ключ
    • name - имя преподавателя
    • email - электронная почта преподавателя
  • teachers_profiles

    • teacher_id - внешний ключ для связи с таблицей teachers
    • specialization - специализация преподавателя
    • phone - контактный номер телефона
    • Связь one-to-one, так как один профиль принадлежит только одному преподавателю
  • courses

    • id - первичный ключ
    • title - название курса
    • description - описание курса
  • students_courses

    • course_id - внешний ключ для связи с курсом
    • student_id - внешний ключ для связи со студентом
    • enrollment_date - дата записи на курс
    • Связь many-to-many, так как один студент может записаться на несколько курсов, а один курс может иметь много студентов
  • teachers_courses

    • course_id - внешний ключ для связи с курсом
    • teacher_id - внешний ключ для связи с преподавателем
    • Связь many-to-many, так как один курс может вести несколько преподавателей, а один преподаватель может вести несколько курсов
  • sequences_courses

    • parent_course - внешний ключ на курс-предшественник
    • child_course - внешний ключ на следующий курс
    • Позволяет выстраивать курсы в последовательности, формируя образовательные программы

Целостность данных обеспечивается путем удаления записей из зависимых таблиц при удалении связанных студентов, преподавателей или курсов.

  • дополнительную информацию о студентах добавлять в таблицу students_profiles
  • дополнительную информацию о преподавателях добавлять в таблицу teachers_profiles

Задание 3

Архитектура базы данных для системы управления проектами

Задание 3

Сущности и связи:

  • users

    • id - первичный ключ
    • name - имя пользователя
    • email - электронная почта пользователя
  • users_profiles

    • user_id - внешний ключ для связи с таблицей users
    • biography - биография пользователя
    • phone - контактный номер телефона
    • Связь one-to-one, так как один профиль принадлежит только одному пользователю
  • projects

    • id - первичный ключ
    • title - название проекта
    • description - описание проекта
  • users_projects

    • user_id - внешний ключ для связи с пользователем
    • project_id - внешний ключ для связи с проектом
    • user_role - внешний ключ для определения роли пользователя в проекте
    • entry_date - дата вступления в проект
    • Связь many-to-many, так как пользователь может участвовать в нескольких проектах, а один проект может включать нескольких пользователей
  • roles

    • id - первичный ключ
    • name - название роли
    • Используется для определения ролей пользователей в проектах
  • tasks

    • id - первичный ключ
    • title - название задачи
    • description - описание задачи
    • status - внешний ключ на статус задачи
    • priority - внешний ключ на приоритет задачи
    • project_id - внешний ключ на проект, к которому относится задача
  • task_statuses

    • id - первичный ключ
    • name - название статуса задачи
  • task_priorities

    • id - первичный ключ
    • name - уровень приоритета задачи
  • tasks_sequenses

    • parent_task - внешний ключ на основную задачу
    • child_task - внешний ключ на подзадачу
    • Позволяет выстраивать задачи в иерархии
  • tasks_tags

    • task_id - внешний ключ для связи с задачей
    • tag_id - внешний ключ для связи с тегом
    • Связь many-to-many, так как одна задача может иметь несколько тегов, а один тег может относиться к разным задачам
  • tags

    • id - первичный ключ
    • name - название тега
  • comments

    • id - первичный ключ
    • content - текст комментария
    • task_id - внешний ключ для связи с задачей
    • Позволяет оставлять комментарии к задачам
  • files

    • id - первичный ключ
    • title - название файла
    • content - содержимое файла (bytea)
    • task_id - внешний ключ для связи с задачей
    • Позволяет прикреплять файлы к задачам

Целостность данных обеспечивается каскадным удалением зависимых записей при удалении проектов, задач или пользователей.

Для корректной масштабируемости системы необходимо соблюдать следующие правила:

  • дополнительную информацию о пользователях добавлять в таблицу users_profiles