999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在MYSQL中實現(xiàn)多語言數(shù)據(jù)庫設(shè)計

2014-09-26 23:34:22常中華
軟件工程 2014年9期

摘 要:在設(shè)計和開發(fā)一個多語言版本的網(wǎng)站時,通常把每一種語言的內(nèi)容保存在同一數(shù)據(jù)庫中,在數(shù)據(jù)庫設(shè)計時有多種方法,每一種方法根據(jù)網(wǎng)站的需求和數(shù)據(jù)的大小可以不同。本文通過PHP+MYSQL實現(xiàn)三種不同的多語言網(wǎng)站設(shè)計和開發(fā)方案。

關(guān)鍵詞:網(wǎng)站開發(fā);數(shù)據(jù)庫設(shè)計;MYSQL;PHP

中圖分類號: TP311 文獻標識碼:A

1 引言(Introduction)

隨著全球經(jīng)濟一體化,我國各行各業(yè)融入國際社會的步伐在加快,開發(fā)一個多國語言網(wǎng)站是向國際社會展示自己的有效途徑。在設(shè)計和開發(fā)一個多語言版本的網(wǎng)站時,我們通常把每一種語言的內(nèi)容保存在同一數(shù)據(jù)庫中,在數(shù)據(jù)庫設(shè)計時有多種方法,每一種方法根據(jù)網(wǎng)站的需求和數(shù)據(jù)的大小可以不同[1]。本文通過PHP+MYSQL實現(xiàn)三種不同的多語言網(wǎng)站設(shè)計和開發(fā)方案。

2 字段列方法(Column approach)

這是最簡單的方法,創(chuàng)建一個數(shù)據(jù)庫,如Test,數(shù)據(jù)庫中建立存放網(wǎng)站內(nèi)容的表App_product,為每種語言添加一個文本列,創(chuàng)建該表的MYSQL語句如下[2]:

CREATE TABLE app_product (

`id` int(10) NOT NULL AUTO_INCREMENT,

`date_created` datetime NOT NULL,

`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',

`title_cn` varchar(255) NOT NULL,

`title_en` varchar(255) NOT NULL,

`title_jp` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

);

向表App_product中輸入網(wǎng)站內(nèi)容,如圖1所示。

圖1 字段列方法數(shù)據(jù)庫MYSQL截圖

Fig.1 MYSQL screenshot of column approach

用PHP實現(xiàn)查詢的代碼:

<?php

// 檢索所有語言的標題列

$sql = "SELECT * FROM `app_product` WHERE 1";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Chinese: ".$row["title_cn"]."

";

echo " English: ".$row["title_en"]."

";

echo "Japanese: ".$row["title_jp"]."

";

}

}

//根據(jù)選擇的語言,顯示檢索結(jié)果

$sql = "SELECT `title_".$_SESSION['current_language']."` as `title`

FROM `app_product`";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:容易實現(xiàn),每個語言在數(shù)據(jù)庫表中為一列內(nèi)容,沒有重復內(nèi)容。缺點是:數(shù)據(jù)庫維護困難,適合于兩三種語言。

3 記錄行方法(Multirow approach)

這種方法與上面的字段列方法相似,只是每種語言的內(nèi)容占據(jù)一行,創(chuàng)建App_product_row表的MYSQL語句如下:

CREATE TABLE app_product_row (

`id` int(10) NOT NULL AUTO_INCREMENT,

`date_created` datetime NOT NULL,

`price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',

`language_id` varchar(2) NOT NULL,

`title` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

);

向表App_product中輸入網(wǎng)站內(nèi)容,如圖2所示。

圖2 記錄行方法數(shù)據(jù)庫MYSQL截圖

Fig.2 MYSQL Screenshot ofMultirow Approach

用PHP實現(xiàn)查詢的代碼:

<?php

// 檢索語言列

$sql = "SELECT * FROM `app_product` WHERE `id` = 1";

if($result = mysql_query($sql)){

while($row = mysql_fetch_assoc($result)){

echo "Language (".$row["language_id"]."): ".$row["title"]."

";endprint

}

}

//根據(jù)選擇的語言,顯示檢索結(jié)果

$sql = "SELECT `title`

FROM `app_product_row`

WHERE `language_id` = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:容易實現(xiàn),每一行就是一種語言的內(nèi)容。缺點是:數(shù)據(jù)大量重復,數(shù)據(jù)庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉(zhuǎn)換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉(zhuǎn)換表app_product_translation_4的內(nèi)容是每種語言對應(yīng)的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創(chuàng)建表的MYSQL語句如下:

CREATE TABLE IF NOT EXISTS `app_product_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`date_created` datetime NOT NULL,

`price` decimal(10,2) NOT NULL DEFAULT '0.00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_product_translation_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`product_id` int(11) NOT NULL DEFAULT '0',

`language_code` char(2) NOT NULL,

`title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`),

KEY `translation_id` (`product_id`),

KEY `language_code` (`language_code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_language_4` (

`code` char(2) NOT NULL,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

分別向表app_product_translation_4、app_language_4和app_product_4中輸入網(wǎng)站內(nèi)容,及其三個表之間的關(guān)系,如圖3所示。

圖3 附加轉(zhuǎn)換表的方法數(shù)據(jù)庫MYSQL截圖及其關(guān)系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現(xiàn)查詢的代碼:

<?php

// 檢索所有語言標題列

$sql = "SELECT p.*, pt.title, pt.description, l.name as language_name

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

INNER JOIN `app_language_4` l ON pt.language_code = l.code

WHERE p.id = 1";

if($result = mysql_query($sql)){

while($row = mysql_fetch_assoc($result)){

echo "Language (".$row["language_name"]."): ".$row["title"]."

";

}

}

// 根據(jù)選擇的語言檢索符合條件的結(jié)果

$sql = "SELECT p.*, pt.title, pt.description

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

WHERE p.id = 1 AND pt.language_code = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:更符合數(shù)據(jù)庫設(shè)計的規(guī)范,增加新的語言更容易實現(xiàn),查詢的效率更高。缺點是:表的數(shù)量增加,需要增加轉(zhuǎn)換表。

5 結(jié)論(Conclusion)

在多語言網(wǎng)站設(shè)計時,上述數(shù)據(jù)庫設(shè)計的方法不是唯一的選擇,也可采用其他方法,要根據(jù)項目需求而定,但上述方法是十分常用而有效的。當網(wǎng)站的內(nèi)容涉及的語言不多,又固定那幾種語言時,列或行方法較為簡單實用,否則使用增加附加表的方法。

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網(wǎng)站的設(shè)計與實現(xiàn)[J].微電

子學與計算機,2008,25(5):43.

[2] 主福洋,郭坤.基于PHP技術(shù)的網(wǎng)站建設(shè)[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

常中華(1968-),男,碩士,副教授.研究領(lǐng)域:計算機應(yīng)用

技術(shù).endprint

}

}

//根據(jù)選擇的語言,顯示檢索結(jié)果

$sql = "SELECT `title`

FROM `app_product_row`

WHERE `language_id` = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:容易實現(xiàn),每一行就是一種語言的內(nèi)容。缺點是:數(shù)據(jù)大量重復,數(shù)據(jù)庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉(zhuǎn)換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉(zhuǎn)換表app_product_translation_4的內(nèi)容是每種語言對應(yīng)的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創(chuàng)建表的MYSQL語句如下:

CREATE TABLE IF NOT EXISTS `app_product_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`date_created` datetime NOT NULL,

`price` decimal(10,2) NOT NULL DEFAULT '0.00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_product_translation_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`product_id` int(11) NOT NULL DEFAULT '0',

`language_code` char(2) NOT NULL,

`title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`),

KEY `translation_id` (`product_id`),

