2011-10-17 88 views
1

我應該爲「balanceimpact」使用一個只有兩個選項「CREDIT」或「DEBIT」的外鍵嗎?使用外鍵 - 只有2條記錄?

這是否有意義,這裏只有兩種選擇?

+0

這實際上取決於情況。如果你正在談論一個簡單的數據庫,那麼可能不值得創建一個單獨的表。如果它更復雜一些,那麼您可能需要考慮一個表格,以便您可以將附加信息附加到「CREDIT」和「DEBIT」值。 –

+0

如果實際上只有兩個值,那麼可以在列上使用CHECK約束。如果甚至存在遠程機會,則可能存在第三個,第四個選項 - 使其成爲普通查找表 –

回答

1

它不是有多少選項,而是什麼樣的rel(1:1; 1:n等)。

在這種特殊情況下,我不會使用外鍵,只是將它留作列。

此外,正如Marc_S在其評論中所建議的那樣,添加CHECK約束以確保僅輸入這兩個值中的一個。

ALTER TABLE your_table 
ADD CONSTRAINT chk_balanceimpact CHECK (balanceimpact in ('C','D')) 
GO 
+1

..作爲具有CHECK約束的列**至少確保僅輸入這兩個值中的一個。 。 –

+0

@marc_s謝謝,Marc。在您的許可下,我會將您的評論添加到答案中。 – Icarus

+0

+1。字符(1),檢查'C'或'D' - 完成。 – TomTom

0

如果你只有兩個選擇,似乎更好的解決方案將只是有一個真/假的列。除非它映射到其他表格。

1

這句名言「只會有兩個選項」

不拆分頭髮20點的方式,但是,我有一個稍微不同的方式看到了這個時候。我說創建一個fk查找表。只是因爲當他們想要添加第3,第4和..選項時,您將擁有所有的結構。很明顯,在這種情況下,你可以採取任何一種方式並保持良好狀態,但我不明白爲什麼將它預先標準化以避免將來發生重複工作,即使有一點小小的機會。就在深夜我的頭頂2秒。

+0

使用C,D方法可以將其更改爲稍後使用char(1)FK進行查找。 – gbn

+0

這就是我的觀點,以後爲什麼必須將其更改爲查找,現在就可以做到。對我來說這意味着正確的方法是使用查找表開始。即使這種變化在實踐中很容易實現,但整個變化的總和可能不會。我可以想到的幾個例子之一......如果他們有5萬億條C和D記錄,並且必須運行C和D上的更新以使其在所有這些記錄中成爲1和2,那麼它可能會產生更大的影響那看起來是什麼。 – Kuberchaun

+0

爲什麼它是着名的詞? :)在會計只有​​信用和債務:) – 001