2014-09-11 54 views
2

上的項目,我有如下表:查找表本地化

create table dbo.Posts 
(
    Id int identity not null primary key clustered (Id), 
    Created datetime not null, 
); 

create table dbo.PostsLocalized 
(
    Id int identity not null primary key clustered (Id), 
    PostId int not null, 
    LanguageId int not null, 
    PostTypeId int not null, 
    [Text] nvarchar (max) not null, 
    Title nvarchar (120) not null, 
     constraint UQ_PostsLocalized_PostId_LanguageId unique (PostId, LanguageId) 
); 

create table dbo.PostTypes 
(
    Id int identity not null primary key clustered (Id), 
    Name nvarchar (max) not null 
); 

所以我用PostsLocalized表本地化的職位,但不是PostTypes表。

PostTypes表基本上是一個查找表,就像其他人在我的數據庫中一樣。

你認爲我應該本地化查找表,例如PostTypes?

我會添加一個名爲PostTypesLocalized與本地化名稱的新表。

同樣對於像性別,其他國家的查找表,...

或者我應該只在應用本地化的查找表?

UPDATE

澄清:

  1. 一個職位的所有本地化版本具有相同的PostType。

  2. 我需要在UI中顯示PostTypes,這就是爲什麼我需要翻譯它們。

所以,我想@dasblinkenlight的回答以下的新方法:

create table dbo.Posts 
(
    Id int identity not null primary key clustered (Id), -- The id of the localized post 
    Created datetime not null, 
    PostId int not null, -- The id of the post 
    PostTypeId int not null 
    LanguageId int not null, 
    [Text] nvarchar (max) not null, 
    Title nvarchar (120) not null, 
     constraint UQ_PostsLocalized_PostId_LanguageId unique (PostId, LanguageId) 
); 

create table dbo.PostTypes 
(
    Id int identity not null primary key clustered (Id), -- PostType localized id 
    PostTypeId int not null, -- The id of the post type 
    Name nvarchar (max) not null 
); 

考慮到(1)再上崗> PostTypeId應與PostTypes> PostTypeId。

但我該怎麼做?

+0

我還建議您使用有意義的名稱作爲主鍵而不是ID。簡單的ID不明確,迫使你根據他們所在的表格來更改列的名稱。隨着系統變得更大,這是一個非常痛苦的工作。給他們一個有意義的名字並保持一致。 – 2014-09-11 14:09:28

+0

@SeanLange,對不起在哪張桌子? – 2014-09-11 15:01:29

+0

所有這些。例如,您在帖子命名標識中有一列,它在其他表中成爲PostID。只需在每個表格中將其命名爲PostID即可。與所有其他鍵一樣。 – 2014-09-11 15:05:15

回答

1

的答案取決於PostTypesName場的用法:

  • 如果該字段的所有使用的代碼和/或你可能有非本地化的腳本來,本地化不必要
  • 如果Name使它到最終用戶的視圖,您應該本地化表。

如果您需要本地化PostTypes,單獨PostTypesLocalized表,除了PostTypes表語言環境無關的名稱,聽起來像一個合適的解決方案。

您應該考慮放置PostTypeId字段。具有相同PostId的所有本地化是否參考相同的PostTypeId,或者它們中的一些會不同?如果同一Post的所有本地化參考相同的PostType,則該字段應該屬於Posts表,而不是PostLocalized

我應該只在應用程序中本地化查找表嗎?

向您的數據庫添加本地化會算作您應用程序的本地化。當您考慮使用相同數據庫結構的多個應用程序時,這是一個很好的解決方案。

+0

我剛剛更新了我的代碼...我還有一個問題。你覺得我應該怎麼做? – 2014-09-11 15:01:54

+0

@MDMoura由於同一帖子的所有本地化將具有相同的PostType,所以Post帖應該具有PostTypeId字段:create table dbo.Posts(Id int identity not null主鍵聚簇(Id),Created datetime not null,PostTypeId int not null)'。語言ID,文本和標題應該屬於'PostLocalized',這是您在原始結構中的方式。您應該使用特定於語言的名稱創建'PostTypeLocalized',引用'PostType'。 – dasblinkenlight 2014-09-11 15:17:55

+0

所以你說我不可能有相同的PostType關聯到所有翻譯,並且只使用一個Posts表格,因爲我在Update中添加了? – 2014-09-11 15:58:23