我讀過一些關於在表格中設置deleted_at
字段的醜陋方面的信息,表示行已被刪除。使用EAV表的「軟刪除」解決方案有問題嗎?
即
http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/
是否有與您要刪除的表走行,並將其旋轉到一些EAV表的任何潛在的問題?
例如,
可以說我有兩個表deleted
和deleted_row
分別描述如下。
mysql> describe deleted;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| tablename | varchar(255) | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
mysql> describe deleted_rows;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| entity | int(11) | YES | MUL | NULL | |
| name | varchar(255) | YES | | NULL | |
| value | blob | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
現在,當你想從任何表中刪除一行,你會從表中刪除,然後將其插入這些表本身。
deleted
+----+-----------+---------------------+
| id | tablename | deleted_at |
+----+-----------+---------------------+
| 1 | products | 2011-03-23 00:00:00 |
+----+-----------+---------------------+
deleted_row
+----+--------+-------------+-------------------------------+
| id | entity | name | value |
+----+--------+-------------+-------------------------------+
| 1 | 1 | Title | A Great Product |
| 2 | 1 | Price | 55.00 |
| 3 | 1 | Description | You guessed it... it's great. |
+----+--------+-------------+-------------------------------+
我看到了一些東西。
- 你需要使用的應用程序邏輯 做樞軸(紅寶石,PHP,Python和 等)
- 表可能增長相當大的 因爲我使用
blob
處理 未知行值的大小
您是否發現這種類型的軟刪除有其他明顯的問題?
我沒有太多的意見對是否是好事還是壞事(至少在沒有很多關於你的要求的更多細節),但根據你的數據庫服務器上你也許可以做到這一點與觸發器和保持邏輯超出數據庫。 – 2011-03-23 16:58:44
湯姆,我還沒有偶然發現如何做觸發器,你知道任何好的例子嗎? – 2011-03-23 17:07:14
對不起,我的頭不在。這也很大程度上取決於你正在使用的數據庫。 – 2011-03-23 17:13:40