156 lines
4.8 KiB
MySQL
156 lines
4.8 KiB
MySQL
|
|
CREATE TABLE users (
|
||
|
|
user_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
||
|
|
email VARCHAR(100) UNIQUE NOT NULL,
|
||
|
|
phone_number VARCHAR(20),
|
||
|
|
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
status ENUM('active', 'inactive', 'suspended') DEFAULT 'active'
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE customers (
|
||
|
|
customer_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
user_id INT NOT NULL,
|
||
|
|
full_name VARCHAR(100),
|
||
|
|
birth_date DATE,
|
||
|
|
registration_date DATE,
|
||
|
|
customer_type ENUM('individual', 'business', 'vip') DEFAULT 'individual',
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE user_addresses (
|
||
|
|
address_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
user_id INT NOT NULL,
|
||
|
|
customer_id INT,
|
||
|
|
address_line1 VARCHAR(200),
|
||
|
|
address_line2 VARCHAR(200),
|
||
|
|
city_id INT,
|
||
|
|
postal_code VARCHAR(20),
|
||
|
|
is_default BOOLEAN DEFAULT FALSE,
|
||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(user_id),
|
||
|
|
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE products (
|
||
|
|
product_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
product_code VARCHAR(50) UNIQUE NOT NULL,
|
||
|
|
product_name VARCHAR(200) NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
price DECIMAL(10,2) NOT NULL,
|
||
|
|
cost_price DECIMAL(10,2),
|
||
|
|
category_id INT,
|
||
|
|
supplier_id INT,
|
||
|
|
stock_quantity INT DEFAULT 0,
|
||
|
|
reorder_level INT DEFAULT 10,
|
||
|
|
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
modified_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE items (
|
||
|
|
item_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
product_id INT NOT NULL,
|
||
|
|
sku VARCHAR(50) UNIQUE,
|
||
|
|
variant_name VARCHAR(100),
|
||
|
|
additional_price DECIMAL(10,2) DEFAULT 0,
|
||
|
|
inventory_count INT DEFAULT 0,
|
||
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE categories (
|
||
|
|
category_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
category_name VARCHAR(100) NOT NULL,
|
||
|
|
parent_category_id INT,
|
||
|
|
category_path VARCHAR(500),
|
||
|
|
FOREIGN KEY (parent_category_id) REFERENCES categories(category_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE orders (
|
||
|
|
order_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
order_number VARCHAR(50) UNIQUE NOT NULL,
|
||
|
|
customer_id INT NOT NULL,
|
||
|
|
user_id INT,
|
||
|
|
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
order_status ENUM('pending', 'processing', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
|
||
|
|
total_amount DECIMAL(10,2),
|
||
|
|
net_amount DECIMAL(10,2),
|
||
|
|
shipping_address_id INT,
|
||
|
|
billing_address_id INT,
|
||
|
|
payment_method VARCHAR(50)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE order_items (
|
||
|
|
order_item_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
order_id INT NOT NULL,
|
||
|
|
item_id INT,
|
||
|
|
product_id INT,
|
||
|
|
quantity INT NOT NULL,
|
||
|
|
unit_price DECIMAL(10,2) NOT NULL,
|
||
|
|
discount DECIMAL(10,2) DEFAULT 0,
|
||
|
|
subtotal DECIMAL(10,2),
|
||
|
|
FOREIGN KEY (order_id) REFERENCES orders(order_id),
|
||
|
|
FOREIGN KEY (item_id) REFERENCES items(item_id),
|
||
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE shipments (
|
||
|
|
shipment_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
order_id INT NOT NULL,
|
||
|
|
shipment_date DATE,
|
||
|
|
estimated_delivery DATE,
|
||
|
|
actual_delivery DATE,
|
||
|
|
carrier VARCHAR(100),
|
||
|
|
tracking_number VARCHAR(100),
|
||
|
|
status ENUM('preparing', 'shipped', 'in_transit', 'delivered') DEFAULT 'preparing'
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE product_suppliers (
|
||
|
|
product_id INT NOT NULL,
|
||
|
|
supplier_id INT NOT NULL,
|
||
|
|
is_primary BOOLEAN DEFAULT FALSE,
|
||
|
|
purchase_price DECIMAL(10,2),
|
||
|
|
PRIMARY KEY (product_id, supplier_id),
|
||
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE user_wishlists (
|
||
|
|
user_id INT NOT NULL,
|
||
|
|
product_id INT NOT NULL,
|
||
|
|
added_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
priority INT DEFAULT 1,
|
||
|
|
PRIMARY KEY (user_id, product_id),
|
||
|
|
FOREIGN KEY (user_id) REFERENCES users(user_id),
|
||
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE payments (
|
||
|
|
payment_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
order_id INT NOT NULL,
|
||
|
|
payment_date DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
amount DECIMAL(10,2),
|
||
|
|
payment_type VARCHAR(50),
|
||
|
|
transaction_id VARCHAR(100),
|
||
|
|
payment_status ENUM('pending', 'completed', 'failed', 'refunded')
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE reviews (
|
||
|
|
review_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
product_id INT NOT NULL,
|
||
|
|
user_id INT NOT NULL,
|
||
|
|
rating INT CHECK (rating >= 1 AND rating <= 5),
|
||
|
|
comment TEXT,
|
||
|
|
review_date DATE,
|
||
|
|
helpful_count INT DEFAULT 0
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE promotions (
|
||
|
|
promo_id INT PRIMARY KEY AUTO_INCREMENT,
|
||
|
|
promo_code VARCHAR(50) UNIQUE,
|
||
|
|
promo_name VARCHAR(100),
|
||
|
|
discount_type ENUM('percentage', 'fixed', 'buy_one_get_one'),
|
||
|
|
discount_value DECIMAL(10,2),
|
||
|
|
start_date DATE,
|
||
|
|
end_date DATE,
|
||
|
|
minimum_purchase DECIMAL(10,2)
|
||
|
|
);
|