簡體   English   中英

數據庫規范化和延遲開發

[英]Database normalization and lazy development

我認為這個問題已經出現,因為我很討厭做兩倍於我想像的必要工作。

我接受這樣的想法,即我可能缺乏MySQL和PHP的經驗,無法想到一個更簡單的解決方案。

我的問題是我有幾個表(可能還要添加更多表),其中有一個父表,只包含兩個字段-一個id(int)和一個標識它的名稱。

目前,我有七個表,每個表中至少有15個字段。 每個表都有一個字段,其中包含可以鏈接到父表的ID。

所有這些數據都不需要填寫-您只需要在父表中創建一個條目即可。 對於其他表,我有單獨的表格。

現在,制作這些表格是為了更新字段中的數據,這意味着如果有可用數據,我必須從表中拉出數據。

我想做的是,當我從表單接收數據時,可以在模型中使用UPDATE查詢。 但是,如果我要更新的表沒有該特定ID的條目,則需要執行插入操作。

所以,我當前的偽代碼是這樣的:

$sql = "SELECT id FROM table_x WHERE parent_id = ".$parent_id;
$res = $mysql_query($sql);
if( mysql_num_rows($res) == 1 )
{
  $sql = "UPDATE table_x SET ... WHERE parent_id = ".$parent_id;
}
else
{
  $sql = "INSERT INTO table_x VALUES ( ... )";
}
mysql_query($sql);

我要為每張桌子做兩個工作-我可以做些不同的事情還是做些更聰明的事情,或者這僅僅是必須做的事情嗎? 因為這對我來說似乎效率很低。

采用

INSERT ... ON DUPLICATE KEY UPDATE Syntax

如果找不到記錄,它將插入
否則,它將更新現有記錄,
您可以在插入前跳過檢查- 詳細信息

每個7表與父表的這種假設關系為1:1

或者使用REPLACE而不是INSERT它是一個插入,但是在違反唯一鍵(例如主鍵)時,將先執行DELETE,然后執行INSERT。

mysql_query("UPDATE table table_x ..... WHERE parent_id=".$parent_id);
if (mysql_affected_rows()==0) {
    mysql_query("INSERT INTO .....");
}

在mysql中,您可以執行以下操作:

INSERT INTO table
  (
    col1,
    col2
  ) VALUES(
    'val1',
    'val2'
  ) ON DUPLICATE KEY UPDATE table SET 
    col2 = 'val2'

查看文檔以獲取更多信息

暫無
暫無

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

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