数据库设计,分类中的项目,子类别和主题


CREATE TABLE Product (ProductID int, Description nvarchar(100))
CREATE TABLE CategoryID (CategoryID int, Description nvarchar(100),ProductID int)
CREATE TABLE SubCategoryID (SubCategoryID int, CategoryID int, Description nvarchar(100),ProductID int)
CREATE TABLE ThemeID (ThemeID int, Description nvarchar(100),ProductID int)

我正在使用拉拉维尔ORM

Product hasMany-> Category
Product hasMany-> SubCategory
Product hasMany-> Theme
Category BelongsTo->Product
SubCategory BelongsTo->Category
Theme BelongsTo -> Product

每个项目都有一个主题,属于多个类别,子类别是可选的。

对此设计有什么建议吗?提前感谢!

这是最佳实践吗?尝试正确开始

让我们向您展示一个恕我直言我认为很好使用的想法:首先创建类别表:

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外键自行处理嵌套类别。

但要记住的一点是,毕竟,它始终与您的域/业务逻辑有关。

相关内容

  • 没有找到相关文章

最新更新