2009-07-29 3 views
1

데이터베이스 디자인에 대한 질문이 있습니다. 나는 내 자신의 교육을 위해 전자 수첩 또는 "Everything Bucket"을 만들고 싶다. EverNote 나 Circus Ponies Notebook이나 오픈 소스 KeepNotes 나 Red Notebook과 같은 훌륭한 대안이 있다는 것을 알고 있습니다. 그러나, 내가 말했듯이, 나는 학습 경험을 위해서 내 자신을 만들고 싶다.전자 노트북 용 데이터베이스 디자인

그러나 나는 데이터베이스 디자인에 많은 경험이 없습니다. 제 질문은 디자인이 어떻게 보이는지입니다 - 테이블, 인덱스 등 어떻게 생각합니까?

  • 모든 노트에는 0 개 이상의 노트 또는 페이지가 있습니다.
  • 모든 페이지마다 고유 한 제목과 콘텐츠가 있습니다. "실제"컨텐츠 이외에 작성 날짜, 최종 수정 날짜와 같은 메타 데이터가 있습니다.
  • 범주가 "없음"인 경우에도 모든 페이지는 하나 이상의 범주에 속합니다. 카테고리에는 추가 하위 카테고리가있을 수 있습니다. 예를 들어, "컴퓨터 과학"범주 아래에 "프로그래밍 언어"및 "컴파일러 디자인"과 같은 하위 범주가있을 수 있습니다.
  • 모든 페이지에는 0 개 이상의 태그가 연결되어 있습니다. 이것들은 범주와 유사하지만 완전히 동일하지는 않습니다. 예를 들어, 논문은 "Compiler Design"카테고리에 속할 수 있지만 저자 이름, 저널 이름, 발행 년도 등으로 태그가 붙을 수 있습니다.
  • 페이지의 내용에는 텍스트, 이미지, 링크 등을 저장할 수있는 HTML 스트림이 포함되어야합니다. 그들은 꽤 큰 데이터 덩어리가 될 수 있습니다. 이미지와 같은 특정 부분을 텍스트와 별도로 저장하는 것이 맞습니까? (PDF 문서의 내용을 표시 할 수 있다면 좋겠지 만,이 시점에서 꼭 필요한 것은 아닙니다.)
  • 같은 데이터베이스의 다른 페이지에 대한 상호 참조가 페이지에 포함될 수 있다면 좋을 것입니다 , 위키처럼.

카테고리, 태그, 부분 제목 또는 전체 텍스트로 검색 할 수 있기를 원합니다. 나는이 프로그램이 범주, 태그 및 제목을 보여주는 데이터베이스에 대해 서로 다른 견해를 가질 수 있다고 생각합니다. 그래서 이들을 신속하게 열거 할 수 있다면 좋을 것입니다.

그래서 이러한 욕망을 감안할 때, 좋은 데이터베이스는 어떻게 생겼을까요? 나는 SQL 데이터베이스가 사용될 것이라고 가정하고 있지만 Sleepycat Java Edition 데이터베이스와 같은 것은 괜찮을 것입니다.

미리 감사드립니다.

+1

오픈 소스 옵션을 알고 있으므로 소스 및 문서를 검토하여 다른 사람들이 어떻게 구현했는지 확인해 보셨습니까? 그것은 좋은 시작 장소 (또는 적어도 당신이하고 싶지 않은 것에 대한 아이디어)를 제공 할 수 있습니다. – Velociraptors

+0

예, KeepNote 및 RedNotebook의 작동 방식을 살펴 보았습니다. KeepNote는 파일 및 디렉토리의 계층에 저장된 XML을 사용합니다. RedNotebook은 특수 텍스트 형식을 사용합니다. 더 많은 정보가 있습니다. Wordpress는 내가 원하는 것을 대부분하는 것으로 보이지만, PHP 기술은 강하지 않습니다. C, C++, Java, Pascal 또는 Lisp의 어떤 것이 가장 편리 할 것입니다. 하지만 PHP를 배우는 데는 아무 문제가 없습니다 ... –

답변

1

노트북을 시작으로 :

CREATE TABLE `notebook` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(64) NOT NULL , 
PRIMARY KEY (`id`) 
) 

당신이 노트북에 원하는 모든 속성에 대한 필드를 추가합니다. 그런 다음 페이지, 카테고리, 태그 등과 같은 다른 테이블에 대해 유사한 테이블을 작성하여 모두 고유 한 ID를 갖도록하십시오.

이제 테이블의 관계를 일대일, 일대 다, 다 대다 방식으로 추가하십시오. 페이지는 노트북에 속한 notebook_id 필드를 갖습니다. 페이지는 여러 카테고리에 속할 수 있으므로 page_id 및 category_id를 사용하여 링크 테이블을 만드십시오.

먼저 완벽한 데이터 구조를 만든 다음 쿼리를 생각해보십시오. 희망이 조금 있습니다.

0

TiddlyWiki 또는 Zim은 사용자가 언급 한 요구 사항을 충족 할 것이라고 생각합니다. SQL 스타일의 관계형 데이터베이스라는 의미에서 "데이터베이스"는 사용하지 않지만 검색, 링크, 태그 붙이기, 사진 저장 등이 가능합니다.