2017-02-09 216 views
1

我有以下表中包含所有语言:本地化语言名称

create table dbo.[Languages] 
( 
    Code nvarchar (4) not null 
    constraint PK_Languages_Code primary key clustered (Code), 
    Name nvarchar (80) not null 
    constraint UQ_Languages_Name unique (Name)     
) 

我用这个表来本地化其他表,如内容:

create table dbo.Countries ( 
    Code nvarchar (4) not null 
    constraint PK_Countries_Code primary key clustered (Code) 
) 

create table dbo.CountriesLocalized (
    Code nvarchar (4) not null, 
    LanguageCode nvarchar(4) not null, 
    Name nvarchar (120) not null 
    constraint UQ_Countries_CountryCode_LanguageCode unique (CountryCode, LanguageCode) 
) 

这工作正常我在很多表格中使用这种方法...

但我还需要本地化语言名称...我应该怎么做?

+0

为什么本地化语言如果语言表只包含“ID”和“语言名称”,则为名称。这个表格不能比这更规范化。 – Hadi

+0

因为我正在构建一个API,有时我需要返回所有语言,有时需要使用英语,法语或其他语言返回名称 –

+0

就像其他任何表一样:'dbo.LanguagesLocalized'有'Code' ,'LanguageCode'和'Name'。您可以从'dbo.Languages'中删除'Name'或者选择一个约定,例如总是使用Elbonian,以便每种语言至少有一个名称。如果'LanguagesLocalized'中没有本地化名称,'union'可以从'Languages'中选择默认名称。 – HABO

回答

1

您可以通过添加一个父语言ID即与Code

create table dbo.[Languages] 
( 
    Code nvarchar (4) not null 
    constraint PK_Languages_Code primary key clustered (Code), 
    Name nvarchar (80) not null 
    constraint UQ_Languages_Name unique (Name)  , 
    ParentCode nvarchar(4) null    
) 

或者添加代码类列指递归关系,建立自己的语言表的层次结构表languageKind仅包含主要语言的表。