我目前正在为语言列表设置SQL表,这将作为我的Web应用程序在不久的将来进行翻译工作的框架。
我决定创建的表格和字段如下所示:
Language
--------
Language ID
Language name
Native name
Region
------
Language ID
Region
Active
------
Language ID
Active
语言ID是两个表中的主键。
活动表中的活动字段只允许我知道哪些语言已被翻译(用1表示),哪些语言没有。
示例数据看起来像这样:
语言表
Language ID Language name Native name
----------- ------------- -------------
afr Afrikaans Afrikaans
sqi Albanian gjuha shqipe
ara Arabic العربية
区域表
Language ID Region
----------- -------------
afr Africa
sqi Eastern Europe
ara Middle East
有效表格
Language ID Active
----------- -------------
afr 0
sqi 1
ara 0
计划有固定数量的语言和地区。我计划添加到数据库中的语言(供以后翻译使用)包括(所有代码都将来自ISO 639-2 / B列,可在此处找到:http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes):
Afrikaans
Albanian
Arabic
Belarusian
Bulgarian
Catalan
Chinese (simplified)
Chinese (traditional)
Croatian
Czech
Danish
Dutch
English
Estonian
Esperanto
Filipino
Finnish
French
Galician
German
Greek
Hebrew
Hindi
Hungarian
Icelandic
Indonesian
Irish
Italian
Japanese
Korean
Latvian
Lithuanian
Macedonian
Malay
Maltese
Norwegian
Persian
Polish
Portuguese
Romanian
Russian
Serbian
Slovak
Slovenian
Spanish
Swahili
Swedish
Thai
Turkish
Ukrainian
Vietnamese
Welsh
Yiddish
区域类别包括:
All
Africa
Middle East
Americas
Asia-Pacific
Eastern Europe
Western Europe
我的问题是,我现在已经完全规范化了这张桌子吗?可以进一步规范化还是提高效率。在我开始设置之前,我将不胜感激。
答案 0 :(得分:2)
如果您在多个表中使用languageID作为PK,则表示您未正确规范化。
活动表是否应该指示语言是否处于活动状态?如果这样活跃应该只是语言表中的一个字段。
区域表应为regionID,region。
应该添加另一个表,将一个区域链接到一个只包含languageID和regionID列的语言,pk应该是regionID和languageID的组合键。这将允许您扩展以更好地表示区域语言的多对多关系。
按要求(以及我会做的一些小改动):
在你的例子中,为什么你想要一个链接表并不明显,但是当你到达“美洲”地区时想到它,你实际上需要有多种语言,因为每个国家都会说英语,西班牙语,法语或葡萄牙语。即使你把它分解到一个国家,加拿大也需要法语和英语。西班牙语也将出现在多个地区,欧洲和美洲。链接表将更好地代表这一点。
语言ID应该是一个int,即使3个字母的缩写是唯一的,大多数SQL引擎都能够更快地加入int,所以你的语言表应该是:
Language ID Language Code Language name Native name Active
----------- ------------- ------------- ------------ ------
1 afr Afrikaans Afrikaans 0
2 sqi Albanian gjuha shqipe 1
3 ara Arabic العربية
4 spa Spanish Espanol 1
5 eng English English 1
我似乎无法在阿拉伯语之后的活动字段中放置0,无论波形的ASCII是不是很好,所以想象它就在那里。
您的区域表应该简单:
Region ID Region
---------- -------------
1 Africa
2 Eastern Europe
3 Middle East
4 Americas
5 Western Europe
现在你想要一个链接表,基本上是:
Region ID Language ID
--------- -----------
1 1
2 2
3 3
4 4
4 5
5 4
5 5
因此,您可以看到这更好地表示可以在同一区域中使用多种语言,并且可以在多个位置使用某种语言。