簡體   English   中英

批准數據庫編輯-mysql

[英]Database Edit with Approval - mysql

我目前有一個可供許多用戶訪問和更改的數據庫。 也是一個日志數據庫,它使用觸發器將所有更改存儲到數據庫中的表。

我想添加在數據庫中更改之前批准編輯的功能。

最好的方法是什么?

我們的一個站點上有類似的東西,我們添加了一堆表:

users sites ...等

然后,我們有一堆影子表:

users-shadow sites-shadow ...等

影子表具有與實際表相同的結構,只是為進行更改的用戶增加了一行。 因此,當用戶需要批准其數據庫操作的更改提交后,我們首先使用此查詢:

REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);

顯然,請確保此方法不適合注入,請使用准備好的語句等。

當批准,在一個行shadow表簡單地從除去shadow表中, user_mod值下降和變化(非空值)插入到真實表(或是否有更新的id被指定,使用REPLACE語法)。 我們在perl中執行此邏輯,因此遺憾的是手頭沒有任何SQL。

請記住,SQL REPLACE進行DELETEINSERT而不是UPDATE 您將需要修改任何觸發器以允許這種行為。

注意:之所以不使用'approve'標志,是因為我們需要修改現有記錄的能力,當然我們不能有多個具有相同主鍵的記錄。

好吧,我曾經制作過這個系統,這是我針對數據庫結構和所有算法的解決方案:

應該有一個管理面板子系統,不同的用戶可以管理他們的產品,但是每次更改都必須得到管理員的批准,才可以影響主產品表。 有三個主表:

1.Product:存儲最終批准並在整個系統中使用的產品。2.Changes_versions:與產品表具有一對多關系的表,該表指示每個變更版本由誰,何時,由admin或何時批准/拒絕提交。仍處於Pending狀態。表結構如下:

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

3.Changes:一個與Changes_versions表具有一對多關系的表,該表保留主表(此處指產品表)的每列更改記錄,並通過管理員批准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,則系統將拉出其相關的更改記錄,並將其放在獲取的產品行的右側列中(臨時(用於顯示),因此即使用戶有任何待處理的狀態更改,他/她也可以在其面板(不是主系統,只有其面板)中看到其更改。

最后,如果系統管理員接受用戶changes_version版本及其相關的更改記錄,則系統應將每個更改表記錄放置在產品表的右列中(例如,我使用了產品表,通過該系統,您可以對任何表進行版本控制和管理批准)。並將版本記錄狀態更改為“已批准”,並將其更改相關記錄更改為“已批准”。 因此,通過這種結構,您可以保存和版本化不同的表,並保留每個版本更改的日志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM