Create Database Clothing - Shop
Create Database Clothing - Shop
GO
USE clothing_shop;
GO
-- Users table
CREATE TABLE users (
id INT IDENTITY(1,1) PRIMARY KEY,
username NVARCHAR(50) UNIQUE NOT NULL,
email NVARCHAR(100) UNIQUE NOT NULL,
password_hash NVARCHAR(255) NOT NULL,
full_name NVARCHAR(100) NOT NULL,
gender NVARCHAR(10) CHECK (gender IN ('male', 'female', 'other')) NOT NULL,
mobile NVARCHAR(20),
avatar NVARCHAR(255),
role NVARCHAR(20) CHECK (role IN ('admin', 'sale', 'marketing', 'customer'))
NOT NULL,
status NVARCHAR(20) CHECK (status IN ('active', 'inactive', 'pending')) DEFAULT
'pending',
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE()
);
-- Categories table
CREATE TABLE categories (
id INT IDENTITY(1,1) PRIMARY KEY,
name NVARCHAR(100) NOT NULL,
description NVARCHAR(MAX),
parent_id INT NULL,
level INT NOT NULL DEFAULT 1,
status NVARCHAR(20) CHECK (status IN ('active', 'inactive')) DEFAULT 'active',
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE NO ACTION
);
GO
-- Products table
CREATE TABLE products (
id INT IDENTITY(1,1) PRIMARY KEY,
title NVARCHAR(255) NOT NULL,
category_id INT NOT NULL,
description NVARCHAR(MAX),
original_price DECIMAL(10,2) NOT NULL,
sale_price DECIMAL(10,2) NOT NULL,
thumbnail NVARCHAR(255),
status NVARCHAR(20) CHECK (status IN ('active', 'inactive', 'EOStock')) DEFAULT
'EOStock',
is_combo BIT DEFAULT 0,
combo_group_id NVARCHAR(50),
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE(),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
-- Orders table
CREATE TABLE orders (
id INT IDENTITY(1,1) PRIMARY KEY,
user_id INT, -- ID người dùng (NULL nếu là khách vãng lai)
status NVARCHAR(20) CHECK (status IN ('pending_pay','pending', 'processing',
'shipping', 'completed', 'returned', 'cancelled')) NOT NULL DEFAULT 'pending',
total_amount DECIMAL(10,2) NOT NULL,
recipient_name NVARCHAR(100) NOT NULL,
recipient_email NVARCHAR(100) NOT NULL,
recipient_phone NVARCHAR(20) NOT NULL,
recipient_address NVARCHAR(MAX) NOT NULL,
shipping_code NVARCHAR(MAX),
shiping_name NVARCHAR(MAX),
notes NVARCHAR(MAX),
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE(),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
-- Posts table
CREATE TABLE posts (
id INT IDENTITY(1,1) PRIMARY KEY,
title NVARCHAR(255) NOT NULL,
thumbnail NVARCHAR(255),
summary NVARCHAR(MAX),
content NVARCHAR(MAX) NOT NULL,
author_id INT NOT NULL,
is_featured BIT DEFAULT 0,
status NVARCHAR(20) CHECK (status IN ('draft', 'published', 'archived'))
DEFAULT 'draft',
created_at DATETIME2 DEFAULT GETDATE(),
updated_at DATETIME2 DEFAULT GETDATE(),
FOREIGN KEY (author_id) REFERENCES users(id)
);
-- Sliders table
CREATE TABLE sliders (
id INT IDENTITY(1,1) PRIMARY KEY,
title NVARCHAR(255) NOT NULL,
image_url NVARCHAR(255) NOT NULL,
link NVARCHAR(255),
status NVARCHAR(20) CHECK (status IN ('active', 'inactive')) DEFAULT 'active',
display_order INT DEFAULT 0,
notes NVARCHAR(MAX)
);
-- Settings table
CREATE TABLE dbo.footer_settings (
id INT IDENTITY(1,1) PRIMARY KEY,
type NVARCHAR(50) NOT NULL CHECK (type IN ('social', 'contact', 'info')),
field_name NVARCHAR(50) NOT NULL,
value NVARCHAR(MAX) NOT NULL,
image NVARCHAR(255) NULL,
status NVARCHAR(20) CHECK (status IN ('active', 'inactive')) DEFAULT 'active'
);