mirror of
https://github.com/EDeev/web-dev.git
synced 2026-06-16 21:11:00 +03:00
61 lines
1.8 KiB
SQL
61 lines
1.8 KiB
SQL
PRAGMA foreign_keys = ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS roles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(50) NOT NULL,
|
|
description TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
login VARCHAR(100) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
last_name VARCHAR(100) NOT NULL,
|
|
first_name VARCHAR(100) NOT NULL,
|
|
middle_name VARCHAR(100),
|
|
role_id INTEGER NOT NULL,
|
|
FOREIGN KEY (role_id) REFERENCES roles(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS genres (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL UNIQUE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS covers (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
filename VARCHAR(255) NOT NULL,
|
|
mime_type VARCHAR(100) NOT NULL,
|
|
md5_hash VARCHAR(32) NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS books (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title VARCHAR(255) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
year INTEGER NOT NULL,
|
|
publisher VARCHAR(255) NOT NULL,
|
|
author VARCHAR(255) NOT NULL,
|
|
pages INTEGER NOT NULL,
|
|
cover_id INTEGER,
|
|
FOREIGN KEY (cover_id) REFERENCES covers(id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS book_genres (
|
|
book_id INTEGER NOT NULL,
|
|
genre_id INTEGER NOT NULL,
|
|
PRIMARY KEY (book_id, genre_id),
|
|
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (genre_id) REFERENCES genres(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS reviews (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
book_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
rating INTEGER NOT NULL CHECK(rating BETWEEN 0 AND 5),
|
|
text TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|