Sql 要在phpmyadmin中创建的语言表集。能否提高效率?它正常化了吗?

Sql 要在phpmyadmin中创建的语言表集。能否提高效率?它正常化了吗?,sql,Sql,我目前正在为语言列表设置SQL表,它将在不久的将来作为我的web应用程序翻译工作的框架 我决定创建的表和字段如下所示: Language -------- Language ID Language name Native name Region ------ Language ID Region Active ------ Language ID Active 语言ID将成为两个表中的主键 活动表中的活动字段只允许我知道哪些语言已被翻译(用1表示),哪些尚未翻译 示例数据如下所示: Lan

我目前正在为语言列表设置SQL表,它将在不久的将来作为我的web应用程序翻译工作的框架

我决定创建的表和字段如下所示:

Language
--------
Language ID
Language name
Native name

Region
------
Language ID
Region

Active
------
Language ID
Active
语言ID将成为两个表中的主键

活动表中的活动字段只允许我知道哪些语言已被翻译(用1表示),哪些尚未翻译

示例数据如下所示:

Language
--------
Language ID
Language name
Native name

Region
------
Language ID
Region

Active
------
Language ID
Active
语言表

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
地区表

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
活动表

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列中获取,可在此处找到:):

区域类别包括:

All
Africa 
Middle East
Americas
Asia-Pacific
Eastern Europe
Western Europe

我现在的问题是,我是否已经完全正常化了这个表?它能否进一步正常化或提高效率。在我开始设置它之前,如果您在多个表中使用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表应该是:

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

因此,您可以更好地看到,这表示在同一地区可以使用多种语言,并且一种语言可以在多个位置使用。

活动表仅指示一种语言是否处于活动状态。谢谢你的明确回答。我只是想问您是否可以更新您的答案,以显示您以与我类似的格式定义的新表。再次感谢你的帮助!谢谢您能为链接表建议一个合理的名称吗?命名实际上取决于您的组织惯例。我参加过的一些组织有一个惯例,任何链接表都是
tableA\u tableB
一些组织坚持
link\u tableA\u tableB
替换链接:组织用来表示多对多关系的任何工作。如果您的组织使用下划线来表示命名约定中的其他内容,您可能希望找到另一个要使用的字符。我更喜欢第一种方法,因为它简单。