Hãy để cho bạn biết ý tưởng IMHO nào mà tôi nghĩ là tốt để sử dụng:trước tiên hãy tạo bảng danh mục:
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`category_father_id` int(11) DEFAULT '0',
`is_active` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `category_father_id` (`category_father_id`),
CONSTRAINT `constraint_name` FOREIGN KEY (`category_father_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
thì đối với bảng sản phẩm của bạn, bạn có thể giữ nguyên nó như sau:
CREATE TABLE Product (ProductID int, Description nvarchar(100));
Bây giờ Thông thường, bạn có thể có Sản phẩm thuộc một số danh mục. Do đó, cách đúng để làm điều đó là có mối quan hệ m:n giữa Sản phẩm và Danh mục. và nó có thể được thực hiện bằng cách thêm:
create table product_category(
ProductId int(11) not null,
CategoryId int(11) not null,
unique (ProductId,CategoryId),
foreign key (ProductId) references Product (ProductID) on update cascade on delete cascade,
foreign key (CategoryId) references category (id) on update cascade on delete cascade
)engine=innodb;
và bạn có thể giữ nguyên chủ đề.
bạn sẽ thấy category
đó bảng có thể xử lý các danh mục lồng nhau bằng cách sử dụng category_father_id
khóa ngoài của chính nó.
Nhưng một lưu ý cần ghi nhớ là, xét cho cùng, nó luôn là về miền / logic kinh doanh của bạn.