programing

다국어 데이터베이스 설계를 위한 모범 사례는 무엇입니까?

yoursource 2023. 7. 26. 22:44
반응형

다국어 데이터베이스 설계를 위한 모범 사례는 무엇입니까?

다국어 데이터베이스를 만드는 가장 좋은 방법은 무엇입니까?모든 테이블에 대해 현지화된 테이블을 만드는 것은 디자인과 쿼리를 복잡하게 만들고, 다른 경우에는 각 언어에 대해 열을 추가하는 것은 간단하지만 동적이지 않습니다. 엔터프라이즈 애플리케이션에 가장 적합한 선택이 무엇인지 이해할 수 있도록 도와주십시오.

우리가 하는 일은 각 다국어 오브젝트에 대해 두 개의 테이블을 만드는 것입니다.

예를 들어 첫 번째 테이블에는 언어 중립 데이터(기본 키 등)만 포함되어 있고 두 번째 테이블에는 언어당 하나의 레코드가 포함되어 있으며 현지화된 데이터와 언어의 ISO 코드가 포함되어 있습니다.

경우에 따라 기본 언어 필드를 추가하여 지정된 언어에 대해 사용할 수 있는 현지화된 데이터가 없는 경우 해당 언어로 폴백할 수 있습니다.

예:

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): 다국어 데이터를 응용 프로그램에 로드하는 데 사용되는 구현에 대한 추가 정보를 보려면 이 답변을 참조하십시오.

마틴이 올린 답변을 추천합니다.

하지만 질문이 너무 복잡해지는 것을 걱정하는 것 같습니다.

모든 테이블에 대해 지역화된 테이블을 만들려면 설계 및 쿼리가 복잡해집니다.

따라서 여러분은 이렇게 간단한 질문을 작성하는 대신 다음과 같이 생각할 수 있습니다.

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");

그리고 저는 당신이 그것을 훨씬 더 잘 할 수 있다고 확신합니다.

중요한 것은 테이블과 필드의 이름을 균일하게 지정하는 것입니다.

이러한 접근 방식이 저에게 효과적입니다.

제품 상세 국가=========   ==================   =========ProductId productDetailId CountryIdetc - ProductId 국가 이름국가 ID 언어제품명 - 등 -제품 설명.기타 -

ProductDetail 테이블에는 모든 변환(제품 이름, 설명 등)이 저장됩니다.를 지원할 언어로 표시합니다.앱의 요구 사항에 따라 국가 표를 세분화하여 지역 언어도 사용할 수 있습니다.

다음 접근법을 사용합니다.

제품.

제품 ID 주문 ID,...

제품 정보

제품 ID 제목 이름 언어 ID

언어

언어ID 이름 문화,...

마틴의 솔루션은 저와 매우 유사하지만, 원하는 번역을 찾을 수 없을 때 기본 설명을 어떻게 처리하시겠습니까?

각 필드에 IFNULL()과 다른 SELECT 문이 필요합니까?

기본 변환은 동일한 테이블에 저장되며, 여기서 "isDefault"와 같은 플래그는 현재 언어에 대한 설명이 없는 경우 해당 설명이 기본 설명인지 여부를 사용하는지 여부를 나타냅니다.

언급URL : https://stackoverflow.com/questions/929410/what-are-best-practices-for-multi-language-database-design

반응형