반응형
하나의 메뉴는 여러개의 유저그룹과 연결될 수 있고 하나의 유저그룹도 여러개의 메뉴정보와 연결될 수 있기에 다대다 관계라고 할 수 있다.(회원과 유저그룹도 마찬가지다)
예를 들어 회원관리라는 메뉴를 A그룹도 가질 수 있고 B그룹도 가질 수 있다.
A그룹은 회원관리 뿐 아니라 시스템관리의 메뉴와도 연결될 수 있다.
관계형 데이터베이스에서는 다대다 관계를 풀어내기 위해 중간에 매핑 테이블을 둬서 1:N, N:1로 관계를 품
매핑 테이블은 연결시키는 테이들의 PK만을 가지고 있고 이를 가지고 각 테이블에서 서로 참조할 수 있다.
위의 관계에서 회원이 자신과 연결된 메뉴정보를 알고 싶으면 아래처럼 쿼리를 작성하면 된다.
/* 사용자와 매핑된 메뉴 조회 */
WITH UserGroupCodes AS (
/* 유저그룹코드 조회 */
SELECT USER_GROUP_CD
FROM USER_USER_GROUP_MAPPING
WHERE USER_ID = 'lsy'
/* 메뉴코드 조회 */
), MenuCodes AS (
SELECT MENU_CD
FROM MENU_USER_GROUP_MAPPING
WHERE USER_GROUP_CD IN (SELECT USER_GROUP_CD FROM UserGroupCodes)
)
/* 최종 메뉴 정보 조회 */
SELECT A.MENU_CD AS menuCd /* 메뉴코드 */
, A.MENU_NAME AS menuName /* 메뉴명 */
, A.MENU_URL AS menuUrl /* 메뉴 url */
, A.MENU_CD_SEQ AS menuCdSeq /* 메뉴 노출 순서 */
, A.UPPER_MENU_CD AS upperMenuCd/* 상위코드 */
FROM MENU_INFO A
WHERE A.MENU_CD IN (SELECT MENU_CD FROM MenuCodes)
AND A.USE_YN = 'Y'
회원 테이블은 메뉴테이블과 전혀 관계가 없으니 매핑 테이블을 이용해야 한다.
게임처럼 이해하면 쉽다.
메뉴정보라는 보스몹을 잡기 위해 유저그룹코드와 메뉴코드라는 아이템을 얻어야 한다.
본인의 아이디로 유저그룹코드를 먼저 구한 뒤 전열을 다음어 다시 메뉴코드를 얻는다.(순서대로 해야 함)
그 뒤 메뉴코드를 통해 최종 보스몹인 메뉴정보를 정복한다.
결과(보스 몹 사냥)
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
반응형
'IT > DataBase' 카테고리의 다른 글
[cubrid] 서브 쿼리 별칭 사용 시 주의점 (43) | 2024.01.13 |
---|---|
[Oracle] N개월후까지 날짜 구하기 (feat. Connect by level) (65) | 2023.12.03 |
[Oracle] ORDER BY 시 조건 처리 (56) | 2023.09.24 |
[Oracle] 가장 마지막 row 조회(feat. partition by) (0) | 2023.08.07 |
[MongoDB] 몽고DB 6.0.x 버전 mongo 찾지 못하는 경우... (0) | 2023.07.17 |
댓글