CREATE TABLE Role (
RoleID INT PRIMARY KEY,
Name ENUM('Admin', 'User', 'Staff') NOT NULL
);
CREATE TABLE Category (
CategoryID BIGINT PRIMARY KEY,
CategoryName NVARCHAR(255) NOT NULL
);
CREATE TABLE Brand (
BrandID INT PRIMARY KEY,
BrandName NVARCHAR(255) NOT NULL
);
CREATE TABLE SkinType (
SkintypeID BIGINT PRIMARY KEY,
TypeName NVARCHAR(255) NOT NULL,
Description NVARCHAR(255)
);
CREATE TABLE Supplier (
SupplierID BIGINT PRIMARY KEY,
Name NVARCHAR(255) NOT NULL,
Phone NVARCHAR(20),
Address NVARCHAR(255)
);
CREATE TABLE Product (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(255) NOT NULL,
Price FLOAT NOT NULL,
StockQuantity INT NOT NULL,
CategoryID INT NOT NULL,
ImageURL NVARCHAR(255),
BrandID INT NOT NULL,
SupplierID BIGINT NOT NULL,
CongDung NVARCHAR(255),
SkinType BIGINT,
FOREIGN KEY (CategoryID) REFERENCES Category(CategoryID),
FOREIGN KEY (BrandID) REFERENCES Brand(BrandID),
FOREIGN KEY (SupplierID) REFERENCES Supplier(SupplierID),
FOREIGN KEY (SkinType) REFERENCES SkinType(SkintypeID)
);
CREATE TABLE [User] (
UserID INT PRIMARY KEY,
Name NVARCHAR(255) NOT NULL,
Email NVARCHAR(255) NOT NULL UNIQUE,
Password NVARCHAR(255) NOT NULL,
Phone NVARCHAR(15),
Address NVARCHAR(255),
RoleID INT,
FOREIGN KEY (RoleID) REFERENCES Role(RoleID)
);
CREATE TABLE [Order] (
OrderID BIGINT PRIMARY KEY,
OrderDate DATETIME NOT NULL,
Status BIGINT NOT NULL,
Discount BIGINT,
UserID INT,
Delivery BIGINT,
DeliveryDate DATETIME,
PaymentID BIGINT,
FOREIGN KEY (UserID) REFERENCES [User](UserID),
FOREIGN KEY (PaymentID) REFERENCES Payment(PaymentID)
);
CREATE TABLE OrderDetail (
OrderID BIGINT,
ProductID BIGINT,
Quantity INT NOT NULL,
Price DECIMAL(18, 2) NOT NULL,
PRIMARY KEY (OrderID, ProductID),
FOREIGN KEY (OrderID) REFERENCES [Order](OrderID),
FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);
CREATE TABLE Payment (
PaymentID BIGINT PRIMARY KEY,
Status ENUM('Paid', 'Unpaid', 'Pending') NOT NULL,
PaymentMethod ENUM('Credit', 'Debit', 'Cash') NOT NULL,
PaymentDate DATETIME NOT NULL,
Amount DECIMAL(18, 2) NOT NULL
);
CREATE TABLE Cart (
CartID BIGINT PRIMARY KEY,
ProductID BIGINT NOT NULL,
UserID INT NOT NULL,
Quantity BIGINT NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
FOREIGN KEY (UserID) REFERENCES [User](UserID)
);
CREATE TABLE Feedback (
FeedbackID BIGINT PRIMARY KEY,
ProductID BIGINT,
UserID INT,
Comment NVARCHAR(255),
Rating BIGINT,
CreatedAt DATETIME,
Image NVARCHAR(255),
FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
FOREIGN KEY (UserID) REFERENCES [User](UserID)
);
CREATE TABLE Promotion (
PromotionID BIGINT PRIMARY KEY,
StartDate DATETIME,
EndDate DATETIME,
PromotionName NVARCHAR(255),
Description NVARCHAR(255),
DiscountRate DECIMAL(5, 2)
);
CREATE TABLE Promotion_Product (
PromotionID INT,
ProductID INT,
PRIMARY KEY (PromotionID, ProductID),
FOREIGN KEY (PromotionID) REFERENCES Promotion(PromotionID),
FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
); CREATE TABLE Category_Product (
CategoryID INT,
ProductID INT,
PRIMARY KEY (CategoryID, ProductID),
FOREIGN KEY (CategoryID) REFERENCES Category(CategoryID),
FOREIGN KEY (ProductID) REFERENCES Product(ProductID)
);