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

在MYSQL中實現多語言數據庫設計

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

摘 要:在設計和開發一個多語言版本的網站時,通常把每一種語言的內容保存在同一數據庫中,在數據庫設計時有多種方法,每一種方法根據網站的需求和數據的大小可以不同。本文通過PHP+MYSQL實現三種不同的多語言網站設計和開發方案。

關鍵詞:網站開發;數據庫設計;MYSQL;PHP

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

1 引言(Introduction)

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

2 字段列方法(Column approach)

這是最簡單的方法,創建一個數據庫,如Test,數據庫中建立存放網站內容的表App_product,為每種語言添加一個文本列,創建該表的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中輸入網站內容,如圖1所示。

圖1 字段列方法數據庫MYSQL截圖

Fig.1 MYSQL screenshot of column approach

用PHP實現查詢的代碼:

<?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"]."

";

}

}

//根據選擇的語言,顯示檢索結果

$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"];

}

}

?>

這種方法的優點是:容易實現,每個語言在數據庫表中為一列內容,沒有重復內容。缺點是:數據庫維護困難,適合于兩三種語言。

3 記錄行方法(Multirow approach)

這種方法與上面的字段列方法相似,只是每種語言的內容占據一行,創建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中輸入網站內容,如圖2所示。

圖2 記錄行方法數據庫MYSQL截圖

Fig.2 MYSQL Screenshot ofMultirow Approach

用PHP實現查詢的代碼:

<?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

}

}

//根據選擇的語言,顯示檢索結果

$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"];

}

}

?>

這種方法的優點是:容易實現,每一行就是一種語言的內容。缺點是:數據大量重復,數據庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉換表app_product_translation_4的內容是每種語言對應的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創建表的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中輸入網站內容,及其三個表之間的關系,如圖3所示。

圖3 附加轉換表的方法數據庫MYSQL截圖及其關系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現查詢的代碼:

<?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"]."

";

}

}

// 根據選擇的語言檢索符合條件的結果

$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"];

}

}

?>

這種方法的優點是:更符合數據庫設計的規范,增加新的語言更容易實現,查詢的效率更高。缺點是:表的數量增加,需要增加轉換表。

5 結論(Conclusion)

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

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網站的設計與實現[J].微電

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

[2] 主福洋,郭坤.基于PHP技術的網站建設[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

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

技術.endprint

}

}

//根據選擇的語言,顯示檢索結果

$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"];

}

}

?>

這種方法的優點是:容易實現,每一行就是一種語言的內容。缺點是:數據大量重復,數據庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉換表app_product_translation_4的內容是每種語言對應的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創建表的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中輸入網站內容,及其三個表之間的關系,如圖3所示。

圖3 附加轉換表的方法數據庫MYSQL截圖及其關系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現查詢的代碼:

<?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"]."

";

}

}

// 根據選擇的語言檢索符合條件的結果

$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"];

}

}

?>

這種方法的優點是:更符合數據庫設計的規范,增加新的語言更容易實現,查詢的效率更高。缺點是:表的數量增加,需要增加轉換表。

5 結論(Conclusion)

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

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網站的設計與實現[J].微電

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

[2] 主福洋,郭坤.基于PHP技術的網站建設[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

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

技術.endprint

}

}

//根據選擇的語言,顯示檢索結果

$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"];

}

}

?>

這種方法的優點是:容易實現,每一行就是一種語言的內容。缺點是:數據大量重復,數據庫維護困難,如要改變價格,所有語言的價格都要修改。

4 附加轉換表的方法(Additional translation table

approach)

這種方法有效解決了上述問題,并且易于維護。附加轉換表app_product_translation_4的內容是每種語言對應的信息,而表app_language_4和app_product_4中存放的是公共信息[3]。創建表的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中輸入網站內容,及其三個表之間的關系,如圖3所示。

圖3 附加轉換表的方法數據庫MYSQL截圖及其關系

Fig.3 MYSQL Screenshot and Relation ofAdditional

Translation Table Approach

用PHP實現查詢的代碼:

<?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"]."

";

}

}

// 根據選擇的語言檢索符合條件的結果

$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"];

}

}

?>

這種方法的優點是:更符合數據庫設計的規范,增加新的語言更容易實現,查詢的效率更高。缺點是:表的數量增加,需要增加轉換表。

5 結論(Conclusion)

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

參考文獻(References)

[1] 張菲菲,薛賀,李建良.多語言Web網站的設計與實現[J].微電

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

[2] 主福洋,郭坤.基于PHP技術的網站建設[J].軟件工程師,2013,

1:60.

[3] MathewHillier.Theroleofculturalcontextinmultilingualwe

bsiteusability[J].ElectronicCommerceResearchandApplications,

2003(2):2-14.

作者簡介:

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

技術.endprint

主站蜘蛛池模板: 在线国产欧美| jizz国产视频| 亚洲AⅤ综合在线欧美一区| 日本在线国产| 成人一区在线| 免费视频在线2021入口| 国产精品美女自慰喷水| 欧美午夜理伦三级在线观看| 日韩欧美成人高清在线观看| 成人小视频网| 日韩一级二级三级| 免费在线a视频| 欧美激情伊人| 欧美日一级片| 四虎精品黑人视频| 国产视频 第一页| 中文字幕资源站| 日韩欧美国产三级| 亚洲午夜综合网| 国产免费a级片| 中文字幕亚洲乱码熟女1区2区| 在线观看亚洲国产| 日本免费一级视频| 91成人免费观看| 国内视频精品| 国产在线一区视频| 992Tv视频国产精品| 在线观看av永久| 成人午夜网址| 中日韩欧亚无码视频| 一级片一区| 日韩色图在线观看| 国产成人免费高清AⅤ| 强乱中文字幕在线播放不卡| 九九久久精品免费观看| 亚洲全网成人资源在线观看| 中文字幕亚洲无线码一区女同| 毛片大全免费观看| 8090成人午夜精品| 热久久综合这里只有精品电影| 欧美一区二区人人喊爽| 高清无码不卡视频| 精品中文字幕一区在线| 成人午夜免费观看| 国产精品林美惠子在线观看| 久久无码av三级| 亚洲一区二区约美女探花| 91系列在线观看| 免费一级无码在线网站 | 欧美日韩精品在线播放| 久久久久久久久久国产精品| 国产视频一区二区在线观看| 色亚洲激情综合精品无码视频 | 亚洲精品另类| 久草国产在线观看| 中文字幕无码电影| 无码人妻免费| 久久男人资源站| 漂亮人妻被中出中文字幕久久| 亚洲天堂网2014| 日日拍夜夜操| 91色在线观看| 波多野结衣无码中文字幕在线观看一区二区| 色爽网免费视频| 免费看美女毛片| 亚洲最新网址| 欧洲极品无码一区二区三区| 久热中文字幕在线| 狠狠做深爱婷婷久久一区| 一级毛片在线播放免费观看| 91探花在线观看国产最新| 午夜福利免费视频| 又粗又大又爽又紧免费视频| 青草视频网站在线观看| 国产制服丝袜91在线| 亚洲国产天堂久久九九九| 97免费在线观看视频| 亚亚洲乱码一二三四区| 18禁黄无遮挡免费动漫网站| 精品欧美一区二区三区在线| 老汉色老汉首页a亚洲| 久久久黄色片|