@単純にフィールドを増やす:
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
..
それぞれ一長一短ありそうですが、
一般に用いられている落としドコロはどの辺でしょうか?
(もしくはもっと高度な手法が・・)
文字コードが、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