fork download
  1. CREATE DATABASE IF NOT EXISTS glasses_shop_db
  2. CHARACTER SET utf8mb4
  3. COLLATE utf8mb4_unicode_ci;
  4.  
  5. USE glasses_shop_db;
  6.  
  7.  
  8.  
  9.  
  10. DROP TABLE IF EXISTS Product_Discount;
  11. DROP TABLE IF EXISTS Comments;
  12. DROP TABLE IF EXISTS Product_Order;
  13. DROP TABLE IF EXISTS Orders;
  14. DROP TABLE IF EXISTS User_Address;
  15. DROP TABLE IF EXISTS User_Role;
  16. DROP TABLE IF EXISTS Products;
  17. DROP TABLE IF EXISTS Users;
  18. DROP TABLE IF EXISTS Vouchers;
  19. DROP TABLE IF EXISTS Discounts;
  20. DROP TABLE IF EXISTS Address;
  21. DROP TABLE IF EXISTS Categories;
  22. DROP TABLE IF EXISTS Brands;
  23. DROP TABLE IF EXISTS Roles;
  24.  
  25.  
  26.  
  27.  
  28. -- 1. Bảng Vai trò
  29. CREATE TABLE Roles (
  30. role_id INT PRIMARY KEY AUTO_INCREMENT,
  31. role_name VARCHAR(255) NOT NULL UNIQUE
  32. );
  33.  
  34. -- 2. Bảng Thương hiệu
  35. CREATE TABLE Brands (
  36. brand_id INT PRIMARY KEY AUTO_INCREMENT,
  37. brand_name VARCHAR(255) NOT NULL,
  38. description VARCHAR(255)
  39. );
  40.  
  41. -- 3. Bảng Danh mục sản phẩm
  42. CREATE TABLE Categories (
  43. category_id INT PRIMARY KEY AUTO_INCREMENT,
  44. category_name VARCHAR(255) NOT NULL
  45. );
  46.  
  47. -- 4. Bảng Địa chỉ (Dùng chung)
  48. CREATE TABLE Address (
  49. address_id INT PRIMARY KEY AUTO_INCREMENT,
  50. city VARCHAR(255) NOT NULL,
  51. street VARCHAR(255) NOT NULL,
  52. specifiable_address VARCHAR(255)
  53. );
  54.  
  55. -- 5. Bảng Giảm giá
  56. CREATE TABLE Discounts (
  57. discount_id INT PRIMARY KEY AUTO_INCREMENT,
  58. discount_percent INT NOT NULL,
  59. start_date DATE NOT NULL,
  60. end_date DATE NOT NULL,
  61. is_active INT DEFAULT 1
  62. );
  63.  
  64. -- 6. Bảng Voucher
  65. CREATE TABLE Vouchers (
  66. voucher_id INT PRIMARY KEY AUTO_INCREMENT,
  67. discount_type INT NOT NULL, -- 1: %, 2: tiền mặt
  68. discount_value INT NOT NULL,
  69. min_order_value INT NOT NULL,
  70. max_discount_amount INT,
  71. usage_limit INT,
  72. used_count INT DEFAULT 0,
  73. expiry_date DATE NOT NULL
  74. );
  75.  
  76.  
  77. -- 7. Bảng Người dùng
  78. CREATE TABLE Users (
  79. user_id INT PRIMARY KEY AUTO_INCREMENT,
  80. user_name VARCHAR(255) NOT NULL UNIQUE,
  81. password_hash VARCHAR(255) NOT NULL,
  82. full_name VARCHAR(255) NOT NULL,
  83. email VARCHAR(255) NOT NULL UNIQUE,
  84. phone_number VARCHAR(20)
  85. );
  86.  
  87. -- 8. Bảng Sản phẩm
  88. CREATE TABLE Products (
  89. product_id INT PRIMARY KEY AUTO_INCREMENT,
  90. category_id INT,
  91. brand_id INT,
  92. product_name VARCHAR(255) NOT NULL,
  93. material VARCHAR(255),
  94. shape VARCHAR(255),
  95. base_price INT NOT NULL,
  96. stock_quantity INT DEFAULT 0,
  97. description TEXT,
  98. FOREIGN KEY (category_id) REFERENCES Categories(category_id),
  99. FOREIGN KEY (brand_id) REFERENCES Brands(brand_id)
  100. );
  101.  
  102.  
  103.  
  104. -- 9. Liên kết User - Role (N-N)
  105. CREATE TABLE User_Role (
  106. user_id INT,
  107. role_id INT,
  108. PRIMARY KEY (user_id, role_id),
  109. FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
  110. FOREIGN KEY (role_id) REFERENCES Roles(role_id) ON DELETE CASCADE
  111. );
  112.  
  113. -- 10. Liên kết User - Address (N-N)
  114. CREATE TABLE User_Address (
  115. user_id INT,
  116. address_id INT,
  117. PRIMARY KEY (user_id, address_id),
  118. FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
  119. FOREIGN KEY (address_id) REFERENCES Address(address_id) ON DELETE CASCADE
  120. );
  121.  
  122. -- 11. Đơn hàng
  123. CREATE TABLE Orders (
  124. order_id INT PRIMARY KEY AUTO_INCREMENT,
  125. user_id INT,
  126. address_id INT,
  127. voucher_id INT,
  128. total_price INT NOT NULL,
  129. discount_amount INT DEFAULT 0,
  130. status VARCHAR(20) DEFAULT 'Pending',
  131. order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
  132. FOREIGN KEY (user_id) REFERENCES Users(user_id),
  133. FOREIGN KEY (address_id) REFERENCES Address(address_id),
  134. FOREIGN KEY (voucher_id) REFERENCES Vouchers(voucher_id)
  135. );
  136.  
  137. -- 12. Chi tiết đơn hàng (N-N giữa Product và Order)
  138. CREATE TABLE Product_Order (
  139. product_id INT,
  140. order_id INT,
  141. price_at_purchase INT NOT NULL,
  142. quantity INT NOT NULL,
  143. PRIMARY KEY (product_id, order_id),
  144. FOREIGN KEY (product_id) REFERENCES Products(product_id),
  145. FOREIGN KEY (order_id) REFERENCES Orders(order_id) ON DELETE CASCADE
  146. );
  147.  
  148. -- 13. Comment & Đánh giá
  149. CREATE TABLE Comments (
  150. comment_id INT PRIMARY KEY AUTO_INCREMENT,
  151. product_id INT,
  152. order_id INT,
  153. rate INT CHECK (rate BETWEEN 1 AND 5),
  154. description TEXT,
  155. FOREIGN KEY (product_id) REFERENCES Products(product_id),
  156. FOREIGN KEY (order_id) REFERENCES Orders(order_id)
  157. );
  158.  
  159. -- 14. Liên kết Product - Discount (N-N)
  160. CREATE TABLE Product_Discount (
  161. product_id INT,
  162. discount_id INT,
  163. PRIMARY KEY (product_id, discount_id),
  164. FOREIGN KEY (product_id) REFERENCES Products(product_id),
  165. FOREIGN KEY (discount_id) REFERENCES Discounts(discount_id)
  166. );
  167.  
  168.  
  169.  
  170. -- ==========================================
  171. -- PHẦN 3: INSERT DỮ LIỆU MẪU (SEED DATA - BẢN X3 DỮ LIỆU)
  172. -- ==========================================
  173.  
  174. -- 1. Bảng Roles (9 Vai trò)
  175. INSERT INTO Roles (role_name) VALUES
  176. ('ADMIN'),
  177. ('CUSTOMER'),
  178. ('STAFF'),
  179. ('MANAGER'),
  180. ('MARKETING'),
  181. ('ACCOUNTANT'),
  182. ('WAREHOUSE'),
  183. ('SUPPORT'),
  184. ('GUEST');
  185.  
  186. -- 2. Bảng Brands (12 Thương hiệu)
  187. INSERT INTO Brands (brand_name, description) VALUES
  188. ('Ray-Ban', 'Thương hiệu mắt kính huyền thoại từ Mỹ'),
  189. ('Gucci', 'Kính mắt thời trang cao cấp từ Ý'),
  190. ('Gentle Monster', 'Thương hiệu thời trang giới trẻ Hàn Quốc'),
  191. ('Oakley', 'Kính thể thao chuyên dụng'),
  192. ('Dior', 'Thời trang xa xỉ từ Pháp'),
  193. ('Prada', 'Phong cách thanh lịch và hiện đại'),
  194. ('Tom Ford', 'Sang trọng, đẳng cấp dành cho doanh nhân'),
  195. ('Carrera', 'Thiết kế nam tính, mạnh mẽ'),
  196. ('Police', 'Phong cách đường phố Ý'),
  197. ('Lacoste', 'Thanh lịch pha lẫn thể thao'),
  198. ('Calvin Klein', 'Tối giản, trẻ trung'),
  199. ('Warby Parker', 'Thương hiệu kính giá tốt chất lượng cao');
  200.  
  201. -- 3. Bảng Categories (12 Danh mục)
  202. INSERT INTO Categories (category_name) VALUES
  203. ('Kính râm (Sunglasses)'),
  204. ('Kính cận (Prescription Glasses)'),
  205. ('Kính chống ánh sáng xanh'),
  206. ('Kính thể thao'),
  207. ('Kính viễn'),
  208. ('Kính lão'),
  209. ('Kính thời trang không độ'),
  210. ('Kính bơi'),
  211. ('Kính bảo hộ'),
  212. ('Kính phân cực (Polarized)'),
  213. ('Kính trẻ em'),
  214. ('Gọng kính Titanium');
  215.  
  216. -- 4. Bảng Address (12 Địa chỉ)
  217. INSERT INTO Address (city, street, specifiable_address) VALUES
  218. ('Hà Nội', 'Cầu Giấy', 'Số 10, ngõ 20'),
  219. ('Hà Nội', 'Hà Đông', 'Ký túc xá PTIT'),
  220. ('TP. Hồ Chí Minh', 'Quận 1', 'Tòa nhà Bitexco, số 2 Hải Triều'),
  221. ('Đà Nẵng', 'Hải Châu', '15 Lê Duẩn'),
  222. ('Hà Nội', 'Đống Đa', 'Số 5, ngõ Thái Hà'),
  223. ('TP. Hồ Chí Minh', 'Quận 7', 'Khu đô thị Phú Mỹ Hưng'),
  224. ('Hải Phòng', 'Lê Chân', '120 Tô Hiệu'),
  225. ('Cần Thơ', 'Ninh Kiều', '36 Mậu Thân'),
  226. ('Đà Lạt', 'Phường 1', 'Khu Hòa Bình'),
  227. ('Nha Trang', 'Lộc Thọ', '78 Trần Phú'),
  228. ('Huế', 'Phú Nhuận', '12 Lê Lợi'),
  229. ('Đà Nẵng', 'Sơn Trà', 'Đường Phạm Văn Đồng');
  230.  
  231. -- 5. Bảng Discounts (9 Giảm giá)
  232. INSERT INTO Discounts (discount_percent, start_date, end_date, is_active) VALUES
  233. (10, '2026-01-01', '2026-12-31', 1), -- Đang hoạt động
  234. (50, '2025-01-01', '2025-01-31', 0), -- Đã hết hạn
  235. (20, '2026-04-01', '2026-04-30', 1), -- Đang hoạt động tháng này
  236. (15, '2026-05-01', '2026-05-31', 1), -- Sắp diễn ra
  237. (5, '2026-01-01', '2026-12-31', 1), -- Giảm nhẹ
  238. (70, '2025-11-20', '2025-11-25', 0), -- Đã hết hạn (Black Friday cũ)
  239. (25, '2026-03-01', '2026-03-31', 0), -- Vừa hết hạn
  240. (30, '2026-06-01', '2026-08-31', 1), -- Giảm giá mùa hè
  241. (12, '2026-04-15', '2026-04-20', 1); -- Giảm giá chớp nhoáng (Flash sale)
  242.  
  243. -- 6. Bảng Vouchers (9 Voucher đa dạng)
  244. INSERT INTO Vouchers (discount_type, discount_value, min_order_value, max_discount_amount, usage_limit, used_count, expiry_date) VALUES
  245. (1, 15, 1000000, 500000, 100, 10, '2026-12-31'), -- Giảm 15%
  246. (2, 100000, 500000, 100000, 50, 5, '2026-12-31'), -- Giảm 100k
  247. (1, 10, 0, NULL, 500, 500, '2026-12-31'), -- Lỗi hết lượt dùng
  248. (2, 50000, 200000, 50000, 1000, 120, '2026-06-30'),-- Voucher freeship giả lập
  249. (1, 20, 2000000, 800000, 20, 0, '2026-05-15'), -- Voucher giá trị cao, ít lượt
  250. (2, 200000, 1500000, 200000, 100, 99, '2026-12-31'),-- Sắp hết lượt
  251. (1, 5, 0, 50000, 10000, 450, '2027-01-01'), -- Voucher phổ thông
  252. (2, 500000, 5000000, 500000, 10, 10, '2026-04-30'),-- Đã hết lượt
  253. (1, 50, 0, 100000, 50, 0, '2025-12-31'); -- Đã hết hạn sử dụng
  254.  
  255. -- 7. Bảng Users (9 Người dùng)
  256. INSERT INTO Users (user_name, password_hash, full_name, email, phone_number) VALUES
  257. ('admin_root', '$2a$12$DUMMYHASHFOR123456', 'Quản Trị Viên', 'admin@glassesshop.vn', '0900000000'),
  258. ('dev_tester', '$2a$12$DUMMYHASHFOR123456', 'Kỹ Sư Hệ Thống', 'dev@gmail.com', '0912345678'),
  259. ('mai_nguyen', '$2a$12$DUMMYHASHFOR123456', 'Nguyễn Thị Mai', 'mai.nguyen@yahoo.com', '0987654321'),
  260. ('hoang_nam', '$2a$12$DUMMYHASHFOR123456', 'Trần Hoàng Nam', 'nam.tran@gmail.com', '0933112233'),
  261. ('linh_chi', '$2a$12$DUMMYHASHFOR123456', 'Lê Linh Chi', 'chi.le@hotmail.com', '0911223344'),
  262. ('tuan_anh', '$2a$12$DUMMYHASHFOR123456', 'Phạm Tuấn Anh', 'tuananh.pham@glassesshop.vn', '0944556677'),
  263. ('quynh_nhu', '$2a$12$DUMMYHASHFOR123456', 'Vũ Quỳnh Như', 'nhu.vu@gmail.com', '0966778899'),
  264. ('quang_hai', '$2a$12$DUMMYHASHFOR123456', 'Nguyễn Quang Hải', 'hai.nguyen@yahoo.com', '0977889900'),
  265. ('bao_tram', '$2a$12$DUMMYHASHFOR123456', 'Đỗ Bảo Trâm', 'tram.do@gmail.com', '0988990011');
  266.  
  267. -- 8. Bảng Products (15 Sản phẩm đa dạng)
  268. INSERT INTO Products (category_id, brand_id, product_name, material, shape, base_price, stock_quantity, description) VALUES
  269. (1, 1, 'Ray-Ban Aviator Classic', 'Kim loại', 'Aviator', 4500000, 20, 'Kính râm phi công màu xanh lục cổ điển'),
  270. (2, 2, 'Gucci Square Optical', 'Nhựa Acetate', 'Vuông', 8200000, 5, 'Gọng kính cận thời trang nam nữ cao cấp'),
  271. (1, 3, 'Gentle Monster Lilit', 'Nhựa Acetate', 'Vuông bo góc', 6500000, 0, 'Kính râm hot trend (Hết hàng)'),
  272. (3, 1, 'Ray-Ban Clubmaster Blue-Light', 'Hỗn hợp', 'Clubmaster', 3800000, 30, 'Mắt kính bảo vệ mắt'),
  273. (4, 4, 'Oakley Radar EV Path', 'Nhựa O Matter', 'Thể thao', 5500000, 10, 'Kính đạp xe chuyên nghiệp'),
  274. (1, 5, 'DiorStellaire1', 'Kim loại', 'Vuông lớn', 9500000, 3, 'Kính râm nữ thiết kế oversize sang trọng'),
  275. (2, 6, 'Prada Minimal Baroque', 'Nhựa', 'Tròn', 7800000, 12, 'Gọng kính cận họa tiết xoắn ốc độc đáo'),
  276. (5, 7, 'Tom Ford FT5401', 'Kim loại', 'Chữ nhật', 11000000, 8, 'Kính viễn cao cấp cho nam giới'),
  277. (6, 8, 'Carrera 1005/S', 'Hỗn hợp', 'Phi công', 4200000, 25, 'Kính râm nam tính mạnh mẽ'),
  278. (10, 9, 'Police Origins 1', 'Hợp kim', 'Vuông', 3600000, 15, 'Kính phân cực chống lóa khi lái xe'),
  279. (7, 10, 'Lacoste L2767', 'Nhựa dẻo', 'Chữ nhật', 2900000, 50, 'Kính thời trang không độ form gọn nhẹ'),
  280. (11, 1, 'Ray-Ban Junior RJ9052S', 'Nhựa an toàn', 'Tròn', 1800000, 40, 'Kính râm bảo vệ mắt cho trẻ em'),
  281. (12, 11, 'CK Titanium Rimless', 'Titanium', 'Không viền', 5200000, 18, 'Gọng kính siêu nhẹ tàng hình trên mặt'),
  282. (8, 4, 'Oakley Swim Goggles', 'Silicone', 'Thể thao', 1200000, 60, 'Kính bơi chống sương mù'),
  283. (2, 12, 'Warby Parker Haskell', 'Nhựa tái chế', 'Tròn', 2500000, 0, 'Gọng kính thân thiện môi trường (Đang đợi hàng về)');
  284.  
  285. -- 9. Bảng User_Role (9 Liên kết)
  286. INSERT INTO User_Role (user_id, role_id) VALUES
  287. (1, 1), -- admin_root là ADMIN
  288. (2, 2), -- dev_tester là CUSTOMER
  289. (3, 2), -- mai_nguyen là CUSTOMER
  290. (4, 2), -- hoang_nam là CUSTOMER
  291. (5, 2), -- linh_chi là CUSTOMER
  292. (6, 3), -- tuan_anh là STAFF
  293. (7, 4), -- quynh_nhu là MANAGER
  294. (8, 2), -- quang_hai là CUSTOMER
  295. (9, 2); -- bao_tram là CUSTOMER
  296.  
  297. -- 10. Bảng User_Address (9 Liên kết)
  298. INSERT INTO User_Address (user_id, address_id) VALUES
  299. (1, 1),
  300. (2, 2),
  301. (3, 3),
  302. (4, 4),
  303. (5, 5),
  304. (6, 6),
  305. (7, 7),
  306. (8, 8),
  307. (9, 9);
  308.  
  309. -- 11. Bảng Product_Discount (6 Liên kết)
  310. INSERT INTO Product_Discount (product_id, discount_id) VALUES
  311. (3, 3), -- Gentle Monster được giảm 20%
  312. (4, 1), -- Ray-Ban Blue-light giảm 10%
  313. (8, 5), -- Tom Ford giảm 5%
  314. (12, 8), -- Kính trẻ em giảm 30%
  315. (1, 2), -- Hết hạn giảm giá
  316. (15, 1); -- Warby Parker giảm 10%
  317.  
  318. -- 12. Bảng Orders (9 Đơn hàng đa dạng trạng thái)
  319. INSERT INTO Orders (user_id, address_id, voucher_id, total_price, discount_amount, status, order_date) VALUES
  320. (2, 2, 1, 6500000, 500000, 'Completed', '2026-04-10 10:00:00'),
  321. (3, 3, NULL, 4500000, 0, 'Pending', '2026-04-14 15:30:00'),
  322. (2, 2, NULL, 8200000, 0, 'Cancelled', '2026-04-12 08:00:00'),
  323. (4, 4, 2, 11000000, 100000, 'Processing', '2026-04-15 09:00:00'),
  324. (5, 5, 4, 3800000, 50000, 'Shipping', '2026-04-13 14:20:00'),
  325. (8, 8, NULL, 9500000, 0, 'Completed', '2026-03-20 11:15:00'),
  326. (9, 9, 7, 2900000, 50000, 'Pending', '2026-04-15 10:30:00'),
  327. (3, 3, NULL, 5400000, 0, 'Returned', '2026-02-14 16:45:00'),
  328. (4, 4, 5, 15000000, 800000, 'Completed', '2026-01-05 08:30:00');
  329.  
  330. -- 13. Bảng Product_Order (14 Chi tiết sản phẩm trong đơn)
  331. INSERT INTO Product_Order (product_id, order_id, price_at_purchase, quantity) VALUES
  332. (3, 1, 6500000, 1), -- Đơn 1 mua Gentle Monster
  333. (1, 2, 4500000, 1), -- Đơn 2 mua Ray-Ban
  334. (2, 3, 8200000, 1), -- Đơn 3 mua Gucci (Hủy)
  335. (8, 4, 11000000, 1), -- Đơn 4 mua Tom Ford
  336. (4, 5, 3800000, 1), -- Đơn 5 mua Ray-Ban Blue Light
  337. (6, 6, 9500000, 1), -- Đơn 6 mua Dior
  338. (11, 7, 2900000, 1), -- Đơn 7 mua Lacoste
  339. (12, 8, 1800000, 3), -- Đơn 8 mua 3 kính trẻ em (1.8tr x 3 = 5.4tr) (Trả hàng)
  340. (6, 9, 9500000, 1), -- Đơn 9 mua Dior
  341. (5, 9, 5500000, 1); -- Đơn 9 mua Oakley (Mua 2 món cùng lúc)
  342.  
  343. -- 14. Bảng Comments (9 Đánh giá)
  344. INSERT INTO Comments (product_id, order_id, rate, description) VALUES
  345. (3, 1, 5, 'Kính rất xịn xò, đóng gói đẹp.'),
  346. (6, 6, 4, 'Chất lượng kính Dior rất tốt, nhưng giá hơi cao.'),
  347. (12, 8, 2, 'Kính hơi chật so với mặt bé, tôi muốn đổi trả.'),
  348. (6, 9, 5, 'Mua tặng vợ, vợ khen nức nở.'),
  349. (5, 9, 5, 'Oakley đạp xe bao ngầu, chống gió tốt.'),
  350. (1, 2, 5, 'Rayban kinh điển, không có gì để chê.'),
  351. (4, 5, 4, 'Đeo êm mắt khi dùng máy tính, gọng hơi nặng xíu.'),
  352. (8, 4, 5, 'Xứng đáng đồng tiền bát gạo.'),
  353. (11, 7, 3, 'Gọng nhựa trông hơi rẻ tiền so với hình ảnh.');
Success #stdin #stdout #stderr 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Error: near line 1: near "DATABASE": syntax error
Error: near line 5: near "USE": syntax error
Error: near line 29: near "AUTO_INCREMENT": syntax error
Error: near line 35: near "AUTO_INCREMENT": syntax error
Error: near line 42: near "AUTO_INCREMENT": syntax error
Error: near line 48: near "AUTO_INCREMENT": syntax error
Error: near line 56: near "AUTO_INCREMENT": syntax error
Error: near line 65: near "AUTO_INCREMENT": syntax error
Error: near line 78: near "AUTO_INCREMENT": syntax error
Error: near line 88: near "AUTO_INCREMENT": syntax error
Error: near line 123: near "AUTO_INCREMENT": syntax error
Error: near line 149: near "AUTO_INCREMENT": syntax error
Error: near line 175: no such table: Roles
Error: near line 187: no such table: Brands
Error: near line 202: no such table: Categories
Error: near line 217: no such table: Address
Error: near line 232: no such table: Discounts
Error: near line 244: no such table: Vouchers
Error: near line 256: no such table: Users
Error: near line 268: no such table: Products
Error: near line 319: no such table: Orders
Error: near line 344: no such table: Comments