2011-01-19 6 views
0

이 기본 multilang 디자인 구현 문제가 있습니다.다국어 테이블 디자인 문제

content_id bigint(20) NOT NULL, 
lang_id int(5) NOT NULL, 
word varchar (500) NOT NULL, 
created datatime, 

표 함량은 이제 문제는이를 구현하는 것입니다. 나는 응용 프로그램에서 1,2,3,4,5와 같은 content_id로 페이지의 각 단어를 선언한다고 가정합니다. 1 = "Hello"2 = "Welcome to xxxxx"등등. 그래서 문제는 코드에서 "Hello"= 1을 제공하는 것입니다. 그래서 테이블에 그것은 1, 23 (영문), 안녕하십니까.

하지만 지금 스페인어 세션이있는 경우 테이블에서 "Hello"를 어떻게 찾을 수 있습니까? 왜냐하면 나는 코드에서 1을 "Hello"가되도록 하드 코드했기 때문에 시스템은 항상 이것을 찾아서 영어 텍스트를 찾습니다. 주위에 유일한 작품은 언어 당 별도의 테이블을 가지고하는 것입니다?

답변

1

lang_id 및 content_id를 복합 기본 키로 만들어야합니다. 당신은 다음과 같습니다 데이터를하게 될 겁니다 :

1   Hello   1 
1   Hola    2 
2   Thanks   1 
2   Gracias   2 
2   Danke   3 

당신도 (당신이 영어를 사용하기 때문에) 개발자로서 당신을 위해 쉽게하기 위해 별도의 테이블로 영어 번역을 중단 할 수 있습니다 .. . 그런 다음 WordId 1이 정식 적으로 "안녕하세요"라는 것을 알고 있습니다. 언어 테이블에 외래 키, 분명히. 이렇게하면 기본 키에 대한 대리 키를 원할 수도 있습니다. 이는 업데이트를 단순화합니다.

+0

하나의 언어를 번역 된 "기본"언어로 사용하지 말고 대신 (언어 ID와 함께) 언어 항목에 매핑하는 ID (숫자 일 필요는 없습니다!)를 사용하는 것이 좋습니다. 예를 들어 홈페이지에 표시되는 Hello의 ID는 "homepage.greeting"입니다. – Paul

+0

복합 PK는 데이터베이스 용이지만 코드에서 참조 할 필요가 있습니다. 코드에서이를 수행 할 수 없다는 것을 알고 있습니다. Hello = (1,1)을 선언 할 수 없다는 것을 말하지 않으면 코드에서 Hello = 1을 선언해야합니다. 이 스키마는 다음과 같은 용도로 사용할 수 있습니다. "언어 번역이 없으면 해당 단어의 영어로 기본 설정됩니다" – JonnyK

+0

자, 정식 이름을 원하는대로 지정하십시오. 영어로 된 값을 쿼리하지 않아도됩니다. 원하는 언어 값을 사용하는 대신 개발자에게 익숙한 식별자가 포함 된 테이블에 참여할 수 있습니다. –