2010-08-10 109 views

回答

1

通常最好不要將值存儲兩次。相反,你可以存儲在表中只有一個值,當您查詢,您可以加入兩個表一起上的外鍵,讓你在同一時間從兩個表獲取值:

SELECT table1.foo, table2.bar 
FROM table1 
JOIN table2 ON table1.table2_id = table2.id 

如果您將該值存儲兩次,稱爲非規範化。如果這些值出於某種原因而失去同步,這可能會導致問題。有時非規範化以提高性能是有利的,但單個連接速度非常快,除非您已經測量了性能並發現它太慢,否則我建議不要這樣做。

-1
INSERT INTO TABLE A (FieldInA) VALUES ('X') 
INSERT INTO TABLE B (FieldInB) VALUES ('X') 

那麼根本不會刪除,也沒有更新,這些錶行,瞧,你總是在不同表的兩個字段的值相同。

+0

哈哈哈!我真的希望你的意圖是作爲一個笑話... – 2010-08-10 18:19:10

+0

不是我,但它是一場賭博。如果你刪除這個答案,當重新計算代表時,你會得到代表。 – 2010-08-10 18:22:57

0

爲什麼你不能爲你的數據庫設計normalize,以便你沒有相同的數據兩次,不必擔心這樣的東西了?

如果你不能改變設計看一看triggers

+0

我的猜測是保持相同的值是用戶輸入的自由格式文本或soemthing,但是然後他可以有一個表格並通過ID引用新條目。 – FrustratedWithFormsDesigner 2010-08-10 18:18:02

0

爲什麼你想這樣做嗎?

如果一個實體的一個屬性是總是與另一個相關實體的某個屬性相同,那麼你就有一個冗餘數據模型。

,而不是試圖同步屬性,參考一個屬性。使用連接將第一個表連接到第二個表,然後從一個表中獲取該屬性的值。例如,如果您目前有這樣的:

TableA.foo should always equal TableB.bar 

刪除列TableA.foo,並做到這一點:

select A.*, B.bar as foo 
from TableA A 
join TableB B on (B.foreign_key = A.key); 
相關問題