@denislysenko
data engineer

Как создать таблицу аренды книги в библиотеке?

У меня есть таблица orders:

Table orders {
  id int [pk, increment] // auto-increment
  employee int
  user int
  book int  
}

Суть в том, что у нас есть бд библиотеки в которой таблица orders это таблица, где ведется учет тех книг, которые читатели библиотеки (поле user) взяли почитать. Нужно добавить два поля: дату взятия этой книги, дату когда вернули эту книгу назад, и поле, которое показывает сколько времени эта книга уже находится у читателя. Но ведь книгу могли взять и еще не вернуть и я не понимаю как мне реализовать столбцы со временем.

Вот полная схема таблиц в бд:

//// -- LEVEL 1
//// -- Tables and References

// Creating tables
Table employees {
  id int [pk, increment] // auto-increment
  first_name VARCHAR
  last_name VARCHAR
}


Table books {
  id int [pk, increment] // auto-increment
  name VARCHAR
  genre_id int
  author VARCHAR
  year int
}

Table books_genres {
  id int [pk, increment] // auto-increment
  genre_name VARCHAR
}


Table users {
  id int [pk, increment] // auto-increment
  first_name VARCHAR
  last_name VARCHAR
}

Table orders {
  id int [pk, increment] // auto-increment
  employee int
  user int
  book int
  
}

Ref: "books"."genre_id" < "books_genres"."id"

Ref: "orders"."employee" < "employees"."id"

Ref: "orders"."user" < "users"."id"

Ref: "orders"."book" < "books"."id"

Можно скопировать схему таблиц и вставить ее здесь чтобы нагляднее понять как устроена бд:
https://dbdiagram.io/d/61ea67417cf3fc0e7c4f6ead

То есть, мне нужно сделать схему бд библиотеки.
Как правильно написать ddl скрипт, который создаст эту бд?
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
Вам не нужно добавлять третье поле. Достаточно двух: дата когда взяли книгу и когда вернули. Количество дней книги в аренде вычисляется по запросу:
select 
	orders.*,
	DATEDIFF(COALESCE(return_at, CURRENT_DATE), get_at) days_in_rent
from orders;


SQL DATEDIFF Online test
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы