簡體   English   中英

mysql數據庫規范化問題

[英]mysql database normalization question

這是我的3張桌子:

表1-存儲用戶信息並且具有唯一數據

表2-存儲地點類別,例如多倫多,紐約,倫敦等,因此這也是唯一的

表3-信息重復。 它存儲用戶去過的所有地方。

這三個表通過以下ID鏈接或聯接:

表1具有“ table1_id”

表2具有“ table2_id”和“ place_name”

表3具有“ table3_id”,“ table1_id”,“ place_name”

我有一個界面,管理員可以看到所有用戶。 用戶旁邊是“編輯”按鈕。 單擊該編輯按鈕,您可以在具有多個“位置”下拉框的表單字段中編輯特定用戶。

如果管理員編輯用戶並為該用戶添加1個“位置”,我將使用php插入該信息。 如果管理員決定取消選擇1個“位置”,我是否將其刪除或將其標記為打開和關閉? 管理員是否決定為用戶選擇2個“地點”? 更改第一個“位置”,並添加其他“位置”。 我的桌子會持續增長嗎?我會得到多余的信息嗎?

謝謝。

表1和2聽起來正確。 表3不應包含place_name。 相反,您應該同時具有對table1_id和table2_id的外鍵引用(可以選擇保留table3_id)。 這使table3成為連接表

當您要為用戶刪除位置時,您將在table_3中刪除一行(僅此而已)。 添加位置時,首先檢查表1中是否存在。如果不存在,則將其添加到表1中。然后,在表3中添加一行。應進行更改(例如,在用戶界面中重命名用戶)。被分解為刪除然后添加。

這樣可以避免多余的信息。

處理方式取決於應用程序的需求。 例如,您需要知道某個地方何時被刪除嗎?

最簡單的方法是,每當為用戶更新場所時,jsut都將其刪除,然后重新添加所選擇的場所。

因此,如果取消選擇所有地點並添加一個新地點,則看起來像:

delete from UserPlace where UserID = 42;
insert into UserPlace (UserID, PlaceID) values (42, 123);

刪除記錄可能會影響MySQL中的並發插入 ,因此擁有on / off列而不是執行DELETE可能是以后的優化。

您可以在多列上設置UNIQUE索引,以確保對於任何給定的人員/位置組合,僅存在一條記錄。 INSERT … ON DUPLICATE KEY UPDATE語法可以簡化這種情況下的查詢,尤其是在刪除位置后重新啟用位置時。

使用此設置,您將需要一些維護腳本,該腳本每天/每周/無論運行什么,以DELETE “關閉”記錄,然后DELETE OPTIMIZE TABLE

因此,這是一種方法。

暫無
暫無

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

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