前言
之前写过,公司给任务让设计一个cms的管网系统,大致分成三部分 网站部分,栏目部分,内容部分,以往国家化的做法是使用i18n来做,但以我们的业务来讲行不通的,因为我们内容可能涉及长篇大论是其一,其二是内容数量会很多,比如帮助中心这个栏目,会延伸出很多内容,所以选择直接在数据库中存储翻译的内容,实现动态切换。
一、数据库设计
1、栏目表设计
因为我们栏目表是一个层级关系的表结构,刚开始是想直接存储一模一样字段信息的数据放进数据库,比如中文和英文直接每条数据对应,但是这样会产生两个问题,第一 加入只有一种语言的情况,会破坏树的层级结构,第二 栏目和内容的对应关系不复存在 会出现两个或多个栏目对应两个多个内容情况 失去一一对应关系。这样设计直接pass掉。
第二种情况 可以在中文,英文(暂时分两种)每条记录上再抽取一层相当于中文,英文记录在抽取一层的分支,这样 抽取出来的那一层用来维护树结构,查询语言时直接替换掉显示的记录即可。但是这种情况下,维护某一种语言的层级,需要在代码里一顿查询,整理,业务能实现,大会稍微麻烦一些。
最后采取加一个字段,内容存json,所有的语言以key-value的形式存储成一条记录,即可解决。
二、内容表设计
和栏目对比来看,栏目需要翻译的只有标题一个字段,二内容表里字段就多了 如标题、内容、图片、描述、来源等字段,所以如果像栏目表那样直接存放一个字段k-v肯定行不通了,最终决定,重新生成一张表,表内容专门用来存语言翻译信息,一种语言,一条记录,每种语言都和栏目关联即可,语言切换时,直接根据前端传的类型切换即可。