2009-04-03 10 views
1

は、私は次の列(単語のリスト)を持つテーブルがあるとします単一テーブル継承または2つのテーブル?

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) 

と仮定2つのシナリオ、(1)I(2)私はのみ訳語をプルする必要がある場合、それはから翻訳された元の単語と一緒に翻訳された単語を引く必要があります。どちらのシナリオでも、元の単語をはるかに大きく使用しています(の両方を更新/挿入)。

だから、それぞれのシナリオにはどのようなアプローチが最適でしょうか?私は最初のアプローチに傾いています。それ以来、私の "デフォルト"のSELECTはlangカラムで修飾される必要はありません。どう思いますか?

ありがとうございます!

答えて

1

今すぐデータベースを正規化しないと言語を追加したい場合は、後で傷つけると思います。 単語がデフォルト言語になっている単語表があります。それはIDを持っています。 IDを持つ言語表(スペイン語、2)と、単語ID、言語ID、最後にその言語の実際の単語を含む翻訳表を用意してください。これはリンクされたテーブルです。

クエリのビューを使用しますが、挿入と更新の場合はDBMSによってハードクエリが必要な場合があります。

これは、ローカリゼーションを提供しようとしていることを前提としているため、後で言語を追加する可能性があります。このようにすると、言語を追加するたびにデータベースを変更して列を追加する必要がなくなります。 本当に1つの翻訳しか必要とせず、別の翻訳が必要になることは間違いないでしょう。

0

"単語"に "翻訳された単語"とは別のアイデンティティーがあるように思われるので、1つは第1の選択肢があなたのニーズをより良く満たすと思うと思います。 。 - あなただけそれがキーとラング値だことにより、テキストを参照してくださいどこ

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

より適切であろう:

通常、私はより多くのようなデザインが思うだろうしかし、あなたはKeyを「元の言葉」に置き換えているように見えます。

関連する問題