應該有一個管理面板的子系統,不同的用戶可以管理他們的產品,但每個變更在影響主要產品表之前都應該被管理員批准。 有三個主要的表:建立管理審批系統的最佳實踐
- 產品:具有最終批准,並在整個系統
Changes_versions是用來儲存產品:帶一張表要與產品表一對多的關係,表示每一個變化版本承諾通過誰,什麼時候,並已被批准/由管理員拒絕或仍處於待定狀態。表結構如下:
CREATE TABLE `changes_versions` ( `xid` int(11) unsigned NOT NULL AUTO_INCREMENT, `xcreated_date` datetime DEFAULT NULL, `xupdated_date` timestamp NULL DEFAULT NULL, `xversion` int(11) DEFAULT NULL, `xobject_id` int(11) DEFAULT NULL, `xobject_type` varchar(255) DEFAULT NULL, `xstate` enum('PENDING','ACCEPTED','REJECTED') DEFAULT 'PENDING', PRIMARY KEY (`xid`) ) ENGINE=InnoDB AUTO_INCREMENT=165 DEFAULT CHARSET=utf8
的變化:一個表,其中有一到與Changes_versions表中的許多關係,即保持每一次合作lumn更改主表(這裏我是指產品表)的記錄,並通過管理員批准change_version記錄將其相關的更改記錄放置在主表列中。表結構如下:
CREATE TABLE `changes` ( `xid` int(11) unsigned NOT NULL AUTO_INCREMENT, `xcreated_date` datetime DEFAULT NULL, `xcreated_by` varchar(255) DEFAULT NULL, `xupdated_date` timestamp NULL DEFAULT NULL, `xupdated_by` varchar(255) DEFAULT NULL, `xversion_id` int(11) DEFAULT NULL, `xcolumn_name` varchar(255) DEFAULT NULL, `xcolumn_value` varchar(255) DEFAULT NULL, `xstate` enum('PENDING','ACCEPTED','REJECTED') DEFAULT 'PENDING', `xadmin_review` text, PRIMARY KEY (`xid`) ) ENGINE=InnoDB AUTO_INCREMENT=764 DEFAULT CHARSET=utf8
與本系統和表模式我處理與記錄的更改工作,用戶獲取的記錄列表中,如果用戶有任何待定狀態change_version,系統將拉動其相關變化記錄並將它們放置在提取的產品行中的右列(臨時僅用於顯示),因此即使用戶有任何掛起的狀態更改,他/她也可以在他/他的面板中看到其更改(不是主系統,只有他/她面板)。
問題是插入新記錄,我可以創建一個change_version記錄並將所有用戶數據保存到更改表指向新的change_vesrion記錄,但change_vesrsion記錄沒有連接到任何產品記錄,因爲沒有記錄。
請注意,根據系統複雜性和當前穩定性,我不想將任何列添加到產品表中以表明這是臨時記錄。
因此,我想要一個策略來處理問題,例如我在用戶面板中分頁產品並填寫最後一個PENDING更改時,沒有插入記錄的產品記錄以填充更改,因此用戶無法看到他/她以前插入的產品。
我也應該注意到,一些本該是什麼結構的表可能看起來複雜question.this結構是複雜的,因爲changes_vesrsion和chaneges表保存和不同結構的許多表當前的歷史和管理審批流程。
擁有Product和ProductVersion不是更簡單,其中Version表包含Product中的所有列加上授權列。這意味着通過將主要字段從版本表複製到產品來完成更改。對於新記錄,Version.productID將爲NULL,但可以在創建產品記錄後填寫。 –
@NigelRen好吧,我應該解釋說,這個版本控制系統的使用不僅僅是產品表。它具有不同結構和列的多個表的使用方式,因此您的方式不適用於我的情況 –
應該是否可以更改不在原始表(產品)中的新項目(產品),因爲它從未被接受過? –