TGViewer
Мастерская IT-решений Мастерская IT-решений @solutionstudio · 161 subscribers
Post #66 57
📜 Физическая модель данных 📜
На данном этапе разрабатывается физическая структура базы данных, учитывающая особенности выбранной СУБД. Определяются типы полей, индексы, ограничения целостности, триггеры и другие элементы физической структуры.

Структура

🪧Книги
Обратите внимание на типы данных title ISBN. в чем разница?
Название книги - поле переменной длины. ISBN - фиксированной длины. Если символов меньше 13, они заполняются пробелами
Books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
isbn CHAR(13),
publicationyear YEAR,
pagescount INT,
availabilitystatus ENUM('Available', 'Borrowed', ‘Borrowed_here’),
location VARCHAR(255)
)


🪧 Соединение автора и книги
Таблица состоит полностью из внешних ключей
BookAuthors (
book_id INT,
author_id INT,
FOREIGN KEY (book_id) REFERENCES Books(id),
FOREIGN KEY (author_id) REFERENCES Authors(id)
)


🪧 Соединение жанра и книги
BookGenres (
book_id INT NOT NULL,
genre_id INT NOT NULL,
PRIMARY KEY(book_id, genre_id),
FOREIGN KEY (book_id) REFERENCES Books(id),
FOREIGN KEY (genre_id) REFERENCES Genres(id)
)



🪧 Авторы
Authors (
id INT PRIMARY KEY AUTO_INCREMENT,
fullname VARCHAR(255),
biography TEXT
)


🪧 Жанры книг
Genres (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
)


🪧 Отдел хранения книг
Departments (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
)

Клиенты
Clients (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255),
lastname VARCHAR(255),
readerticketnumber VARCHAR(255),
phonenumber VARCHAR(255),
email VARCHAR(255),
address TEXT
)


🪧Выдача книг
А вот и составной первичный ключ. У записи не делаем свой идентификатор, а делаем первичный ключ из книги и даты выдачи. Одну книгу нельзя выдать 2 раза в один момент. Однозначная идентификация книги обеспечена
Loans (
book_id INT,
issuedate DATE,
user_id INT,
returndate DATE,
actualreturndate DATE NULLABLE,
loantype ENUM('ReadingRoom', 'HomeLoan'),
PRIMARY KEY(book_id, issuedate),
FOREIGN KEY (book_id) REFERENCES Books(id),
FOREIGN KEY (user_id) REFERENCES Users(id)
)


🪧 Штрафы
Fines (
id INT PRIMARY KEY AUTO_INCREMENT,
loan_id INT,
amount DECIMAL(10,2),
reason TEXT,
status ENUM('Paid', 'Unpaid'),
FOREIGN KEY (loan_id) REFERENCES Loans(id)
)
More from @solutionstudio
  1. Sep 23, 2026Начинаем розыгрыш 1 билета на Стачку! Стачка - это шанс послушать крутых спикеров, понетво…
  2. Sep 22, 2026Привет, дорогие! Соскучились?) А я к вам с чем-то приятным. Все же знают, что скоро идём н…
  3. Aug 11, 2026Подводные камни JWT 🟣 Проблема инвалидации Это ахиллесова пята stateless-токенов. Предста…
  4. Aug 5, 2026JWT. Коробка с секретом, в которую можно заглянуть В прошлом посте мы остановились на том,…
  5. Jul 31, 2026Продолжаем мысль предыдущего поста. ❇️ Альтернатива: "Коробка с секретом" А что, если серв…
  6. Jul 28, 2026Точка входа. Почему сессия это сложно, и при чем тут токены Привет, коллеги. Сегодня вкаты…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →