导航:首页 > 万维百科 > 多语言网站数据库设计

多语言网站数据库设计

发布时间:2021-02-06 02:54:06

1、cms框架如何用一套模板一个数据库搭建多国语言的网站

建议你参考这方面做得非常好的CMS,国外很有名的Joomla。可以实现十几种语言的切换。其中很重要的组件是Joomfish

2、数据库辅导:SQLServer存储多语言数据的几种方法

一般的,如果是普通的项目型软件,就比较简单了,你只需要设计出固定的 ChineseName和EnglishName字段就可以了。本文并不讨论这种形式,而是讨论在大型平台化的ERP软件中如何实现通用化的多语言存储和读取。
子表方式第一种方式是建立一张子表,U9大概就是这个样子,你需要注意的是,每一个实体如果包含多语言字段,都会出现以_Trl为后缀的表。也许你会觉得麻烦,其实不然,这些都是平台在后台自动处理了,你仅仅需要标记这个字段是多语言字段就可以了。
从理论上来说,他的存储是最符合数据库设计原则的,不管你的系统使用多少语言,数据库结构是不变的。但是我总觉得查询起来SQL会比较复杂,虽然这事平台也会帮助你完成。我在想,如果我要一个多语言策略如何实现呢?多语言策略的例子:如果此字段没有对应的繁体中文,取简体中文,如果还没有,取默认的语言内容。那么在一个SQL中如何实现呢?
数据结构是一样的,唯一的区别是通过ORM屏蔽了数据库的结构,在设计实体时,你仅仅设计了Name字段,其类型是“多语言类型”,然后在客户那里初始化时,客户可以决定采用多少种语言,然后ORM在后台自动添加这些列。
这是我希望的设计,因为他足够的简洁,任何人都可以非常方便的写出SQL语言。而且执行起来一定是最高效的。而且实现上面说的取值策略也很容易,只需要实现编排好多个嵌套的IIF函数就是了。
缺点呢?当然有,首先冗余很大,即使没有填写对应的英文,一样要占用一个空间。其次,如果客户发神经,一下子选择了十几个语言,然后发现他并不需要,又想删除掉?那么我需要检查数据库的所有相关字段是否全部没有数据,才能决定可以删除这个语言并删除所有相关的字段。这是个问题。
XML字段
这种方式我就不画图了,很简单,还是只有一个字段Name,不过数据类型不是nvarchar,而是把定义成XML类型,这是SQLServer2005新增的类型,我们可以在此字段存储诸如下面这样的数据:
<items
<item lng="" value="默认" /
<item lng="CHS" value="中文" /
<item lng="EN" value="English" /
</items
Select EmployeeId,Name.value(’(/items/item[@lng="CHS"]/@value)[1]’,’nvarchar(max)’) FROM Employees
很简单,我喜欢。
不过有人可能会说,其实没有xml类型前,我就已经使用nvarchar来实现了,使用一个自定义函数一样可以解决(使用诸如:/en/english /chs/中文的方式存储)。但是我认为字符串方式处理并不完美,主要表现在你必须自己小心处理特殊字符,否则很容易乱套。使用XML类型的话数据库会处理这些。另外,SQL Server对XML类型的查询有优化处理,比起SQL自定义函数运行的速度要快的多。

3、PHP关于自定义字段+多语言的网站数据库设计

首先说明一点,用序列化和JSON不会不安全啊,数据安不安全取决于你的程序有没有过版滤并且处权理好要入库的数据,一般来说,入库的数据是需要保证安全的。
对于你这个问题,最好的做法还是字段扩展,这样至少搜索速度上不会出现大问题,如果是将所有的数据都放到一个字段上,就是上面的content字段,这样后续并不利于搜索,数据感觉也比较混乱。如果仅仅是多语言实现,单词之间的对应关系,这样使用单字段还是可以的,毕竟数据也不多。

4、网站数据库设计需要学会哪些语言 请详细点 谢

数据库设计是针对数据库的设计,懂数据库原理和结构即可根据需求建立数据库手机,表,视图,键,锁等,本身就是一门学问,跟别的语言无关

