您是否認為有必要為只有兩個元素(id 和 name)的表創建一個輔助翻譯表
我有個問題。
在我的數據庫中,我有一個過敏原表,其中包含兩個元素:Id 和 Name。
我希望我的過敏原表有翻譯,那麼什麼更好?創建一個名稱可以是 AllergenTranslate 的輔助翻譯表,或者直接在表 Allergen 中創建 langungeId 並將其名稱更改為 AllergenTranslate。
例子:
CREATE TABLE [Allergen] ( [Id] int PRIMARY KEY IDENTITY(1, 1) ) CREATE TABLE [AllergenTranslation] ( [Id] int PRIMARY KEY IDENTITY(1, 1) [AllergenId] int, [LanguageId] int, [Name] nvarchar(255), )
或直接過敏原翻譯表
CREATE TABLE [AllergenTranslation] ( [Id] int PRIMARY KEY IDENTITY(1, 1) [LanguageId] int, [Name] nvarchar(255), )
或直接過敏原表沒有翻譯表名稱
CREATE TABLE [Allergen] ( [Id] int PRIMARY KEY IDENTITY(1, 1) [LanguageId] int, [Name] nvarchar(255), )
絕對是第一個同時具有 Allergen 和 AllergenTranslation 表的表。
原因是過敏原很可能在其他地方被引用。假設您有一張藥物表,每種藥物都對部分過敏原有效。這個功效表中的外鍵是什麼?您根本不希望 FK 中包含 LanguageId - 藥物的反應不以患者的言語為條件。您也不想為每種語言重複 Efficacy 中的行,因為這是導致重複和錯誤的冗餘。想想引入另一種語言所需的更改。
在大多數情況下,這將取決於使用頻率以及同一過敏原需要多語言的頻率。除非這將成為您的應用程序的基石(即 90% 以上的事務將使用的事務表或某種查找表),否則我不會想太多。我以前聽過它說:
…過早的優化是萬惡之源…
話雖如此,在我個人看來,我會把你的名字和你的實際過敏原分開。因為它們是兩個不同的數據元素。您可能希望能夠通過過敏原而不是名稱來建構程式碼和查詢數據。
EX:您將希望圍繞對乳膠過敏的人(英文)編寫程式碼/報告,並使用通用名稱/ID/程式碼引用它們。您很可能不想在後端引用它的所有各種名稱(隨著此應用程序使用的語言/國家/地區數量的增加,名稱也會增加)。
如果是我實施解決方案,我將有兩個單獨的表
Allergen
和AllergenTranslation
. 我會做類似你上面的事情。我建議您使用某種通用名稱或程式碼,這些名稱或程式碼要麼總是相同的語言,要麼語言不明確。這樣,當您將這些記錄從一個環境移動到另一個環境時,您不必確保數字 IDAllergen.Id
在各個環境中是相同的,並且您不必保留每個 ID 含義的列表。就像是:CREATE TABLE [Allergen] ( [Id] int PRIMARY KEY IDENTITY(1, 1), [CommonName\Code] nvarchar(255) NOT NULL UNIQUE ) CREATE TABLE [AllergenTranslation] ( [Id] int PRIMARY KEY IDENTITY(1, 1) [AllergenId] int, [LanguageId] int, [Name] nvarchar(255), )
CommonName\Code
如果您始終至少有一條記錄,您總是可以滿足該列的需求$$ AllergenTranslation $$. 我個人不希望這是一個要求(但我也在一個基本上只用英語工作的環境中工作)。 讓我知道是否可以提供更多幫助,或者其中任何部分沒有意義。