2010-03-19 3 views
0

SQLite에서 사전 데이터베이스를 만들고 있는데 몇 가지 팁이 필요합니다. 내 SQL은 약간 녹슬다;) 당신은이 좋은 SQL을 고려할 것인가? Java JDBC로 완성되었습니다.사전에 대한 테이블을 만드시겠습니까?

테이블을 만드는 데 사용됩니다.

데이터로 채울 때 나는 각 단어에 숫자 (id)를 부여하고 단어 번역은 word_id와 동일한 숫자를 얻는다. 특정 단어에 대한 번역을 철회하는 가장 좋은 방법은 무엇입니까?

답변

1

word_id INTEGER REFERENCES word(id) 실제로 MySQL에 외래 키를 생성하지 않습니다. InnoDB를 사용하는 경우에도 명시적인 FOREIGN KEY 선언이 필요합니다.

또한 필자는 두 테이블의 ID에 자동 번호를 사용하고 기본 키로 표시 할 수도 있습니다.

계정으로 사람들을 모두 복용 그래서

, 플러스 대다 관계를 필요로하는 여러 번역에 대한 mpacona 주 :

CREATE TABLE word (
word_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY, 
entry TEXT, 
pos VARCHAR(50) 
); 

CREATE TABLE translation (
translation_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY, 
word_id UNSIGNED INTEGER, 
lang VARCHAR(5), 
entry TEXT 
); 

CREATE TABLE word_translation (
word_id UNSIGNED INTEGER, 
translation_id UNSIGNED INTEGER, 
PRIMARY KEY (word_id, translation_id), 
INDEX (word_id), 
INDEX (translation_id), 
FOREIGN KEY fk_word_id (word_id) REFERENCES word(id), 
FOREIGN KEY fk_translation_id (translation_id) REFERENCES translation(id) 
); 

편집 : 나는 무엇 POS 확실하지 않았다, 그래서 그것을 제한 ~ 50 자. 32K 문자 이상이 필요한 경우 TEXT를 큰 변형 중 하나로 조정해야 할 수도 있습니다.

스타일 구문을 지원하기 위해 lang이 5 자로 업데이트되었습니다.

+0

포지션은 연설의 일부입니다. 팁 주셔서 감사! 키와 색인을 읽어야 할 것입니다. – heffaklump

1

는 단순히 translation_id 및 입력 한 단어 및 번역 번역 테이블에보다

CREATE TABLE word_translation (
word_id INTEGER, 
translation_id INTEGER 
); 

사이의 관계에 대한 세 번째 테이블이있을 것이다.

그런 식으로 테이블의 기본 키에 ID를 만들어 번역과 단어의 색인을 생성 할 수 있습니다.

당신이 후 많은 번역 많은 단어를 가질 수 이것은 또한, 쿼리에 도움이

, 단 하나의 진입 점

1

당신이 대신 "단어 개념"식별자 및 언어 필드가 있다면, 당신은 할 수 그것은 여러 언어로 작동합니다

CREATE TABLE word (
    id INTEGER, 
    entry STRING, 
    language String, 
    word_concept_id INTEGER, 
    pos STRING 
); 

그런 다음 번역 쿼리 당신은 단지 일에서 계획을 파악해야

SELECT wr.entry FROM word wl, word wr 
WHERE wl.entry='DOOR' AND 
    wl.language='EN' AND 
    wl.word_concept_id=wr.concept_id AND 
    wr.language='CZ' 

입니다 e word_concept_id 필드 (기본 언어로 용어를 추가함에 따라 값이 증가하는 경우가 있음).

관련 문제