복붙노트

[SQL] 다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은]

SQL

다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은]

다중 언어 데이터베이스를 만들 수있는 가장 좋은 방법은 무엇입니까? 디자인을하고 각 언어에 대해 열을 추가하기 위해 다른 경우, 복잡한 쿼리 된 모든 테이블에 대한 테이블을 지역화 만들려면 간단하지만 동적은 나를 엔터프라이즈 애플리케이션에 대한 선택 무엇이 최선인지 이해하는 데 도움이 바랍니다

해결법

  1. ==============================

    1.우리가하는 일, 각 다국어 개체에 대한 두 개의 테이블을 만드는 것입니다.

    우리가하는 일, 각 다국어 개체에 대한 두 개의 테이블을 만드는 것입니다.

    예를 들면 첫 번째 테이블은 언어 중립 데이터 (기본 키 등) 번째 테이블이 국부적 인 데이터 플러스 ISO 언어 코드를 포함하는 언어마다 하나 개의 레코드를 포함을 포함한다.

    어떤 경우에는 우리는 더 현지화 된 데이터가 특정 언어를 사용할 수없는 경우 우리가 언어-다시 떨어질 수 그래서하는 DefaultLanguage가 필드를 추가합니다.

    예:

    Table "Product":
    ----------------
    ID                 : int
    <any other language-neutral fields>
    
    
    Table "ProductTranslations"
    ---------------------------
    ID                 : int      (foreign key referencing the Product)
    Language           : varchar  (e.g. "en-US", "de-CH")
    IsDefault          : bit
    ProductDescription : nvarchar
    <any other localized data>
    

    이 방법을 사용하면 (각각의 새로운 언어에 대한 필드를 추가 할 필요없이) 필요한만큼의 언어를 처리 할 수 ​​있습니다.

    업데이트 (2014년 12월 14일는) : 응용 프로그램에 다국어 데이터를로드하는 데 사용되는 구현에 대한 몇 가지 추가 정보를 위해,이 답변 살펴 보시기 바랍니다.

  2. ==============================

    2.마틴에 의해 게시 답을 권장합니다.

    마틴에 의해 게시 답을 권장합니다.

    하지만 당신은 너무 복잡 점점 쿼리에 대해 우려 할 것 같다 :

    당신이 생각 될 수 그래서 그 대신 같은 간단한 쿼리를 작성 :

    SELECT price, name, description FROM Products WHERE price < 100
    

    ... 당신 같은 쿼리를 쓰기 시작해야합니다 :

    SELECT
      p.price, pt.name, pt.description
    FROM
      Products p JOIN ProductTranslations pt
      ON (p.id = pt.id AND pt.lang = "en")
    WHERE
      price < 100
    

    아니 아주 예쁜 관점.

    하지만 그 대신 수동으로 당신의 특별한 현지화 마크 업 및 데이터베이스에 전송해야합니다 실제 SQL로 변환을 포함하는 SQL 사전이-구문 분석, 자신의 데이터베이스 액세스 클래스를 개발해야 그 일의.

    이처럼 보일 수도 그 시스템을 사용 :

    db.setLocale("en");
    db.query("SELECT p.price, _(p.name), _(p.description)
              FROM _(Products p) WHERE price < 100");
    

    그리고 나는 당신이 것보다 훨씬 더 잘 할 수 확신합니다.

    열쇠는 당신의 테이블과 균일 한 방법으로 명명 된 필드가하는 것입니다.

  3. ==============================

    3.나는 접근의이 유형은 나를 위해 작동 찾을 수 있습니다 :

    나는 접근의이 유형은 나를 위해 작동 찾을 수 있습니다 :

    Product     ProductDetail        Country
    =========   ==================   =========
    ProductId   ProductDetailId      CountryId
    - etc -     ProductId            CountryName
                CountryId            Language
                ProductName          - etc -
                ProductDescription
                - etc -
    

    ProductDetail의 표는 지원하려는 언어 (제품 이름, 설명 등을위한) 모든 번역을 보유하고 있습니다. 앱의 요구 사항에 따라, 당신도 지역 언어를 사용하는 국가 테이블 아래를 중단 할 수 있습니다.

  4. ==============================

    4.나는 다음의 방법을 사용하고 있습니다 :

    나는 다음의 방법을 사용하고 있습니다 :

    제품 일련 OrderID를 ...

    제품 일련 제목 이름의 LanguageID

    의 LanguageID 이름 문화, ...

  5. ==============================

    5.마틴의 솔루션은 원하는 번역이 발견되지 때 기본 설명을 처리 할 방법을하지만, 내 매우 유사하다?

    마틴의 솔루션은 원하는 번역이 발견되지 때 기본 설명을 처리 할 방법을하지만, 내 매우 유사하다?

    IFNULL () 및 각 필드에 대한 또 다른 SELECT 문을 필요로?

    기본 번역 "isDefault"와 같은 플래그가 설명을 경우 없음의 기본 설명은 현재 언어에 대한 발견되었습니다입니다 어떠했는지를 나타냅니다 같은 테이블에 저장된다.

  6. from https://stackoverflow.com/questions/929410/what-are-best-practices-for-multi-language-database-design by cc-by-sa and MIT license