Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multilingual database design pattern

I'm currently working on Blog-Software which should offer support for content in multiple languages.

I'm thinking of a way to design my database (MySQL). My first thought was the following:

  • Every entry is stored in a table (lets call it entries). This table holds information which doesn't change (like the unique ID, if it's published or not and the post-type).
  • Another table (let's call it content) contains the strings (like the content, the headline, the date, and author of the specific language).
  • They are then joined by the unique entry-id.

The idea of this is that one article can be translated into multiple other languages, but it doesn't need to be. If there is no translation in the native language of the user (determined by his IP or something), he sees the standard language (which would be English).

For me this sounds like a simple multilingual database and I'm sure there is a design pattern for this. Sadly, I didn't find any.

If there is no pattern, how would you go about realizing this? Any input is greatly appreciated.

like image 484
Lukas Knuth Avatar asked Aug 01 '11 15:08

Lukas Knuth


People also ask

What are best practices for multi language database design?

For an application and its database to be truly multi-lingual, all texts should have a translation in each supported language – not just the text data in a particular table. This is achieved with a translation subschema where all data with textual content that can reach the user's eyes is stored.

What is a multilingual database?

Multilingual data support is the ability to display data from database schemas in multiple languages.

What are the 3 database design steps?

The methodology is depicted as a bit by bit guide to the three main phases of database design, namely: conceptual, logical, and physical design.


2 Answers

Your approach is what I've seen in most applications with this kind of capability. The only changing piece is that some places will put the "default" values into the base table (Entry) while others will treat it as just another Content row.

like image 166
Tom H Avatar answered Sep 28 '22 16:09

Tom H


That design will also give you the ability to search (or restrict search) in all languages easily. From a db design perspective, its imho the best design you can use.

like image 22
Jean-Francois Avatar answered Sep 28 '22 14:09

Jean-Francois