KEY `language_code` (`language_code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_language_4` (

`code` char(2) NOT NULL,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

分別向表app_product_translation_4、app_language_4和app_product_4中輸入網(wǎng)站內(nèi)容,及其三個表之間的關(guān)系,如圖3所示。

圖3 附加轉(zhuǎn)換表的方法數(shù)據(jù)庫MYSQL截圖及其關(guān)系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現(xiàn)查詢的代碼:

<?php

// 檢索所有語言標題列

$sql = "SELECT p.*, pt.title, pt.description, l.name as language_name

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

INNER JOIN `app_language_4` l ON pt.language_code = l.code

WHERE p.id = 1";

if($result = mysql_query($sql)){

while($row = mysql_fetch_assoc($result)){

echo "Language (".$row["language_name"]."): ".$row["title"]."

";

}

}

// 根據(jù)選擇的語言檢索符合條件的結(jié)果

$sql = "SELECT p.*, pt.title, pt.description

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

WHERE p.id = 1 AND pt.language_code = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:更符合數(shù)據(jù)庫設(shè)計的規(guī)范,增加新的語言更容易實現(xiàn),查詢的效率更高。缺點是:表的數(shù)量增加,需要增加轉(zhuǎn)換表。

5 結(jié)論(Conclusion)

在多語言網(wǎng)站設(shè)計時,上述數(shù)據(jù)庫設(shè)計的方法不是唯一的選擇,也可采用其他方法,要根據(jù)項目需求而定,但上述方法是十分常用而有效的。當網(wǎng)站的內(nèi)容涉及的語言不多,又固定那幾種語言時,列或行方法較為簡單實用,否則使用增加附加表的方法。

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網(wǎng)站的設(shè)計與實現(xiàn)[J].微電

子學與計算機,2008,25(5):43.

[2] 主福洋,郭坤.基于PHP技術(shù)的網(wǎng)站建設(shè)[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

常中華(1968-),男,碩士,副教授.研究領(lǐng)域:計算機應(yīng)用

技術(shù).endprint

}

}

//根據(jù)選擇的語言,顯示檢索結(jié)果

$sql = "SELECT `title`

FROM `app_product_row`

WHERE `language_id` = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:容易實現(xiàn),每一行就是一種語言的內(nèi)容。缺點是:數(shù)據(jù)大量重復,數(shù)據(jù)庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉(zhuǎn)換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉(zhuǎn)換表app_product_translation_4的內(nèi)容是每種語言對應(yīng)的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創(chuàng)建表的MYSQL語句如下:

CREATE TABLE IF NOT EXISTS `app_product_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`date_created` datetime NOT NULL,

`price` decimal(10,2) NOT NULL DEFAULT '0.00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_product_translation_4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`product_id` int(11) NOT NULL DEFAULT '0',

`language_code` char(2) NOT NULL,

`title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`),

KEY `translation_id` (`product_id`),

KEY `language_code` (`language_code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `app_language_4` (

`code` char(2) NOT NULL,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`code`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

分別向表app_product_translation_4、app_language_4和app_product_4中輸入網(wǎng)站內(nèi)容,及其三個表之間的關(guān)系,如圖3所示。

圖3 附加轉(zhuǎn)換表的方法數(shù)據(jù)庫MYSQL截圖及其關(guān)系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現(xiàn)查詢的代碼:

<?php

// 檢索所有語言標題列

$sql = "SELECT p.*, pt.title, pt.description, l.name as language_name

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

INNER JOIN `app_language_4` l ON pt.language_code = l.code

WHERE p.id = 1";

if($result = mysql_query($sql)){

while($row = mysql_fetch_assoc($result)){

echo "Language (".$row["language_name"]."): ".$row["title"]."

";

}

}

// 根據(jù)選擇的語言檢索符合條件的結(jié)果

$sql = "SELECT p.*, pt.title, pt.description

FROM `app_product_4` p

INNER JOIN `app_product_translation_4` pt ON p.id = pt.product_id

WHERE p.id = 1 AND pt.language_code = '".$_SESSION['current_language']."'";

if($result = mysql_query($sql)){

if($row = mysql_fetch_assoc($result)){

echo "Current Language: ".$row["title"];

}

}

?>

這種方法的優(yōu)點是:更符合數(shù)據(jù)庫設(shè)計的規(guī)范,增加新的語言更容易實現(xiàn),查詢的效率更高。缺點是:表的數(shù)量增加,需要增加轉(zhuǎn)換表。

5 結(jié)論(Conclusion)

在多語言網(wǎng)站設(shè)計時,上述數(shù)據(jù)庫設(shè)計的方法不是唯一的選擇,也可采用其他方法,要根據(jù)項目需求而定,但上述方法是十分常用而有效的。當網(wǎng)站的內(nèi)容涉及的語言不多,又固定那幾種語言時,列或行方法較為簡單實用,否則使用增加附加表的方法。

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網(wǎng)站的設(shè)計與實現(xiàn)[J].微電

子學與計算機,2008,25(5):43.

[2] 主福洋,郭坤.基于PHP技術(shù)的網(wǎng)站建設(shè)[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

常中華(1968-),男,碩士,副教授.研究領(lǐng)域:計算機應(yīng)用

技術(shù).endprint

主站蜘蛛池模板: 精久久久久无码区中文字幕| 亚洲日本一本dvd高清| 国产91精选在线观看| 久久久久久久久久国产精品| 久久精品aⅴ无码中文字幕| 伊人狠狠丁香婷婷综合色| 亚洲日本精品一区二区| 亚洲天堂久久久| 日韩无码白| 国产丝袜一区二区三区视频免下载| 成人日韩精品| 精品一区二区三区波多野结衣| 日韩欧美高清视频| 国产精品3p视频| 97国产在线观看| 欧美色综合久久| 亚洲色欲色欲www在线观看| 国产精品无码作爱| 天堂在线www网亚洲| a免费毛片在线播放| 四虎影院国产| 欧美伊人色综合久久天天| 亚洲av片在线免费观看| 欧美成人综合视频| 国精品91人妻无码一区二区三区| 欧美亚洲日韩不卡在线在线观看| 欧美日韩导航| 色综合久久88色综合天天提莫| 日韩毛片视频| 在线观看无码av五月花| 国产精品自拍合集| 亚洲福利网址| 国产福利微拍精品一区二区| 国产杨幂丝袜av在线播放| AV色爱天堂网| igao国产精品| 国产黄在线免费观看| 99精品国产自在现线观看| 国产日本欧美亚洲精品视| 九九香蕉视频| 成人无码一区二区三区视频在线观看| 亚洲婷婷丁香| 无码一区中文字幕| 97视频免费看| 91蜜芽尤物福利在线观看| 欧美成一级| 人妻出轨无码中文一区二区| 一区二区日韩国产精久久| 在线国产毛片| 99re热精品视频中文字幕不卡| 成人免费网站久久久| 在线亚洲精品福利网址导航| 色噜噜综合网| 在线观看免费AV网| 成人福利在线看| 蜜桃臀无码内射一区二区三区| 九九久久99精品| 亚洲国产亚洲综合在线尤物| 青草国产在线视频| 亚洲精品福利网站| 国产精品一老牛影视频| 99久久精品久久久久久婷婷| 亚洲国产av无码综合原创国产| 国产综合欧美| 国产精品亚洲综合久久小说| 日韩欧美91| 在线不卡免费视频| 一本无码在线观看| 国产免费福利网站| 久久大香伊蕉在人线观看热2| 国产成人免费视频精品一区二区| 亚洲精品福利视频| 精品人妻一区无码视频| 久久综合色88| 中文精品久久久久国产网址| 99中文字幕亚洲一区二区| 1024国产在线| 免费99精品国产自在现线| 三级国产在线观看| 熟女日韩精品2区| 夜夜操国产| 欧美亚洲欧美|