나는 이중 언어 사전 응용 프로그램 을 만들었으며 현재는 매우 간단하지만 항목을 좀 더 완전히 개발하기 시작할 것이며이를위한 최상의 데이터베이스 구조를 찾으려고합니다. 이전에 사용한 사전 프로젝트는 xml을 사용했지만 (사전 항목은 대부분 계층 구조이므로) 데이터베이스를 사용하여 수행해야합니다. 2계층 적 구조를위한 더 나은 데이터베이스 디자인?
이 전형적인 중간 복잡성 항목 (간체 조금)과 같을 것이다 것입니다 :
에스
/DAR/
- 명사
- 주택, 주거, 거소
ar-rājl dkhul ad-dār, "남자가 집에 들어왔다." - 집
rjaƷna lid-dār "우리는 집에 돌아갔습니다."
- 주택, 주거, 거소
-
- 이
DUR의 리튬 yamīn을 설정하는 동사, "우회전." - 은 약
- 이
당신이 그렇게 "연설의 일부"단순히 항목의 속성이 될 수 없습니다, 한 단어 음성의 여러 부분을 가질 수 있습니다 볼 수 있듯이/턴어라운드 그것은 감각과 관련이 있어야합니다. 각 위치는 여러 개의 감각을 가질 수 있으며 (물론 번호가 매겨져 있음) 물론 각 감각은 여러 개의 동의어가있는 여러 개의 번역을 가질 수 있습니다. 감각은 예제 문장 (아마도 둘 이상일 수도 있음)을 가질 수 있지만 항상 그런 것은 아닙니다. 즉
Entry
-id
-headword
-pronunciation
-...
PartOfSpeech
-id
-entry (ForeignKey)
-pos
Sense
-id
-sense_number
-part_of_speech (ForeignKey)
-...
Translation
-id
-tr
-sense (ForeignKey)
-...
Example
-id
-ex
-ex_tr
-sense (ForeignKey)
-...
또는 :
_ Translation
Entry -- PartOfSpeech -- Sense --|
- Example
이 간단 보인다에 의미가 엔트리 부분이 서로 어떻게 관련되는지를 생각, 나는 5 개 개의 테이블을 사용하여 다음과 같은 구조를 내놓았다 나, 그러나 그것이 실행에 너무 복잡 할 것인지 궁금해하고있다. 예를 들어, 항목을 선택하여 표시하려면 여러 개의 중첩 된 for
루프 (for e in entries → for p in pos → for s in senses → for tr in translations
)를 작성해야하며 역순으로 조회해야합니다.
그리고 장고 관리자의 전체 항목을 편집 할 수 있다고 생각하지 않습니다 (인라인의 인라인 중 한 줄을 인라인 할 수 없다면). 어쨌든 에디터 인터페이스를 만들 겠지만 원하는 경우 관리 사이트에서 내용을 확인할 수 있다는 것이 좋습니다.
더 좋은 방법이 있나요? 내가 잃어버린 뭔가 영리해야 할 것처럼 느껴진다.
감사합니다,
1 당신이 궁금하다면 카렌 : tunisiandictionary.org. 그것의 단순한 현재의 형식에는 단지 두 개의 테이블 (Entry, Sense)이 있으며, 번역은 쉼표로 단일 필드에 표기됩니다. 어느 것이 나쁘다.
이유는 다음과 같습니다. 1) Python/Django로 작성한 웹 응용 프로그램이고 2) XML을 싫어하기 때문입니다.
아니요, 항목의 각 부분마다 고유 한 속성이 있으므로 작동하지 않습니다. 예를 들어 감각에 숫자가 있어야하고 그 중 일부는 전치사가 필요할 수도 있습니다. 각 번역 단어에는 관련 속성 (예 : '날짜가 기입 된', '욕설')이있을 수 있습니다. 물론, 연설이나 번역 등으로 쉽게 검색 할 필요가 있습니다. 전반적으로, 내가하려는 것은 이런 종류의 구조에서는 너무 복잡 할 것입니다. – larapsodia
이것이 너무 제한된 경우에는 전체 데이터베이스 디자인이 있어야합니다. 쉽고 가벼운 sqlite를 사용할 수 있습니다. 예제 디자인 : http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu
예를 들어 주셔서 감사합니다.하지만 불행히도 yo no hablo java. :-) 나는 이미 데이타베이스를 가지고있다. (Postgres를 사용하고있다.)이 구조가 논리적/효율적인지 궁금하다. – larapsodia