一个 table 有 2 个不同数据类型的字段,其中只有一个用于连接目的,这是一个好的解决方案吗?

A table with 2 fields with different data types, only one of them is for join purpose, is this a good solution?

我正在用关系数据库设计一个简单的字典数据库。有一个table存放所有的英文单词,命名WordEn,用一个整数id作为主键 .然后还有一个table,命名为ExplanationEn,存储所有英文单词在不同语言中的解释,例如中文,日文等。在我的第一个计划中, ExplanationEn table 包含以下列:

WordEnExplanationEn之间的关系是一对多因为一个词肯定可以有很多含义

但考虑到很多英语单词在另一种语言中可能有对应的单词,我打算再创建一个table,例如WordCh存储中文单词 所以我还是想用ExplanationEn来桥接WordEnWordCh。我想到了两个解决方案:

  1. 保持ExplanationEntable的结构不变,那么当ExplanationEnjoinWordCh时,条件就可以了cast解释为integer并与WordCh.id比较cast的成本将在每条记录上ExplanationEntable

  2. 添加一个新字段,例如称为 counterPartId,作为 WordChExplanationEn 的外键。因此,ExplanationEn 的每条记录将包含 WordChExplanationEn 字段为空,这意味着不可能两个字段都填充值。与第一个解决方案相比,它现在确实有 cast string value to integer 的成本,但是增加了一个额外的字段

问题:这两个方案哪个更好,或者还有其他更好的方案吗?

假设每个英语单词在另一种语言中只有一个解释,并且可以至多在该语言中有另一个对应的单词,我认为一个好的解决方案可以是添加ExplanationEx table 的新字段,其中包含给出解释的语言中的相应单词。这个新字段(例如 translation)可以有空值。

使用此解决方案,您可以减少用于检索所需信息的联接数。

我会和 3 table 一起工作:
Words(单词、wordId、语言)
Meanings (wordId, meaning, meaningId)
Translatesv1 (fromMeaningId, toMeaningId) -- 自连接 table

Translatesv2(groupId, meaningId) -- 自加入table

基数:
1 种语言中的 1 个单词可能有多种含义
含义需要自连接 table.

我们的想法是在含义之间而不是在单词之间进行自连接,并且进行概括,这样您就不必在每次包含新语言时都更改数据库结构。
Translatev1 的缺点是它有一个隐含的 'from..to' 方向。
Tranlastev2 实现起来有点复杂,但更灵活,可以在任何方向上工作。