사용자 도구

사이트 도구


tabledesign

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
tabledesign [2025/08/13 14:33] 116.37.159.161tabledesign [2026/02/01 12:11] (현재) peter
줄 3: 줄 3:
 1. 하지 말아야 할 짓 1. 하지 말아야 할 짓
  
- - 이식성을 떨어드리는 SQL + - 이식성을 떨어드리는 SQL\\ 
-  아래와 같이 database 이름을 sql에 포함하는 것+ 아래와 같이 database 이름을 sql에 포함하는 것\\ 
 + 이러면  db 이식할때 문제가 발생함(다른 이름의 db일 경우)\\ 
 +  
    SELECT    SELECT
     `sec_dev`.`tbl_ac_code`.`AC_CODE` AS `AC_CODE`,     `sec_dev`.`tbl_ac_code`.`AC_CODE` AS `AC_CODE`,
     concat(`sec_dev`.`tbl_ac_code`.`AC_CD1`, `sec_dev`.`tbl_ac_code`.`AC_CD2`,     REPLACE(`sec_dev`.`tbl_ac_code`.`AC_CD3`, '0', ''), REPLACE(`sec_dev`.`tbl_ac_code`.`AC_CD4`, '000', ''), REPLACE(`sec_dev`.`tbl_ac_code`.`AC_SEQ`, '000', '')) AS `AC_TOP`,     concat(`sec_dev`.`tbl_ac_code`.`AC_CD1`, `sec_dev`.`tbl_ac_code`.`AC_CD2`,     REPLACE(`sec_dev`.`tbl_ac_code`.`AC_CD3`, '0', ''), REPLACE(`sec_dev`.`tbl_ac_code`.`AC_CD4`, '000', ''), REPLACE(`sec_dev`.`tbl_ac_code`.`AC_SEQ`, '000', '')) AS `AC_TOP`,
     ifnull(`sec_dev`.`tbl_ac_code`.`AC_NAME`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM4`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM3`, `sec_dev`.`tbl_ac_code`.`AC_NM2`))) AS `AC_NAME`,     ifnull(`sec_dev`.`tbl_ac_code`.`AC_NAME`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM4`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM3`, `sec_dev`.`tbl_ac_code`.`AC_NM2`))) AS `AC_NAME`,
-    concat(CASE WHEN (`sec_dev`.`tbl_ac_code`.`AC_CD3` = '0' AND `sec_dev`.`tbl_ac_code`.`AC_CD4` = '000' AND `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000') THEN '' WHEN (`sec_dev`.`tbl_ac_code`.`AC_CD4` = '000' AND `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000') THEN '  ' WHEN `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000' THEN '    ' ELSE '      ' END, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NAME`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM4`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM3`, `sec_dev`.`tbl_ac_code`.`AC_NM2`)))) AS `AC_NAME_KOR`,+    concat(CASE WHEN (`sec_dev`.`tbl_ac_code`.`AC_CD3` = '0' AND `sec_dev`.`tbl_ac_code`.`AC_CD4` = '000' AND `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000') THEN '' WHEN (`sec_dev`.`tbl_ac_code`.`AC_CD4` = '000' AND `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000') THEN '  ' WHEN `sec_dev`.`tbl_ac_code`.`AC_SEQ` = '000' THEN '    ' ELSE '      ' END, ifnull9(`sec_dev`.`tbl_ac_code`.`AC_NAME`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM4`, ifnull(`sec_dev`.`tbl_ac_code`.`AC_NM3`, `sec_dev`.`tbl_ac_code`.`AC_NM2`)))) AS `AC_NAME_KOR`,
     `sec_dev`.`tbl_ac_code`.`CR_DR_CHK` AS `CR_DR_CHK`     `sec_dev`.`tbl_ac_code`.`CR_DR_CHK` AS `CR_DR_CHK`
    FROM    FROM
줄 16: 줄 18:
     `sec_dev`.`tbl_ac_code`.`AC_CD2` <> 0     `sec_dev`.`tbl_ac_code`.`AC_CD2` <> 0
     AND `sec_dev`.`tbl_ac_code`.`CODE_CHK` <> 'N'     AND `sec_dev`.`tbl_ac_code`.`CODE_CHK` <> 'N'
-   ORDER BY + 
-    c+2. 테이블 디자인에 대한 생각\\ 
 + 
 + - table primery key는 oid 를 사용한다.\\ 
 + 외부키를 primery키로 사용하는 결합인덱스는 지양한다.\\ 
 + - oid 는 sequence 를 사용한다.\\ 
 + -테이블 데이터 식별을 위해 별도 컬럼에 uniq index를 사용한다.\\ 
 + 
 +{{:erd_example1.png?900|}} 
 + 
 + RDB의 필수요소인 join을 할 경우 명확하고 간결한 join과 FK를 join에 누락하여 결과적으로 Cross join이 되는 문제와\\ 
 + 그로 인한 FK index 미사용 으로 full scan이 되는 상황을 방지할 수 있다.\\ 
 + 결합 index 사용시에 누락된 첫번째 멤버의 누락은 심각한 지연을 초래한다.\\ 
 + 
tabledesign.1755095617.txt.gz · 마지막으로 수정됨: (바깥 편집)