Closed5
RDBの多言語化データモデリングのデザインパターン

列ベースのアプローチ
各言語のデータを異なる列として保持します。
product_id | product_name_en | product_name_ja |
---|---|---|
1 | Apple | りんご |
- クエリする際に動的に言語を指定しづらい
- 新しい言語を追加するごとにスキーマを変更する必要がある

行ベースのアプローチ
異なる言語のデータを異なる行として保持します。
product_id | language_code | product_name |
---|---|---|
1 | en | Apple |
1 | ja | りんご |
- クエリする際に動的に言語を指定しやすい
- 新しい言語を簡単に追加できる
- 言語列を含む複合主キーになる

JSON/ARRAYベースのアプローチ
異なる言語のデータをJSON配列として1つの列に保持します。
product_id | product_names |
---|---|
1 | [{"lang": "en", "name": "Apple"}, {"lang": "ja", "name": "りんご"}] |
- 列や行を追加する必要がない
- クエリが複雑になる

JSON/OBJECTベースのアプローチ
異なる言語のデータをJSONオブジェクトのキーと値のペアとして1つの列に保持します。
product_id | product_names |
---|---|
1 | {"en": "Apple", "ja": "りんご"} |
- 列や行を追加する必要がない
- 言語タグをキーとして直接アクセスできるため、クエリがシンプルになる場合がある
- JSON/ARRAYベースのアプローチよりもクエリが複雑になる場合もある

まとめ
多言語対応のデータモデリングは、複数のアプローチが存在しますが、それぞれには独自のメリットとデメリットがあります。これらのアプローチは相互排他的なものではなく、特定の要件や状況に応じて複数のアプローチを組み合わせ、デメリットを補完することができる場合があります。
このスクラップは2023/10/08にクローズされました