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
+----+-------+---------+---------+