どのIMHOを使用するのが良いと思うかをお見せしましょう。最初にカテゴリテーブルを作成します:
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;
次に、製品テーブルをそのままにしておくことができます:
CREATE TABLE Product (ProductID int, Description nvarchar(100));
これで通常、いくつかのカテゴリに属する製品を持つことができます。したがって、それを行う正しい方法は、製品とカテゴリの間にm:nの関係を持たせることです。次を追加することで実行できます:
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;
テーマをそのままにしておくことができます。
そのcategory
が表示されます テーブルは、category_father_id
を使用してネストカテゴリを処理できます 自分自身の外部キー。
ただし、覚えておくべき注意点は、結局のところ、それは常にドメイン/ビジネスロジックに関するものです。