38 lines
1.5 KiB
SQL
38 lines
1.5 KiB
SQL
CREATE TABLE users (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
age SMALLINT CHECK (age > 0),
|
|
email VARCHAR(100) NOT NULL UNIQUE,
|
|
country VARCHAR(50),
|
|
is_active BOOLEAN DEFAULT true,
|
|
created_at TIMESTAMPTZ NOT NULL
|
|
);
|
|
-- age - для возраста не нужны болшие числа
|
|
-- country - можно было бы использовать VARCHAR(2), я бы тут спросил у тимлида как будет удобней использовать поле)
|
|
-- created_at - нужно знать не только дату но и время создания/регистрации
|
|
-- id - если не прописать not null в primary key, то not null ставится автоматически?
|
|
|
|
CREATE TABLE products (
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
category VARCHAR(50),
|
|
price DECIMAL(10, 2) NOT NULL,
|
|
in_stock BOOLEAN DEFAULT true,
|
|
);
|
|
|
|
CREATE TABLE orders(
|
|
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
user_id INT,
|
|
order_date TIMESTAMPTZ NOT NULL,
|
|
status VARCHAR(20),
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
);
|
|
-- status - лучше прописать словами статус, так понятней будет. Я бы сюда поставил ENUM
|
|
|
|
CREATE TABLE order_items(
|
|
order_id INT NOT NULL,
|
|
product_id INT NOT NULL,
|
|
quantity INT NOT NULL,
|
|
price_at_purchase DECIMAL(10, 2) NOT NULL,
|
|
PRIMARY KEY (order_id, product_id)
|
|
); |