2012-09-09 36 views
0

我有以下模式:MYSQL ON UPDATE CASCADE只有1列

 tbl_tag 
--------|------ 
name  count 
apple   2 
orange  5 


    tbl_lookup_tag 
--------|--------- 
doc_id  tag 
1   apple 
1   orange 
2   apple 

    foreign key (tag) references tbl_tag (name) 
    on update cascade on delete cascade 

我想,當tbl_tag.name改變而不是當tbl_tag.count改變是tbl_lookup_tag.tag只進行更新。這可能嗎?

回答

1

而不是按名稱引用tbl_tag - 創建代理主鍵(整數,自動增量)並引用它。

在這種情況下,您可以重命名您的標籤,而不必擔心和頭痛。

所以,你的新模式會是什麼樣子:

tbl_tag: id | name | count 
     ^
      |----------------| 
          v 
tbl_lookup_tag: doc_id | tag_id 
+0

真,但我試圖消除另一個'JOIN' ......但看起來像我將不得不走這條路線。 – jbauer

+0

@Justin B:爲什麼?如果您遇到任何性能問題 - 那麼它已經是另一個故事,可能是另一個問題 – zerkms

+0

每個文檔都有大約10個「標籤」,如每個描述某個特徵的屬性。每個屬性需要2個表格,因此需要2個連接...並且每個文檔至少需要20個連接。雖然分頁沒有那麼糟糕。我必須使用搜索索引器來執行任何過濾。 – jbauer