我在设置一个包含类别和子类别列表的 mysql 表时遇到了一些问题。我不确定如何设置表格。是否需要是 2 个单独的表? 1 个用于主要类别,1 个用于子类别,还是可以全部放在一张表中?这样的东西行得通吗?
Create Table categories (
category_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
sub_id INT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL,
PRIMARY KEY (category_id)
)
CREATE TABLE items (
item_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
description VARCHAR(100) NOT NULL,
PRIMARY KEY (item_id),
FOREIGN KEY (category_id) REFERENCES categories (category_id),
FOREIGN KEY (sub_id) REFERENCES categories (sub_id)
)
这行得通还是完全错误?在此先感谢您的帮助!
最佳答案
如果您 100% 确定只有两个级别的类别(主要类别和次要类别),您可以做一些不同的事情。它们都不是您提出的解决方案:
CREATE TABLE categories (
id int not null primary key,
main varchar(64)
sub varchar(64)
);
CREATE TABLE objects (
id int not null primary key,
category_id int,
name varchar(64),
FOREIGN KEY (category_id) REFERENCES categories (id)
);
想要所有车辆吗?
SELECT *
FROM objects AS o
INNER JOIN categories AS c ON o.category_id = c.id
WHERE c.main = 'vehicles';
想要所有的机器人吗?
SELECT *
FROM objects AS o
INNER JOIN categories AS c ON o.category_id = c.id
WHERE c.main = 'vehicles' and c.sub='Roflcopters';
如果您想要“车辆”类别中的某些内容,而不是车辆的任何子类别中的内容,只需有一个类别记录,其中 main='vehicles' 和 sub NULL。
当然,这不是特别灵活。您只能使用两个级别的分类,而且您的类别模型中没有嵌入很多业务逻辑。但这可能足以满足您的需求。
另外两个很好的、经过验证的模型是邻接表模型和嵌套集模型,这两个模型都有描述,有很多很好的示例 mysql 代码,over here
关于MySQL类别和子类别表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169559/