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) );