2014-02-20 33 views
1

我不是一般SQL和數據庫方面的專家。具有兩種語言的SQL數據庫

我正在爲接口和內容本身創建一個具有多種語言功能的android應用程序。

我的問題是針對內容語言的:有沒有什麼辦法從數據庫中檢索只包含一種語言(英語)的數據,如將內容翻譯爲其他語言選項?

因爲我認爲將這兩種語言存儲在數據庫中效率不高。

在此先感謝,

+0

我想你不需要將它存儲在數據庫中。看看這個:http://developer.android.com/training/basics/supporting-devices/languages.html – Dehumanizer

+0

謝謝你的迴應,我的意思是內容不是接口...例如:在我的數據庫中有一張用英語存儲的產品信息表。當用戶選擇使用應用程序查看信息時,它將顯示例如具有所選語言(不是英語)的產品名稱。 – user3333203

+0

您可以添加一個Lang_Code列(整數),如英語= 0,德語= 1,...並通過Lang_Code檢索數據。 –

回答

1

文本屬於客戶端應用程序通常存儲與應用程序,所以你不必加載「OK」,並從數據庫中的相應的語言「取消」僅顯示一些鈕釦。 (但是,如果需要,您可以將其存儲在數據庫中。)

另一方面,內容數據通常存儲在數據庫中。把它的一部分存儲在數據庫中,而把它的一部分存儲在其他地方是沒有什麼意義的。如果您將產品存儲在您的數據庫中,然後存儲它所需的文本。它屬於那裏。至於訪問數據,這並不慢,因爲你不用所有語言檢索文本,而只用所需的語言。

這裏是一個典型的表設計:

create table product 
(
    id number(10), 
    buying_price number(6,2), 
    selling_price number(6,2), 
    id_vat number(1), 
    ... 
); 

create table product_name 
(
    id_product number(10), 
    language_iso varchar(2), -- 'en', 'de', 'fr', ... or chose another code 
    text varchar(100) 
); 

create table product_description 
(
    id_product number(10), 
    language_iso varchar(2), 
    text varchar(2000) 
); 

你也可以決定一個更通用的設計:

create table products 
(
    id number(10), 
    tranlation_number number(10), 
    buying_price number(6,2), 
    selling_price number(6,2), 
    id_vat number(1), 
    ... 
); 

create table translations 
(
    tranlation_number number(10), 
    content_name varchar2(30), -- 'PRODUCT_NAME', 'PRODUCT_DESCRIPTION', ... 
    language_iso varchar(2), -- 'en', 'de', 'fr', ... or chose another code 
    text varchar(4000) 
); 

有更多的可能性。無論您選擇哪種方式,訪問數據都意味着該語言的連接和常量。性能應該沒有問題。數據就是它所屬的地方。