Sql 要在phpmyadmin中创建的语言表集。能否提高效率?它正常化了吗?
我目前正在为语言列表设置SQL表,它将在不久的将来作为我的web应用程序翻译工作的框架 我决定创建的表和字段如下所示:Sql 要在phpmyadmin中创建的语言表集。能否提高效率?它正常化了吗?,sql,Sql,我目前正在为语言列表设置SQL表,它将在不久的将来作为我的web应用程序翻译工作的框架 我决定创建的表和字段如下所示: Language -------- Language ID Language name Native name Region ------ Language ID Region Active ------ Language ID Active 语言ID将成为两个表中的主键 活动表中的活动字段只允许我知道哪些语言已被翻译(用1表示),哪些尚未翻译 示例数据如下所示: Lan
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
替换链接:组织用来表示多对多关系的任何工作。如果您的组织使用下划线来表示命名约定中的其他内容,您可能希望找到另一个要使用的字符。我更喜欢第一种方法,因为它简单。