문제

백엔드에 MySQL 데이터베이스를 사용하는 ASP.NET 웹 사이트가 있습니다. 이 웹 사이트는 영어 전자 상거래 시스템이며, 우리는 그것을 약 5 개의 다른 언어 (프랑스어, 스페인어 등)로 번역 할 가능성을보고 있습니다. 우리는 인간 번역가에게 번역을 수행하도록 할 것입니다. 우리는 자동화 된 서비스를 살펴 보았지만 충분하지 않습니다.

사이트의 정적 텍스트 (예 : 제목, 버튼 등)는 .NET의 현지화 기능 (RESX 파일 등)을 통해 여러 언어로 쉽게 제공 될 수 있습니다.

데이터베이스에 다중 언어 컨텐츠를 저장하고 검색하는 것이 가장 좋은 방법에 대해 잘 모르는 것. 예를 들어, 이러한 필드를 포함하는 제품 테이블이 있습니다 ...

  • productID (int)
  • 카테고리 (int)
  • 제목 (Varchar)
  • 요약 (Varchar)
  • 설명 (텍스트)
  • 특징 (텍스트)

제목, 요약, 설명 및 기능 텍스트는 모든 다른 언어로 제공되어야합니다.

내가 생각해 낸 두 가지 옵션은 다음과 같습니다.

각 언어에 대한 추가 필드를 만듭니다예를 들어 모든 언어에 대한 Titleen, Titlefr, Titlees 등을 가질 수 있으며 모든 텍스트 열에 대해이를 반복 할 수 있습니다. 그런 다음 선택한 언어에 따라 적절한 필드를 사용하도록 코드를 조정합니다. 이것은 약간 해킹 된 느낌이 들며 매우 큰 테이블로 이어질 것입니다. 또한 앞으로 추가 언어를 추가하고 싶다면 더 많은 열을 추가하는 데 시간이 많이 걸릴 것입니다.

조회 테이블을 사용하십시오다음 형식의 새 테이블을 만들 수 있습니다 ...

textId | languageId | content
-------------------------------
10     | EN         | Car
10     | FR         | Voiture
10     | ES         | Coche
11     | EN         | Bike
11     | FR         | Vélo

그런 다음 제품 테이블을 조정하여 제품 테이블에 텍스트를 저장하는 대신 제목, 요약, 설명 및 기능에 대한 적절한 텍스트를 참조합니다. 이것은 훨씬 더 우아해 보이지만 복잡한 SQL 문을 사용하지 않고 데이터베이스에서 그리고 페이지 에이 데이터를 가져 오는 간단한 방법을 생각할 수는 없습니다. 물론 앞으로 새로운 언어를 추가하는 것은 이전 옵션에 비해 매우 간단합니다.

나는 이것을 달성하는 가장 좋은 방법에 대한 제안에 대해 매우 감사합니다! "모범 사례"지침이 있습니까? 전에 이것을 한 사람이 있습니까?

도움이 되었습니까?

해결책

귀하의 경우에는 두 개의 테이블을 사용하는 것이 좋습니다.

Product
-------------------------------
ProductID  |  Price   |  Stock 
-------------------------------
10         |   10     |   15


ProductLoc
-----------------------------------------------
ProductID  | Lang   | Name      |  Description
-----------------------------------------------
 10        |  EN    | Bike      |  Excellent Bike 
 10        |  ES    | Bicicleta |  Excelente bici 

이 방법으로 사용할 수 있습니다.

SELECT * FROM 
Product LEFT JOIN ProductLoc ON Product.ProductID = ProductLoc.ProductID 
                               AND ProductLoc.Lang = @CurrentLang

(ProductLoc 테이블에 현재 LANG에 대한 기록이없는 경우에만 왼쪽 가입)

다른 팁

기존 테이블에 새 열을 추가하는 것은 좋은 생각이 아닙니다. 이 기능에 새로운 언어를 추가하는 것은 정말 어려울 것입니다. 조회 테이블이 훨씬 나아지지만 번역 된 레코드의 수 때문에 성능에 문제가있을 수 있다고 생각합니다.

최상의 솔루션은 공유 테이블을 갖는 것입니다.

products: id, categoryid, 

그리고 모든 언어에 대해 동일한 테이블

products_en, products_de: product_id (fk), title, price, description, ...

공유 된 것 중에서 선택하고 언어로 테이블에 가입합니다. 장점은 가격, 범주조차도 현지화 할 수 있다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top