2016-08-17 4 views
2

나는 이중 언어 사전 응용 프로그램 을 만들었으며 현재는 매우 간단하지만 항목을 좀 더 완전히 개발하기 시작할 것이며이를위한 최상의 데이터베이스 구조를 찾으려고합니다. 이전에 사용한 사전 프로젝트는 xml을 사용했지만 (사전 항목은 대부분 계층 구조이므로) 데이터베이스를 사용하여 수행해야합니다. 2계층 적 구조를위한 더 나은 데이터베이스 디자인?

이 전형적인 중간 복잡성 항목 (간체 조금)과 같을 것이다 것입니다 :


에스
/DAR/

  • 명사
    1. 주택, 주거, ​​거소
      ar-rājl dkhul ad-dār, "남자가 집에 들어왔다."

    2. rjaƷna lid-dār "우리는 집에 돌아갔습니다."

    1. DUR의 리튬 yamīn을 설정하는 동사, "우회전."
    2. 은 약

당신이 그렇게 "연설의 일부"단순히 항목의 속성이 될 수 없습니다, 한 단어 음성의 여러 부분을 가질 수 있습니다 볼 수 있듯이/턴어라운드 그것은 감각과 관련이 있어야합니다. 각 위치는 여러 개의 감각을 가질 수 있으며 (물론 번호가 매겨져 있음) 물론 각 감각은 여러 개의 동의어가있는 여러 개의 번역을 가질 수 있습니다. 감각은 예제 문장 (아마도 둘 이상일 수도 있음)을 가질 수 있지만 항상 그런 것은 아닙니다. 즉

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을 싫어하기 때문입니다.

답변

-1

mongodb과 함께 파이썬 dictionary 데이터 구조 (또는 json/bson)를 사용하지 않으시겠습니까?

파이썬에서는 xml보다 훨씬 편리합니다.

예를 들어 전체 사전을 나타 내기 위해 python dict 객체 목록 만 만들면됩니다. 다음과 같이 각 소자가 구성 될 수

정의 튜플의리스트 (제 1 요소는 스피치의 일부이다
[{ 
    "_id": "1", 
    "word": "étudier", 
    'definitions': { 
     [(
      "v", 
      "to study", 
      "j'étudie français", 
      "I study french" 
     ), ... 
     ] 
    } 
}, ...] 

가 두 번째 요소의 정의이며, 세 번째 요소는 제 언어의 예는, 항 요소는 그 예를 번역 한 것).

그러면 mongodb 데이터베이스 내에서 쉽게 색인을 생성 할 수 있습니다.

이것은 매우 간단한 구조이며 외래 키가있는 지나치게 복잡한 데이터베이스를 다룰 필요가 없습니다. mongodb를 사용하면 단어의 정의를 검색하는 것이 쉽습니다.

record = db.collection.find({'word':'étudier').

+0

아니요, 항목의 각 부분마다 고유 한 속성이 있으므로 작동하지 않습니다. 예를 들어 감각에 숫자가 있어야하고 그 중 일부는 전치사가 필요할 수도 있습니다. 각 번역 단어에는 관련 속성 (예 : '날짜가 기입 된', '욕설')이있을 수 있습니다. 물론, 연설이나 번역 등으로 쉽게 검색 할 필요가 있습니다. 전반적으로, 내가하려는 것은 이런 종류의 구조에서는 너무 복잡 할 것입니다. – larapsodia

+0

이것이 너무 제한된 경우에는 전체 데이터베이스 디자인이 있어야합니다. 쉽고 가벼운 sqlite를 사용할 수 있습니다. 예제 디자인 : http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu

+0

예를 들어 주셔서 감사합니다.하지만 불행히도 yo no hablo java. :-) 나는 이미 데이타베이스를 가지고있다. (Postgres를 사용하고있다.)이 구조가 논리적/효율적인지 궁금하다. – larapsodia

1

SQL 데이터베이스에서도 저장 사전을 에뮬레이트 할 수 있습니다. 누군가가 이미이 멋진 도우미를 썼다 :

Django Dictionary Model

은 나뿐만 아니라 내 프로젝트에서 그것을 사용할 수 있습니다.

관련 문제