Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多个外键还是多个表?_Mysql_Sql - Fatal编程技术网

Mysql 多个外键还是多个表?

Mysql 多个外键还是多个表?,mysql,sql,Mysql,Sql,实际上,我一直在思考如何更好地管理以下情况下的表创建 假设我有一个名为descriptions的表,以及items、type、choices 项目中的每个项目或类型中的类型或选项中的选项可以有一个或多个说明 假设表项类型和选项具有以下表结构(每个表可以有特定的列) 表说明有以下内容: +----+-------+---------+---------+ | ID | DESC | DESC_EN | DESC_RU | +----+-------+---------+---------+ |

实际上,我一直在思考如何更好地管理以下情况下的表创建

假设我有一个名为
descriptions
的表,以及
items
type
choices

项目
中的每个
项目
类型
中的
类型
选项
中的
选项
可以有一个或多个
说明

假设表
类型
选项
具有以下表结构(每个表可以有特定的列)

说明
有以下内容:

+----+-------+---------+---------+
| ID | DESC  | DESC_EN | DESC_RU |
+----+-------+---------+---------+
| 1  | CIAO  | HELLO   | ПРИВЕТ  | // This description have to belong to items
+----+-------+---------+---------+
| 2  | PIZZA | PIZZA   | ПИЦЦА   | // This description have to belong to types
+----+-------+---------+---------+

所以在这一点上我的怀疑是,我应该在
说明中创建3列吗
我应该为
类型和
选项创建3个外键吗
还是应该为每个表的说明创建3个单独的表?

翻译问题的另一种解决方案是每个
id有一行的表,
语言
说明

这非常方便,特别是对于添加新语言。对于一种新语言,除了向某些表中添加行之外,不需要在数据库中进行任何更改

另一个优点是,单个表实际上可以保存多个不同表的翻译,因此所有翻译都在一个位置。这可以简化使它们保持最新并确保整个应用程序的一致性


一个缺点是翻译列只有一个排序规则。这使得跨语言定制排序顺序(有时是比较)变得很棘手。这是否是一个问题还取决于您为应用程序设想的语言。有些语言,如阿拉伯语和希伯来语,是从右向左书写的,这可能会带来其他复杂问题。

翻译问题的另一种解决方案是,每个
id
语言和
描述都有一行

这非常方便,特别是对于添加新语言。对于一种新语言,除了向某些表中添加行之外,不需要在数据库中进行任何更改

另一个优点是,单个表实际上可以保存多个不同表的翻译,因此所有翻译都在一个位置。这可以简化使它们保持最新并确保整个应用程序的一致性


一个缺点是翻译列只有一个排序规则。这使得跨语言定制排序顺序(有时是比较)变得很棘手。这是否是一个问题还取决于您为应用程序设想的语言。有些语言(如阿拉伯语和希伯来语)是从右向左书写的,这可能会带来其他复杂性。

取决于您想要的设置。如果您循环使用类型、选项和项目(因此多次使用),则每个类型、选项和项目都有自己的表,并通过外键/主键关系链接到该表。具体取决于您想要的设置。如果循环使用类型、选项和项目(请多次使用)每个表都有自己的表,并通过外键/主键关系链接到它。但是,即使每个
id
语言有一行
说明
如何将该行连接到另一个表中的相对行,如
类型
我是否可以为翻译的每个表添加外键出现?@igormytuk。如果存在语言首选项(可能是默认设置),您可以加入
并使用
项_语言
表。主键应该是
项目id
/
语言id
(或者至少该组合是唯一的)。因此,我应该为我要翻译的每个表创建一个intersect表,以便翻译
项语言
,或者如果我要翻译
类型
,我必须使用键
类型id
/
语言id
创建一个intersect表,对吗?@IgorMytyuk。这取决于你想采取的方法。具有所有转换的单个表在某些方面很方便,但不允许很好地定义外键关系。多个不同的表格会导致扩散,但是要考虑一个更干净的数据模型。但是,即使每个
id
语言
描述
一行,我应该如何将该行连接到另一个表中的相对行,如
类型
,我应该为可能出现的翻译的每个表添加外键吗?@IgorMytyuk。如果存在语言首选项(可能是默认设置),您可以加入
并使用
项_语言
表。主键应该是
项目id
/
语言id
(或者至少该组合是唯一的)。因此,我应该为我要翻译的每个表创建一个intersect表,以便翻译
项语言
,或者如果我要翻译
类型
,我必须使用键
类型id
/
语言id
创建一个intersect表,对吗?@IgorMytyuk。这取决于你想采取的方法。具有所有转换的单个表在某些方面很方便,但不允许很好地定义外键关系。多个不同的表会导致数量激增,但确实允许使用更干净的数据模型。
+----+-------+---------+---------+
| ID | DESC  | DESC_EN | DESC_RU |
+----+-------+---------+---------+
| 1  | CIAO  | HELLO   | ПРИВЕТ  | // This description have to belong to items
+----+-------+---------+---------+
| 2  | PIZZA | PIZZA   | ПИЦЦА   | // This description have to belong to types
+----+-------+---------+---------+