tabledesign
문서의 이전 판입니다!
테이블 디자인에 대한 단상
1. 하지 말아야 할 짓
- 이식성을 떨어드리는 SQL
아래와 같이 database 이름을 sql에 포함하는 것
이러면 db 이식할때 문제가 발생함(다른 이름의 db일 경우)
SELECT `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`, 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, 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` FROM `sec_dev`.`tbl_ac_code` WHERE `sec_dev`.`tbl_ac_code`.`AC_CD2` <> 0 AND `sec_dev`.`tbl_ac_code`.`CODE_CHK` <> 'N'
2. 테이블 디자인에 대한 생각
- table primery key는 oid 를 사용한다.
외부키를 primery키로 사용하는 결합인덱스는 지양한다.
- oid 는 sequence 를 사용한다.
-테이블 데이터 식별을 위해 별도 컬럼에 uniq index를 사용한다.
RDB의 필수요소인 join을 할경우 병확하고 간결한 join과 FK를 join에 누락하여 결과적으로 Cross join이 되는 문제와
그로인한 FK index 미사용 으로 full scan이 되는 상황을 방지할 수 있다.
tabledesign.1755666177.txt.gz · 마지막으로 수정됨: (바깥 편집)

