Closed5

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

KTFKTF

列ベースのアプローチ

各言語のデータを異なる列として保持します。

product_id product_name_en product_name_ja
1 Apple りんご
  • クエリする際に動的に言語を指定しづらい
  • 新しい言語を追加するごとにスキーマを変更する必要がある
KTFKTF

行ベースのアプローチ

異なる言語のデータを異なる行として保持します。

product_id language_code product_name
1 en Apple
1 ja りんご
  • クエリする際に動的に言語を指定しやすい
  • 新しい言語を簡単に追加できる
  • 言語列を含む複合主キーになる
KTFKTF

JSON/ARRAYベースのアプローチ

異なる言語のデータをJSON配列として1つの列に保持します。

product_id product_names
1 [{"lang": "en", "name": "Apple"}, {"lang": "ja", "name": "りんご"}]
  • 列や行を追加する必要がない
  • クエリが複雑になる
KTFKTF

JSON/OBJECTベースのアプローチ

異なる言語のデータをJSONオブジェクトのキーと値のペアとして1つの列に保持します。

product_id product_names
1 {"en": "Apple", "ja": "りんご"}
  • 列や行を追加する必要がない
  • 言語タグをキーとして直接アクセスできるため、クエリがシンプルになる場合がある
  • JSON/ARRAYベースのアプローチよりもクエリが複雑になる場合もある
KTFKTF

まとめ

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

このスクラップは2023/10/08にクローズされました