5、网站开发,各种语言和数据库之间是怎么样的搭配的?那种搭配好?比如说dreamweaver +sql.

dreamweaver 不是语言,谢谢 sql也不是数据库,再次谢谢
先搞清楚概念

6、SQLServer存储多语言数据的几种方法

一般的,如果是普通的项目型软件,就比较简单了,你只需要设计出固定的 ChineseName和EnglishName字段就可以了。本文并不讨论这种形式,而是讨论在大型平台化的ERP软件中如何实现通用化的多语言存储和读取。子表方式第一种方式是建立一张子表,U9大概就是这个样子,你需要注意的是,每一个实体如果包含多语言字段,都会出现以_Trl为后缀的表。也许你会觉得麻烦,其实不然,这些都是平台在后台自动处理了,你仅仅需要标记这个字段是多语言字段就可以了。从理论上来说,他的存储是最符合数据库设计原则的,不管你的系统使用多少语言,数据库结构是不变的。但是我总觉得查询起来SQL会比较复杂,虽然这事平台也会帮助你完成。我在想,如果我要一个多语言策略如何实现呢?多语言策略的例子:如果此字段没有对应的繁体中文,取简体中文,如果还没有,取默认的语言内容。那么在一个SQL中如何实现呢?数据结构是一样的,唯一的区别是通过ORM屏蔽了数据库的结构,在设计实体时,你仅仅设计了Name字段,其类型是“多语言类型”,然后在客户那里初始化时,客户可以决定采用多少种语言,然后ORM在后台自动添加这些列。这是我希望的设计,因为他足够的简洁,任何人都可以非常方便的写出SQL语言。而且执行起来一定是最高效的。而且实现上面说的取值策略也很容易,只需要实现编排好多个嵌套的IIF函数就是了。缺点呢?当然有,首先冗余很大,即使没有填写对应的英文,一样要占用一个空间。其次,如果客户发神经,一下子选择了十几个语言,然后发现他并不需要,又想删除掉?那么我需要检查数据库的所有相关字段是否全部没有数据,才能决定可以删除这个语言并删除所有相关的字段。这是个问题。XML字段这种方式我就不画图了,很简单,还是只有一个字段Name,不过数据类型不是nvarchar,而是把定义成XML类型,这是SQLServer2005新增的类型,我们可以在此字段存储诸如下面这样的数据:12345<items<item lng= VALUE=默认 /<item lng=CHS VALUE=中文 /<item lng=EN VALUE=English /</itemsSelect EmployeeId,Name.value(’(/items/item[@lng="CHS"]/@value)[1]’,’nvarchar(max)’) FROM Employees很简单,我喜欢。不过有人可能会说,其实没有xml类型前,我就已经使用nvarchar来实现了,使用一个自定义函数一样可以解决(使用诸如:/en/english /chs/中文的方式存储)。但是我认为字符串方式处理并不完美,主要表现在你必须自己小心处理特殊字符,否则很容易乱套。使用XML类型的话数据库会处理这些。另外,SQL Server对XML类型的查询有优化处理,比起SQL自定义函数运行的速度要快的多。

7、请问:网站开发有多种语言及数据库,分别什么语言使用什么数据库?规律是怎么样的

这个看个人吧,ASP也是可以使用MYSQL或ORACLE的
但是常见的是以专下搭配:属asp+access/mssql
.net+mssql/access
php+mysql/sqlite
jsp+mysql/oracle

8、多语言网页在设计上该考虑什么,才能有好的使用者体验

1.域名的选择

一般来说不同语种的网站,用不同的域名比较好,但这样要申请很多域名,经济条件允许的情况下推荐此种方法。
所以还可以用不同的二级域名来做,这是比较折中的方法,可以优先选择。
另外一种办法就是用不同的目录来做,可以直接用子目录建站,也可以使用伪静态的形式。
还有就是使用参数形式,但是这种方法不推荐使用。
对于搜索引擎来说,不同的域名(不管是顶级域名还是二级域名)的网站都当做独立的网站来对待,收录或者权重会更有利。
2.翻译方式的选择
最理想的选择当然是人工翻译每一篇文章,不过这样成本比较大,尤其是没有合适的人才储备时。其次还有使用google或其他网站提供的js即时翻译,但并不推荐使用这样的方法,因为一会影响网站排版,二来翻译速度慢,三来接口不稳定,第四不利于搜索引擎收录。第三种选择就是使用自动翻译软件翻译后保存在数据库,然后直接调用,算是一个比较折中的方法。

