我正在创建一个博客网站,可让您为博客分配一个类别。我看起来像这样的原始表:
+----+----------+-------+---------+
| 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 |
+----+--------------------+----------+-------+---------+-----------+
现在,如果我想要删除类别为cars
的{{1}},而不是删除它(因为这个类别中有2篇文章),我可能会将其更改为01
。所以这里没有任何问题,但如果我要删除unnassigned
(music
)并将其更改为03
,我最终会将ID unnassigned
取消签名。所以现在当我为01 & 03
篇文章运行搜索时,应该返回4,我只会看到2或错误。
拥有原始表格会不会更好,当有人更改类别unnassigned
时,他们只需cars
记录?
答案 0 :(得分:2)
嗯,你可以验证它。如果您需要遵循数据库规则,您必须检查2个表之间的父子关系。有三种方式
<强> 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
。你可on
或off
flag
删除取消删除