国際化に対応したDB設計で一般的に用いられる方法と、メリット・デメリットを教えて下さい。


@単純にフィールドを増やす:

contents (table)
-id
-comment_jpn
-comment_usa
-comment_fra
-author
..

@テーブル単位で増やす:

contents_jpn (table)
-id
-comment
-author
..

contents_usa (table)
-id
-comment
-author
..

@マスター言語以外をまとめる:

contents (table) : master扱い
-id
-comment
-author
..

contents_i18n (table)
-id
-content_id : fk
-locale : usa,fra..
-comment
..

@全言語を並列に:

contents (table)
-id
-author
..

contents_i18n (table)
-id
-content_id : fk
-locale : jpn,usa,fra..
-comment
..

@1つのテーブルで済むように:

contents (table)
-id
-author
..

resources (table)
-id
-type
-published
..

i18n (table)
-id
-table : contents,resources
-row_id : (content_id),(resource_id)
-field : comment,(resouce)title
-locale : jpn,usa,fra..
-data
..

それぞれ一長一短ありそうですが、
一般に用いられている落としドコロはどの辺でしょうか?
(もしくはもっと高度な手法が・・)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/11/08 11:20:16
  • 終了:2008/11/15 11:25:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/11/08 11:39:21

ポイント35pt

文字コードが、DB単位/TABLE単位/FIELD単位で設定するかどうか(できるかどうか)で、前提条件が変わってきます。

ちなみに、MySQL 5.0 以降では、DB単位/TABLE単位/FIELD単位のいずれも可能ですが、インストールオプションによってはDB単位でしかできない場合があります。


DB単位でしか設定できない場合は、各言語のテーブルを別DBに持たせるしかありません。

TABLE単位で設定できるなら、あとで別の言語(TABLE)が増える可能性を見越して、「@テーブル単位で増やす」が無難でしょう。

文字コードに依存するデータをbinary形式で格納し、そのFIELDの文字コードを別FIELDに格納する以下のような構造にすれば、「@単純にフィールドを増やす」も可能でしょう。

contents (table)
-id
-comment_jpn
-encode_jpn
-comment_usa
-encode_usa
-comment_fra
-encode_fra
-author

参考サイト

id:dak

文字コードという超基本的な話を考えていなかったです(アホ

英語版を作るだけなら平気ですが、fraとかkorとかになってくると・・。

うーむ、やっぱり設計段階から折り込んでおかないとかなりキツそうですね。

質問して良かった。

2008/11/08 12:54:20
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542008/11/08 16:33:57

ポイント35pt

RDBMSは、何を使うのでしょうか?

もし、MySQLなら母体データ件数にもよりますが、百万件を超えるような規模なら、「列を追加する」という方法は、あまり推奨しません。

MySQLでは、「ALTER TABLE」実行時、格納している全件のコピー(再格納)が発生します。PostgreSQLでも、「NOT NULL」指定で列追加すると、全件更新が発生します。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文


商用RDBMSの場合は、「ナルが格納されている」と解釈し、ALTER TABLE時の全行更新は行わない仕組みにしている場合が多いので、この辺の懸念はなくなります。

id:dak

回答有難うございます。想定しているのはMySQLですが、人力で翻訳してゆくコンテンツなので、百万件を

超えるという事は無いかと思います。全件コピーの何が怖いのかはちょっと分からないのですが、処理的に

重そう&トラブりそうだなーという事は感じました。勉強になります。

2008/11/08 18:06:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません