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, 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`, `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를 사용한다.
tabledesign.1755097781.txt.gz · 마지막으로 수정됨: (바깥 편집)
