0

我目前正在为语言列表设置 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

我现在的问题是我是否已经完全规范化了这张表?是否可以进一步规范化或提高效率。在进行设置之前,我将不胜感激任何建议。

4

1 回答 1

2

如果您在多个表中使用 languageID 作为 PK,则您未正确规范化。

活动表是否应该指示语言是否处于活动状态?如果如此活跃应该只是语言表中的一个字段。

地区表应该是regionID,地区。

应该添加另一个表,将区域链接到仅包含列 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,无论 squiggle 是什么 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

所以你可以看到这更好地代表了同一地区可能使用多种语言,一种语言可能在多个地点使用。

于 2012-08-01T17:55:05.657 回答