1

假设我有一个包含以下列(单词列表)的表:

word: varchar
contributor: integer (FK)

现在,假设我想为每个“单词”翻译。什么是最好的?有第二张桌子吗?

word: integer (FK)
translation: varchar
contributor: integer (FK)
lang: integer (FK)

还是都在同一张桌子上?

word: varchar
translation_for: integer (FK - to the same table)
contributor: integer (FK)
lang: integer (FK)

假设有两种情况,(1)我需要提取一个翻译后的词以及它翻译自的原始词,(2)我需要提取翻译后的词。在这两种情况下,我都会更频繁地使用“原始”词(SELECTingUPDATEing/INSERTing)。

那么,哪种方法最适合每种情况或一般情况?我倾向于第一种方法,因为那时我的“默认”选择不必由lang列限定。你怎么看?

谢谢!

4

2 回答 2

1

如果您现在不规范化数据库,我认为以后如果您想添加一种语言,您以后会受到伤害。有一个单词表,其中单词是默认语言。它有一个 ID。有一个带有 ID(即西班牙语,2)的语言表和一个包含单词 ID、语言 ID 以及最后是该语言的实际单词的翻译表。这是链接表。

使用视图进行查询,但对于插入和更新,取决于您的 DBMS,您可能需要硬查询。

这只是假设您正在尝试提供本地化,因此以后可能会添加更多语言。这样做比每次添加语言时都必须修改数据库以添加列更容易。如果您真的只需要一个翻译并且非常怀疑您是否需要另一个翻译,那么只需添加一列就可以了。

于 2009-04-03T21:30:53.733 回答
0

由于您似乎希望“单词”具有与“翻译单词”不同的身份,因此 1 认为第一个选项更能满足您的需求。

通常,我认为设计更像:

PK (Key (varchar), Lang (FK)), Word (nvarchar)

会更合适 - 你只通过它的 Key 和 Lang 值来引用文本。但是,看起来您正在用“原始单词”替换 Key - 所以它略有不同。

于 2009-04-03T21:27:47.220 回答