[SQL] 다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은]
SQL다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은]
다중 언어 데이터베이스를 만들 수있는 가장 좋은 방법은 무엇입니까? 디자인을하고 각 언어에 대해 열을 추가하기 위해 다른 경우, 복잡한 쿼리 된 모든 테이블에 대한 테이블을 지역화 만들려면 간단하지만 동적은 나를 엔터프라이즈 애플리케이션에 대한 선택 무엇이 최선인지 이해하는 데 도움이 바랍니다
해결법
-
==============================
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.마틴에 의해 게시 답을 권장합니다.
마틴에 의해 게시 답을 권장합니다.
하지만 당신은 너무 복잡 점점 쿼리에 대해 우려 할 것 같다 :
당신이 생각 될 수 그래서 그 대신 같은 간단한 쿼리를 작성 :
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.나는 접근의이 유형은 나를 위해 작동 찾을 수 있습니다 :
나는 접근의이 유형은 나를 위해 작동 찾을 수 있습니다 :
Product ProductDetail Country ========= ================== ========= ProductId ProductDetailId CountryId - etc - ProductId CountryName CountryId Language ProductName - etc - ProductDescription - etc -
ProductDetail의 표는 지원하려는 언어 (제품 이름, 설명 등을위한) 모든 번역을 보유하고 있습니다. 앱의 요구 사항에 따라, 당신도 지역 언어를 사용하는 국가 테이블 아래를 중단 할 수 있습니다.
-
==============================
4.나는 다음의 방법을 사용하고 있습니다 :
나는 다음의 방법을 사용하고 있습니다 :
제품 일련 OrderID를 ...
제품 일련 제목 이름의 LanguageID
의 LanguageID 이름 문화, ...
-
==============================
5.마틴의 솔루션은 원하는 번역이 발견되지 때 기본 설명을 처리 할 방법을하지만, 내 매우 유사하다?
마틴의 솔루션은 원하는 번역이 발견되지 때 기본 설명을 처리 할 방법을하지만, 내 매우 유사하다?
IFNULL () 및 각 필드에 대한 또 다른 SELECT 문을 필요로?
기본 번역 "isDefault"와 같은 플래그가 설명을 경우 없음의 기본 설명은 현재 언어에 대한 발견되었습니다입니다 어떠했는지를 나타냅니다 같은 테이블에 저장된다.
from https://stackoverflow.com/questions/929410/what-are-best-practices-for-multi-language-database-design by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 외래 키는 NULL 및 / 또는 복제 될 수 있을까? (0) | 2020.03.23 |
---|---|
[SQL] MySQL 데이터베이스의 모든 테이블에 대한 기록 수를 가져옵니다 (0) | 2020.03.23 |
[SQL] 어떻게해야합니까 문자열로 출력 원시 SQL 쿼리에 쿼리 작성기를 가져옵니다? (0) | 2020.03.23 |
[SQL] 특정 필드에 중복을 찾기 위해 문을 선택 (0) | 2020.03.23 |
[SQL] 제 3 표에 자신의 FKS 2 개 테이블을 조인하는 데 필요 (0) | 2020.03.23 |