比如文章article表 有一個文章標籤的關聯表article_tag,一篇文章,存在多個tag。
在更新文章的時候,需要更新關聯表,我想到的有兩種方法,但是感覺都比較不爽。
1.更新article的時候,更新關聯表的時候,把關聯表中的資料全部刪除,在重新寫入新的關聯資料。這個比較安全,但是弊端是,每次更新文章,都要對關聯表進行刪除又寫入資料,造成浪費,而且如果這個關聯表存在多個欄位,每次更新的時候都要對每個欄位重新寫入。
關聯表設定主鍵,在更新article的時候,根據關聯表的主鍵尋找關聯表的記錄,存在的主鍵進行更新操作,不存在的就新增。這樣也麻煩,每次對article進行更新的時候,還要維護關聯表的主鍵在表單裡面,麻煩。但是這種情況比較安全,但如果要是像上面說到的,只是儲存多個文章的tag,顯得很麻煩。比如,文章提交的表單中tag就是一個字串,你還轉化字串為一個數組,然後對應到關聯表的主鍵上面。
不設定關聯表的主鍵,設定一個根據關聯ID 和 需要儲存欄位能定位一條記錄,根據這個記錄是不是存在來更新或者新增。比如 select * from article_tag where aid = xxx and tag = 'xxx'
, 這樣去定位一條記錄,來寫入的其他欄位或者更新操作,但也是麻煩。
所以有沒有比較正式或者更好的方法呢?
回複內容:
比如文章article表 有一個文章標籤的關聯表article_tag,一篇文章,存在多個tag。
在更新文章的時候,需要更新關聯表,我想到的有兩種方法,但是感覺都比較不爽。
1.更新article的時候,更新關聯表的時候,把關聯表中的資料全部刪除,在重新寫入新的關聯資料。這個比較安全,但是弊端是,每次更新文章,都要對關聯表進行刪除又寫入資料,造成浪費,而且如果這個關聯表存在多個欄位,每次更新的時候都要對每個欄位重新寫入。
關聯表設定主鍵,在更新article的時候,根據關聯表的主鍵尋找關聯表的記錄,存在的主鍵進行更新操作,不存在的就新增。這樣也麻煩,每次對article進行更新的時候,還要維護關聯表的主鍵在表單裡面,麻煩。但是這種情況比較安全,但如果要是像上面說到的,只是儲存多個文章的tag,顯得很麻煩。比如,文章提交的表單中tag就是一個字串,你還轉化字串為一個數組,然後對應到關聯表的主鍵上面。
不設定關聯表的主鍵,設定一個根據關聯ID 和 需要儲存欄位能定位一條記錄,根據這個記錄是不是存在來更新或者新增。比如 select * from article_tag where aid = xxx and tag = 'xxx'
, 這樣去定位一條記錄,來寫入的其他欄位或者更新操作,但也是麻煩。
所以有沒有比較正式或者更好的方法呢?
就跟你說的那樣,“更新article的時候,更新關聯表的時候,把關聯表中的資料全部刪除,在重新寫入新的關聯資料。”我感覺這樣就不錯。要是每次都比較原來和現在的標籤的差別,應該更麻煩
更新article的時候,新的tag產生數組,舊的tag讀出數組,兩個數組做比較,然後做刪除、添加。