2010-07-22 3 views
1

현재 50 개의 테이블이있는 새로운 데이터베이스를 디자인하고 있습니다. 그 테이블의 많은 것에 대해 나는 모든 튜플의 모든 컬럼에 대해 "노트"를 저장해야한다.열에 메모 추가를위한 데이터베이스 디자인 패턴

create table tab (id integer, A varchar(100), B varchar(200)) 

이 될 것입니다 : 예를 들어 있으므로 참고가 "열 노트"를 추가해야 테이블의 각 열에 대해

  1. : 은 지금 나는 단지이 솔루션을 발견

    create table tab (id integer, A varchar(100), A_note varchar(300), B varchar(200), B_note varchar(300)) 
    
  2. 메모 추가 메모 저장 ...

    create table notes (id integer, table_name varchar(100), reference_id integer, reference_column varchar(100), note varchar(300) 
    

다른 방법을 제안 할 수 있습니까? 관심이 있으시면 HsqlDB를 사용하고 있습니다.

+0

무엇가 "주의"는 무엇입니까? 사용자가 읽고 업데이트하고 검색 할 수 있습니까? – APC

답변

2

메모가 얼마나 희소 한 지에 따라 많이 달라지며 모든 테이블에서 가끔씩 흩어져있는 경우 테이블과 필드 이름의 조합으로 색인을 생성하는 메모가 포함 된 하나의 표를 사용하는 것이 좋습니다.

이렇게하면 원본에 손댈 필요없이 유지 관리가 필요한 단 하나의 테이블 만 스키마에 메모를 추가 할 수 있습니다. 테이블 및 필드 이름 열에 제약 조건을 사용하여 어느 것이 메모를 가질 수 있는지 제한 할 수 있습니다.

대형 회계 시스템에 입력 된 태그를 추가하는 방법을 매우 다양하게 구현했습니다.

단일 테이블이 좋지 않은 경우 패턴을 테이블 클러스터에 적용하는 것이 좋습니다.

단일 Notes 테이블의 큰 장점 중 하나는 사용자가 메모 내용으로보고 있는지 검색 할 테이블이 하나 있다는 것입니다. 사람들이 에 잘못을 기입 할 때 매우 유용 할 수 있습니다. 장소.

확장

나는 열 당 하나 참고 것으로 요구 사항을 참조하십시오.

비정상적인 개별 행 값 (예 : 주석 첨부 Excel 모델)에 대해 선택적 Note (또는 Tag) 가끔 저장되는 경우에는 다음에 대한 일반 정수 키를 추가하여 위의 모델을 확장합니다. 너의 행. 그것은 실제로 제가 처음 사용한 모델입니다. 나는 그 대답을 단순화 시켰지만 요구 사항이 오도 된 것임을 깨달았다.

+0

내가 생각하기에 훌륭한 솔루션이다. HSQLDB를 사용해야하므로이 솔루션에 대해 투자하고 싶다. VARCHAR ARRAY로 카디널리티 == 열 개수로 정의 된 열 NOTES를 추가한다. 따라서 데이터베이스 메타 데이터에 저장된 Column Ordinal Position에 액세스하여 열 관련 메모에 액세스합니다. 어떻게 생각해? – Neo1975

+0

HSQLDB의 배열 기능을 사용하여 색인 생성 계층 중 하나를 제공하는 것에 대한 피상적 인 매력이 있습니다. 안전하다고 확신하기 위해 연구하는 데 꽤 많은 시간을 소비해야했습니다 (미안하지만 시간이 없어야합니다.) , 흥미 롭군요.) 필자의 즉각적인 느낌은 작동하지 않는다는 것입니다. 테이블과 열 이름의 * 조합 *이 열을 식별합니다. 또한 열 번호를 색인으로 사용하는 것이 무서울 정도로 취약하다고 생각합니다. 열을 삭제하면 어떻게됩니까? 예, 행의 이름을 바꾸면 색인이 손상된다는 것을 알고 있지만 안전하게 수정하는 것이 훨씬 쉽습니다. –

1

그래, 별도의 테이블로 이동하는 방법입니다.

각 실제 테이블에 대해 cmnt_table 또는 notes_table과 같은 주석 테이블을 작성합니다. 메인 테이블과 동일한 ID를 사용하면 쿼리에서 조인을 쉽게 할 수 있습니다.

1

동일한 테이블에 여분의 데이터를 저장해야합니다. 이것은 일대일 관계이며 당신은 그것들을 나누는 것에서는 아무런 이득도 얻지 못하고 단지 복잡합니다.

1

당신은이 메모가 무엇인지에 대해 말하지 않습니다.각 메모가 일반적으로 열을 설명하는 경우, 예를 들어 EXPIRY_DATE 열에 "티켓이 만료되는 날짜"라는 메모가 있으면 HSQLDB 2.0에 기본 제공되는 솔루션이 있습니다.

을 '티켓이 만료되면 날짜'그리고 당신이 tablename에 대한 메모를 검색 할 수 있습니다 MYTABLE.EXPRIRY_DATE ON

COMMENT가되면, INFORMATION_SCHEMA 테이블 중 하나에 SELECT를 사용하여 기둥 이름 쌍.

은 설명서를 참조하십시오 :

http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#N10D75