3.各语言的切换

如果没有添加多语言切换方式,那么用户无法在你的网站页面中自由切换语言,从而没法找到自己想要的语言版本,那么之前的工作也算白做了。
一般来说,语言切换方式最常见到的地方有3个,一个是首页或第一次访问网站时,一个是网页的右上角,还有网页的底部,当然也可以放在其他位置,只要美观并且方便用户找到切换位置就可以了。切换时可以直接把各种支持的语言列出来,也可以用下拉菜单,也可以用弹出框。这是做多语言版本网站必须要重视的一个小细节。
有的网站会在每一种语言选项的前面添加一个小国旗,这样会显得语言选项更加醒目,使用户感觉网站更加正规和情切,从而让你的网站充满了国际范。
4.各种语言的一致性
建立了多语言网站就需要保证各种语言的一致性,比如经常见到一个产品有中文,但是没英文,除非确实市场策略就是如此,否则应该保持同步。或者英文站一个样式,中文站一个样式,url结构不同等等,为了保证整体的对外效果,还是使用同一个样式为好。
过去流行使用一个欢迎界面,然后让用户选择语言,但是现在流行检测用户操作系统或浏览器语音,然后直接跳转,并且任意页面均可自由切换至其他语言。
要做多语言,就一定要做彻底,不要中英文混排,或者漏翻译,包括图片也应该完全是针对不同语言进行制图。同时也不要使用特殊的验证码,只要英文和数字即可,以免用户无法输入。建议使用sleda多语种建站系统,免费又好用。

9、网站如何实现多语言架构,比如同时支持中,英,法,俄

此文转载至:黄熊

电子商务网站多语言版设计思路

1. 数据库设计

1. 分库,还是分表

2. 单表还是多表1234

这步其实很关键:首先 这直接涉及到代码逻辑,一有不慎,可能会导致原有方案失效

说说我们的设计思路吧!

我们采用的是分库方式!

一种语言一个数据库

这样的好处有哪些呢?

1.避免单库数据量过大,导致查询难以优化。

举个例子:假设有2种语言,中文和英文。在商品表中,一个商品在不同语言下,其实还是同一件商品,他们有共同的属性,共同的价格,共同的库存等等;如果放在一个库中那么本来商品数据有100W,现在直接变成了200W。so优化起来是不是更麻烦了呢。而且对于像商品这种表,更新操作是非常频繁的,这样就要不断的去维护索引,这其中开销也是蛮大的。12

- 为什么不用分表? 
假如一种语言一个表,那跟分库道理不就一样了吗? 
其实我个人觉得分表有很多不足的地方。

如果采用一个语言一张表,那么我们表的数据过大怎么办呢?这时候是不是还要继续分表呢?就目前的状况来看,很多公司都会采用分表去解决。也就是说要分2次表,这样不是很麻烦吗,而且表在同一个数据库中,数据量变大的时候怎么办呢,当达到Mysql储存上限(这里指的是mysql存储到一定数据时候就变得难以优化的情况)不就更麻烦吗? 
所以我们采用了分库策略。

表如何设计

需要中英文对于的表,放到对于的库中即可,无需把所有的表都copy

举个例子 
商品表:

 id  title  stock status1

