2013-03-18 2 views
1

다국어 시스템을 구현하려고하는데 나는 아이디어를 얻지 못한 stackoverflow에 관한 주제를 발견했습니다.다국어 데이터베이스 디자인 접근

전체 질문 here

질문에 옵션 3을 찾을 수 있습니다, 그것은 우리가 T_TRANSLATION 테이블이 필요 왜 생각을 didnt는

CREATE TABLE T_PRODUCT (
    NAME_FK  int, 
    DESCRIPTION_FK int, 
    PRICE   NUMBER(18, 2) 
) 

CREATE TABLE T_TRANSLATION (
    TRANSLATION_ID 
) 

CREATE TABLE T_TRANSLATION_ENTRY (
    TRANSLATION_FK, 
    LANGUAGE_FK, 
    TRANSLATED_TEXT NTEXT 
) 

CREATE TABLE T_TRANSLATION_LANGUAGE (
    LANGUAGE_ID, 
    LANGUAGE_CODE CHAR(2) 
) 

그러나 아래와 같은 구조를 갖는다. 그것의 직업은 무엇입니까? 이 질문은 몇 가지 의견도 제기되었지만 그 질문에 대한 답변을 얻지 못했습니다.

이 방법으로 제품을 삽입하고 선택하는 방법은 무엇입니까?

답변

2

그러나 우리는 T_TRANSLATION 테이블이 필요한 이유를 알지 못했습니다. 그것의 직업은 무엇입니까? 내가 을 추측하고있어

은 필드가 번역해야하고 T_TRANSLATION_ENTRY 테이블에서 FOREIGN KEY의 "대상"을 제공하는 것을 식별합니다. 그래서 특정 필드에 대해 TRANSLATION_ID는 1 일 수 있습니다. 다른 필드의 경우 (반드시 같은 테이블에있을 필요는 없음) 2 등일 수 있습니다.이 방법을 사용하면 제한된 수의 " 나머지 모델에서는 "번역 가능"테이블을 지원합니다.

외부 키를 올바르게 적용하지 않기 때문에 (DBMS는 TRANSLATION_ID가 의미하는 바를 알지 못하고 올바른 값만이 존재한다는 것을 보장 할 수 없다) JOIN의 성능 호그.

번역 할 수있는 테이블과 번역 사이에 직선적 인 1 : N 관계가있는 것이 더 좋다고 생각합니다. 이는 모델에 많은 새 테이블을 추가하는 것입니다 (본질적으로 각 변환 가능한 테이블에 대해 하나의 새로운 변환 테이블). 예를 들면 :

enter image description here

+0

내가도 번역해야 할 많은 외국 키 테이블이있는 경우, 예를 들어 (인 [NationalityId, MaritalStatusId, CourtesyId, 이름, 가운데 이름, 성]) 국적, MaritalStatus, 의례는 테이블입니다. 조인 수가 너무 많아서 당신이 제공 한 솔루션이 여전히 유효하고 적합합니까? – Monah

+0

글쎄, 그것은 합쳐야하는 테이블의 수를 두 배로 늘립니다. N 개의 "정상적인"테이블을 합칠 필요없이 이제는 _also_ N 개의 번역 테이블에 참여하십시오. 이것이 문제인지 여부는 대표적인 환경에서 측정해야합니다. 그러나 _dynamically_ 언어를 선택하는 다른 솔루션은 데이터베이스 또는 다른 방법으로 표현되는 일종의 추가 "조인"을 피할 수 있으며 데이터베이스는 일반적으로 가입하기에 좋습니다 ... –