테이블 설계를 고민중입니다. 엄청 자주 일어나는 Insert Delete ... 0 0 1,444

by 마데카솔 [DB 모델링/설계] [2023.09.11 11:10:09]


업무 도메인은 아래와 같습니다

 

한 특정 기기 ( A )에  다수의 사용자( B )가 연결을 하는 업무입니다.

A : B = 1 : N 입니다.

 

테이블 데이터의 INSERT DELETE 규칙은 아래와 같습니다.

사용자( B )가  특정 기기 ( A )에서  ( A' )로 이동하게 되면

1. 기존 A에 연결된 모든 ROW DELETE

2. 기존 A에 연결된 ( B의 연결이 빠진 ) ROW INSERT

3. 기존 A'에 연결된 모든 ROW DELETE

4. A'에 연결된 사용자들 ROW INSERT 

입니다.

 

 

테이블 데이터의 조회 규칙은 아래와 같습니다 ( 조회도 엄청 자주 일어남 오히려 INSERT DELETE보다 약 3배 더 많이... )

1. 특정기기에 연결된 사용자 조회 ( 사용자들의 전체 데이터 )

2. 특정 사용자가 연결한 특정 기기 조회 ( 기기의 전체데이터 )

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

 

고민중인건...  조회하려는 데이터가 또 너무 빈번한 INSERT와 DELETE로  클러스터링 인덱스는 절대 아닌것 같구요..

또 조회는 자주일어나니 사용자, 특정기기 라는 값을 인덱스로 잡아야 할것같습니다.

 

그래서 선택한건

테이블 ERD

- 사용자 ( pk )

- 기기 모델 ( PK )

- 연결 날짜

- 우선순위

- .....등등

 

 

PK ( 사용자, 기기모델, 넌클러스터드 )  이유 : 실제론 사용자에 대해서 조회가 더 많이 일어나 사용자를 첫번쨰 순서로 두었습니다.

INDEX ( 기기모델, 넌클러스터드 ) 이유 : 기기모델에 연결된 사용자 데이터도 뽑아야하기 때문에...

 

 

이렇게 정리를 해보았는데  고수님들의 조언... 또는 잡담 부탁드리겠습니다..   고려되는건 이게 또 사용자, 기기모델의 값이 너무 랜덤값으로 주어져서  

넌클러스터 인덱스 페이지도 너무 조각이 많이나서 유지될까봐 걱정이긴하나 그건 관리가 필요한 문제같은데 맞을까요...

 

 

 

 

 

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입