假设我们的商品字段如上 
这个时候我们添加商品的时候肯定是要往数据库(多个语言)里面添加数据。也就是说我添加了一个中文语言的商品,对应的英文数据库也应该插入同样的数据。然后再去编辑英文的商品数据。这样就保证了一个商品是一定会有多语言的。 
那么我们如何做到同时添加 
1. 刚开始想用触发器直接同步添加,可是这样一个库就要建立一个触发器?很显然,这样肯定就会陷入一个死循环中。(事实上MySQL是会报错的,为什么我就不说了)。所以这种偷懒的方案是不能实现得了啊。 
2. 后来我想用存储过程去实现,但是呢,存错过程确实存在不少问题,可以参考我的一片文章 MySQL 存储过程的优缺点 。so只能放弃这种方案 
3. 修改PHP框架的数据库操作方法。 
我们采用的是THINKPHP。 这里说下如何修改tp 的 add . 
tp的add方法是声明在Model下。所以我们新建一个commonModel来继承他的Model类

首先要在配置文件中配置好多个数据库dsn

eg : 'DB_LIST' => array('DN_CN' => 'mysql:XXXX',  'DN_EN' => 'mysql:XXXX'
 );1234

配置公共数据库的表

eg 'LANG_TABLE' => array(  'goods' => array('stock,status'), //这里配置的是该表需要更新的字段;比如商品的库存和状态肯定都是一致的)123
以下是伪代码protected $dbName;  //数据库名protected $tableName; //表名protected $data;  // ORM创建的数据对象protecteds $option;  //查询条件等function __construct(){}function add($data,$option,$replace){
 if(!$data)  $data = $this->data;//如果是create的话,那么add一次之后,$this->data 会被清空

 parent::add($data,$option,$replace); //往当前库插入数据
 //切换数据库
 $this->dbName = 'XXXX';  //这里我们的库都在同一台服务器上,所以不用重新连接
 //如果在不用数据库,那么就读取DB_LIST配置来重新连接数据库。$this->db($id,$dsn);这样切换了数据库
 parent::add($data,$option,$replace);

 //切换回当前数据库
 $this->dbName = 'xxx';
}

删除也是同理

更新数据

一个表中肯定会有一些字段是不用做多语言的,但是必须保证不用语言下的数据是一致的。比如商品价格,商品库存等 
这个时候更新了一条记录,也要去同步下其他库的数据

正如上面配置。 我们只需要把需要同步的字段配置好就行了function save($data,$option){
 parent::save($data,$option);  //切换数据库
 //对比$data 的key也配置的字段,取交集 $field
 parent::save($field,$option);  //如果是create的数据,记得对data进行赋值}
其他tp的操作方法(如execute  addAll)我就不演示了。12345678910

其实上面是很简单的。真正的重点在下面

我们取商品的数据的时候通常是通过id去查询。

那么我们多个库的时候,要取数据还能用id吗?

如果能用id那么这篇文章已经结束了,哈哈!

那么为什么不能用id了呢?

其实很简单的道理:你没办法保证多个语言库的id是一致的,因为我们id是increament,so id没办法同步?举个例子:A用户往中文库插入一条数据,id 为100,这时候b用户往英文表插入一条数据id也有100,(这种情况是很有可能发生的,所以id肯定会不一样)?

换个角度想想:如果我们加事务呢,这样是不是能保证数据一致性呢?其实这更可怕,很可能会造成死锁!

Why ? 死锁其实道理很简单。

A用户往中文库插入一条数据,id 为100,这时候中文库的表肯定被锁住了,这时候b用户往英文表插入一条数据id也有100,这时候英文库的表也被锁住了。但是他们又要同步到其他库。这时候A这边会发现英文库的表锁了,那么它要插入数据就必须等英文库的表解锁。但是与此同时b用户也会发现中文库的表锁了,它也要等解锁。这样就造成了双方都在等。死锁就这样形成了。 
所以id是很不靠谱的。

解决方案: 
新增一个字段,类型为int,该字段的生成规则可是时间戳+随机数(这里面还涉及到一些算法,我就不公布了)。(为什么是int我就不解释了,很简单的道理)。这样多个语言的数据就通过此字段来获取(因为这个值是事先生成的,每个库的值都是一样的,所以不会冲突)。

10、在开发多语言网站的时候,应该如何设计数据库呢?请赐教

一个库 每个锻多一个或几个外语的就好了 调用的时候那种语言调用那个段

与多语言网站数据库设计相关的知识