database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Q&A 277 게시물 읽기
No. 277
답변 감사하고 수정된 질문 내용입니다.(죄송)-_-
작성자
서준원(linuxqna)
작성일
2002-01-09 08:26
조회수
8,429

먼저 죄송합니다. 제가 정신없이 질문을 하다보니...

질문 작성을 잘못해서. 다시 올립니다.

먼저 user 테이블의 PK 는 이전 질문에서 name 이라고 했는데

id 를 의도한것이었습니다.(애트리뷰트명을 잘 정해야 하는데, 저의 실수)

 

일단 id로 고치면, PK로 쓰는데는 문제없을것 같고

profile 테이블은 각각 유저의 어플리케이션 설정파일같은것을

저장하는 용도입니다.

위의 user 테이블을 복사해서 붙이다 보니... 잘못 기제 됬습니다.

 

일단 먼저 재익님꼐서 달아주신 코멘트로, 상당부분의 고민이 해결되었습니다.

 

너무 바이블적인 것을 요구하는것 같지만

이 질문에서 저의 가장 큰 질문인

1:1 대응관계로 형성이 가능할떄....

 

1. 그것을 추가적인 애트리뷰트로 넣는가?

2. 새로운 entity 로 추가해서 relationship을 맺을것인가?

 

이거에 대한 모델링 관점에서의 가이드라인같은것이 있는지가 궁금합니다.

 

--------------------------------------------------------------

아래는 수정된 최초 질문내용입니다.

 

예를 들어서 아래와 같은 사용자에 대한 기본적인

정보를 가진 user 테이블이 있다고 가정을 합니다.

 

user

--------------

|PK id |

--------------

| passwd |

| uid |

| gid |

| dir |

| shell |

--------------

 

그리고 이 유저에 대한 기타 프로파일을 추가해야 되기 때문에

profile 이라는 테이블을 부가적으로 만들었습니다.

 

user 테이블이 부모 테이블이 되고,

profile의 name을 user 테이블에 대한 FK 로 됩니다.(1:1 대응관계)

 

profile

--------------

|PK,FK id |

--------------

| pagerow |

| editor |

| replyto |

| sign |

--------------

 

후에 각각의 유저에 대한 인증서 정보(DN, usercert, userprivate) 가

부가적으로 필요하게 되었습니다.

 

여기서 고민이 생깁니다.

제가 생각해볼 수 있는 방법이 2가지가 있었습니다.

 

방법 1. profile 테이블에 DN, usercert, userprivate 필드를 추가한다.

 

방법 2. 아래와 같이 certificate 테이블을 추가한다

 

certificate

-----------------

|PK,FK id |

-----------------

| dn |

| usercert |

| userprivate|

-----------------

 

어떤 방법을 쓰건 문제될건 없다고 생각이 되는데.

어떤 방법이 DB 모델링 관점에서 볼때 추천할만한 모델인지 궁금합니다.

 

그럼 고수님들의 한수지도 부탁드립니다.

이 글에 대한 댓글이 총 1건 있습니다.

1:1 대응관계가 항상 성립하는 상황이라면 두가지 측면에서 애트리뷰트를 추가할 것인지 아니면 테이블을 새로 생성할 것인지를 고민해 보는 것이 좋습니다.

 

정보 중에는 자주 query 를 하고, 자주 update 를 하고 하는 부분이 있고, 한번 저장하고 나면 그 내용은 거의 변함 없이 그렇게 자주 select 해 볼 필요가 없는 정보도 있습니다. 이런 두가지 정보가 같이 존재 한다면 이 둘은 다른 테이블로 분리하는 것이 좋습니다.

 

그리고 select 를 할때도 한 트랜젝션에서 항상 같이 select 가 되는 부분은 당연히 같은 테이블로 들어가야 합니다. 하지만 같은 사용자 정보라도 항시 다른 트랜젹센에서 서로 달리 참조가 되는 attribute 라면 다른 테이블로 가는 것이 나중에 흐름상 트랜젝션 양을 줄이고 DB access 를 빠르게 하는 방법입니다. 이 정도만 고려하시면 될 것 같군요.

 

두번째 질문도 위의 관점에서 해결하시면 될 것 같습니다. 사실 생각하기에 user table 부분은 거의 변경이 없을 것 같습니다. 그리고 profile 테이블은 상황이 어떻게 되는지는 몰라도 같이 변경이 별로 없는 항목일 듯 하군요. 하지만 참조하는 부분이 서로 다르다면 (예를 들여 로그인 하는 부분에서는 항상 user table 만을 참조하고, 글을 적고 하는 기타의 부분에서는 항상 profile table 부분만을 참조 한다면....) 테이블을 분리하는 것이 좋고, 그렇지 않을 경우 (예를 들어 글을 적는 등의 기타의 부분에서 항상 user table/profile 테이블을 같이 참조해야 하는 상황이라면...) 당연히 테이블을 합치는 것이 좋습니다.

 

다음으로 certificate 테이블은 이것이 얼마나 자주 변경이 되는지는 몰라도 이놈의 인증서가 사용자가 로그인 할때마다 변경되는 부분이고, 사용자 인증 부분 외에는 사용될 일이 없다면 당연히 분리되어야 겠지요. 그렇지 않고 한번 인증서를 받으면 이것이 거의 반영구적으로 유지되고, 글을 쓰는 등의 기타 작업시에도 항상 profile table 과 같이 참조되어야 하는 상황이라면 굳이 테이블을 분리하는 것이 의미가 없겠지요.

 

그리고 디비 내에 row 수가 많고, 인덱스를 걸 필요성이 많은 구조인 경우에는 될 수 있으면 테이블을 분리하는 방향으로 모델링을 하는 것이 좋습니다. 그것이 인덱스 의 크기를 줄이고, 인덱스 스캔 타임을 줄이는 하나의 방도가 되기 때문입니다.

 

도움이 되셨길 바랍니다.

정재익(advance)님이 2002-01-09 10:41에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
292데이터타입... [1]
김명수
2002-01-13
7363
291한번에 찾는 like 는 없나요..?
이효택
2002-01-13
7938
287버클리 DB에 관한 질문
백민준
2002-01-11
7864
289┕>Re: 못찾으신 것 같군요. [1]
정재익
2002-01-13 08:44:32
8250
276[질문]추가적인 애트리뷰트가 필요할떄, 그것을 어떻게? [1]
서준원
2002-01-08
7909
277┕>답변 감사하고 수정된 질문 내용입니다.(죄송)-_- [1]
서준원
2002-01-09 08:26:08
8429
273[질문]FK 의 설정에 대해서. [2]
서준원
2002-01-08
8352
275┕>Re: [질문]FK 의 설정에 대해서. [1]
서준원
2002-01-08 13:25:36
9280
278 ┕>[질문]죄송.. 약간의 풀리지 않는 궁금점이 남아서
서준원
2002-01-09 09:02:06
8489
284  ┕>Re: [질문]죄송.. 약간의 풀리지 않는 궁금점이 남아서 [1]
김대성
2002-01-09 23:48:18
9479
267[질문]PK가 너무 많아서.. 설계가 잘못된 것인가요? [1]
서준원
2002-01-07
8060
268┕>Re: [질문]PK가 너무 많아서.. 설계가 잘못된 것인가요?
서준원
2002-01-07 16:23:14
8599
266[질문]주소록 스키마좀 봐주세요 [1]
서준원
2002-01-07
8827
271┕>Re: [질문]주소록 스키마좀 봐주세요
김대성
2002-01-08 00:56:59
8970
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다