多语言内容的高效数据库模式?

Yog*_*oga 5 schema database-design application-design

假设我有一个用于博客文章posts、 和架构的表

id
author
title
content
Run Code Online (Sandbox Code Playgroud)

每个都post可以属于一些categories

id
name
descrtiption
Run Code Online (Sandbox Code Playgroud)

所以一篇博文可以属于多个类别。

显然titleand contentin posts、 andnamedescriptionincategories可以翻译成不同的语言。

那么,考虑到现有的 db 模式设计,扩展对多语言应用程序的支持的最有效和最合理的方法是什么?

Mic*_*een 6

最少的工作是在每个表中放置一个语言代码。那么问题是没有办法证明,比如说,post 612(英语)是 post 943(西班牙语)的翻译。

为了达到这种水平的交叉引用,有必要将帖子的存在与其内容分开。会有这些表:

Language
  Language_id
  Name

Post
  Post_id

Category
  Category_id

PostCategory
  Post_id
  Category_id

CategoryLanguage
  Category_id
  Language_id
  Name
  Description
  ...

PostLanguage
  Post_id
  Language_id
  Title
  Content
  ...
Run Code Online (Sandbox Code Playgroud)

理想情况下,我们希望同时翻译帖子及其类别。使用声明性约束很难同时强制两者的存在。如果这是一项要求,则将强制执行推入应用程序会更简单。

显示帖子时,相应的类别应该是相同语言的类别。为此,可以允许每个用户选择一种语言。需要有规则来确定如果一个项目没有被翻译成用户的首选语言会发生什么。也许定义了系统默认语言?