我正在创建一个博客网站,您可以通过该网站为博客分配类别。我的原始表格如下所示:
+----+----------+-------+---------+
| ID | CATEGORY | TITLE | ARTICLE |
+----+----------+-------+---------+
| 01 | cars | Title | Article |
| 02 | cars | Title | Article |
| 03 | sport | Title | Article |
| 04 | music | Title | Article |
| 05 | music | Title | Article |
+----+----------+-------+---------+
如您所见,类别是一个书面属性。主题是有一个单独的类别列表,我创建的列表如下:
+-------------------+
| CAT_ID | CATEGORY |
+-- --+----------+
| 01 | cars |
| 02 | sport |
| 03 | music |
+--------+----------+
这会将原始表更改为:
+----+--------------------+----------+-------+---------+-----------+
| ID | BELONGS_TO_BLOG_ID | CATEGORY | TITLE | ARTICLE | AUTHOR_ID |
+----+--------------------+----------+-------+---------+-----------+
| 01 | 01 | 01 | Title | Article | 01 |
| 02 | 01 | 01 | Title | Article | 01 |
| 03 | 02 | 02 | Title | Article | 02 |
| 04 | 02 | 03 | Title | Article | 03 |
| 05 | 02 | 03 | Title | Article | 03 |
+----+--------------------+----------+-------+---------+-----------+
现在,如果我想删除属于 01
类别的 cars
,而不是删除它(因为显然有 2 篇文章属于此类别),我可能会将其更改为 未分配
。所以这里没有问题,但如果我随后删除 music
(03
) 并将其更改为 unnassigned
我最终会得到 ID 的 01 和 03
未分配。因此,现在当我运行搜索 unnassigned
文章时(应该返回 4),我只会看到 2 或一个错误。
拥有原始表格,当有人更改汽车
类别时,他们只需更新
记录不是更好吗?
最佳答案
嗯,你可以验证一下。如果您需要遵循数据库规则,那么您肯定必须检查两个表之间的父子关系。有3种方法
<强>1。 FOREIGN KEY
:这将防止父级删除,直到子级记录存在
ALTER TABLE items
ADD FOREIGN KEY (category)
REFERENCES category(categoryTable)
<强>2。从php脚本验证:某些存储引擎可能不支持第1点。在这种情况下,您可以简单地使用php进行验证。在删除类别之前,只需计算是否有某些产品不存在
$sql="select count(*) as cnt from items where category=CATEGORY_TO_BE_DELETED";
if(mysql_query('cnt')>0) //means it has some items
//do not delete or throw some error
else
//delete
3 逻辑删除/软删除:
有时你需要删除类别(假设你的类别下有1000个产品,并且无法删除)。然后你可以有一些flags
,比如is_deleted
。您可以打开
或关闭
该标记
来删除、取消删除它
关于php - MySQL 类别列表与单独的类别表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078132/