ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 19. 데이터 모델링 실습
    개발자 수업/DB 2021. 11. 17. 17:57

    1. DA# Modeler5
        1) (주)엔코아에서 개발 출시한 데이터 모델링 도구
        2) 교육용(비상업용)은 무료, 비즈니스 도입시 라이선스 구매해야 함
        3) 바커 표기법을 채택한 도구

    2. 데이터 모델링 이해관계자
                                 DBA 
                                  ↓
        프로젝트 개발자 → 데이터 모델링 이해/기술 ← 현업 업무 전문가

    3. 데이터 모델링의 세 가지 요소
        1) 어떤 것(Entity)
        2) 성격(Attribute)
        3) 관계(Relationship)

    4. 데이터 모델링 용어
                                        복수/집합 개념              개별/단수 개념
        1) 어떤 것                        엔터티 타입
                                            엔터티                 인스턴스(instance)
        2) 성격                         속성(Attribute)                속성값
        3) 관계                         관계(Relationship)          페어링(Pairing)

    5. 엔터티(Entity)
        1) 유형에 따른 엔터티 분류
            - 유형 : 사원, 물품, 강사 (물리적인 형태가 있고 지속적으로 활용되는 엔터티)
            - 개념 : 조직, 보험상품 (물리적인 형태가 존재하지 않고 개념적 정보로 구분되는 엔터티)
            - 사건 : 주문, 청구, 미납 (업무를 수행함에 따라 발생되는 엔터티)
        2) 발생시점에 따른 엔터티 분류
            - 기본 : 사원, 부서, 고객, 상품, 자재 (원래 존재하는 정보로서 독립적으로 생성가능한 엔터티)
            - 중심 : 계약, 사고, 청구, 주문, 매출 (업무에 있어서 중심적인 역할을 하는 엔터티)
            - 행위 : 주문목록, 사원변경이력 (부모 엔터티로부터 발생되고 자주 내용이 바뀌거나 데이터량이 증가하는 엔터티, 상세설계단계 진행하면서 도출)
        3) 엔터티는 인스턴스의 집합임
        4) 엔터티의 명명
            - 가능하면 현업 업무에서 사용하는 용어를 사용함
            - 가능하면 약어를 사용하지 않음
            - 단수 명사를 사용함
            - 모든 엔터티에서 유일하게 이름이 부여되어야 함
        5) 엔터티 특징
            - 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 함
            - 인스턴스의 집합이어야 함
            - 엔터티는 반드시 속성이 있어야 함
            - 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 존재해야 함
              (관계가 없는 엔터티 존재하긴 함)

    6. 속성(Attribute)
        1) 속성의 개념
            - 업무에서 필요로 함
            - 의미상 더 이상 분리되지 않음
            - 엔터티를 설명하고 인스턴스의 구성요소가 됨
        2) 엔터티, 인스턴스, 속성, 속성 값의 관계
            - 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 함
            - 한 개의 엔터티는 두 개 이상의 속성을 가짐
            - 한 개의 속성은 한 개의 속성 값을 가짐

        3) 속성의 표기법
            - # : 해당 속성이 식별자임을 표시
            - * : 해당 속성이 필수 값임을 표시
            - ○ : 해당 속성이 선택 값임을 표시

        4) 속성의 분류
            - PK(primary key) : 엔터티를 식별할 수 있는 속성
            - FK(foreign key) : 다른 엔터티와의 관계에서 포함된 속성
            - 일반 속성 : 엔터티에 포함되어 있고 PK, FK에 포함되지 않은 속성

    7. 관계 (Relationship)
        1) 정의 : 상호 연관성이 있는 상태
                  존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태
        2) 관계의 표기법
            - 관계명(Membership) : 관계의 이름
            - 관계차수(Cardinality) : 1:1, 1:n, m:n
            - 관계선택사양(Optionality) : 필수관계, 선택관계
            - 관계시작점(The Beginning) : 엔터티 관계가 시작되는 편
            - 관계끝점(The End) : 엔터티 관계를 받는 편
        3) 관계명의 명명 규칙
            - 애매한 동사를 피함 (예: 관계된다, 관련이 있다, ~이다, ~한다)
            - 현재형으로 표현 (바람직하지 않은 예: 수강을 신청했다, 강의를 할 것이다)
                              -> 예: 수강 신청한다, 강의를 한다
        4) 관계선택사양(Optionality)
            - 필수적(Mandatory) : 데이터 모델 관계에서 필수참여관계 (실선)
            - 선택적(Optional) : 데이터 모델 관계에서 선택참여관계 (점선)



    8. 식별자 (Identifiers)
        1) 개념
            - 엔터티는 인스턴스들의 집합
            - 각각을 구분할 수 있는 구분자를 식별자라고 함
            - 식별자는 엔터티 내에서 인스턴스를 구분할 수 있는 구분자임
            - Attribute들의 조합
        2) 특징
            - 주 식별자(실질 식별자)에 의해 엔터티 내에 있는 모든 인스턴스들이 유일하게 구분되어야 함
            - 지정된 주 식별자의 값은 변하지 않는 것이어야 함
            - 주 식별자가 지정이 되면 반드시 값이 들어와야 함

     

     

     

     


     

     

     

     

    DROP TABLE WDSQL.TB_DEPT purge;
    CREATE TABLE WDSQL.TB_DEPT(
    	DEPT_CD			char(6)			NOT NULL,	
    	DEPT_NM			varchar2(150)	NOT NULL,	
    	UPPER_DEPT_CD	char(6)						
    );
    
    ALTER TABLE WDSQL.TB_DEPT ADD CONSTRAINT PK_TB_DEPT PRIMARY KEY (DEPT_CD);
    
    COMMENT ON COLUMN wdsql.TB_DEPT.DEPT_CD  IS '부서코드';
    COMMENT ON COLUMN wdsql.TB_DEPT.DEPT_NM IS '부서이름';
    COMMENT ON COLUMN wdsql.TB_DEPT.UPPER_DEPT_CD IS '상위부서코드';
    
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100001', '운영본부', '999999');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100002', '지원팀', '100001');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100003', '기획팀', '100001');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100004', '디자인팀', '100001');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100005', '플랫폼사업본부', '999999');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100006', '데이터팀', '100005');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100007', '개발팀', '100005');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100008', '솔루션사업본부', '999999');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100009', '운영팀', '100008');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100010', '개발팀', '100008');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100011', '신사업본부', '999999');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100012', '인공지능팀', '100011');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('100013', '빅데이터팀', '100011');
    INSERT INTO WDSQL.TB_DEPT T (T.DEPT_CD, T.DEPT_NM, T.UPPER_DEPT_CD) VALUES ('999999', '회장실', NULL);
    COMMIT;
    
    ------------------------------------------------------------------------------------------------------------
    DROP TABLE WDSQL.TB_EMP purge;
    CREATE TABLE TB_EMP(
    	EMP_NO				char(10)		NOT NULL,
    	EMP_NM				varchar2(150)	NOT NULL,
    	BIRTH_DE			char(8)			NOT NULL,
    	LUNAR_YN			char(1)			NOT NULL,
    	SEX_CD				char(3)			NOT NULL,
    	ADDR				varchar2(1000)	NOT NULL,
    	TEL_NO				varchar2(150)	NOT NULL,
    	FINAL_EDU_SE_CD		char(3)			NOT NULL,
    	SAL_TRANS_BANK_CD	char(3)			NOT NULL,
    	SAL_TRANS_ACCNT_NO	varchar2(20)	NOT NULL,
    	DIRECT_MANAGER_EMP_NO	char(10),
    	DEPT_CD				char(6)			NOT NULL 
    );
    
    ALTER TABLE WDSQL.TB_EMP ADD CONSTRAINT PK_TB_EMP PRIMARY KEY (EMP_NO);
    ALTER TABLE WDSQL.TB_EMP ADD CONSTRAINT FK_TB_EMP FOREIGN KEY (DEPT_CD) REFERENCES WDSQL.TB_DEPT (DEPT_CD);
    
    COMMENT ON COLUMN wdsql.TB_EMP.EMP_NO IS '사원번호';
    COMMENT ON COLUMN wdsql.TB_EMP.EMP_NM IS '사원이름';
    COMMENT ON COLUMN wdsql.TB_EMP.BIRTH_DE IS '생년월일';
    COMMENT ON COLUMN wdsql.TB_EMP.LUNAR_YN IS '음력여부';
    COMMENT ON COLUMN wdsql.TB_EMP.SEX_CD IS '성별코드';
    COMMENT ON COLUMN wdsql.TB_EMP.ADDR IS '주소';
    COMMENT ON COLUMN wdsql.TB_EMP.TEL_NO IS '전화번호';
    COMMENT ON COLUMN wdsql.TB_EMP.FINAL_EDU_SE_CD IS '최종학력구분코드';
    COMMENT ON COLUMN wdsql.TB_EMP.SAL_TRANS_BANK_CD IS '급여이체은행코드';
    COMMENT ON COLUMN wdsql.TB_EMP.SAL_TRANS_ACCNT_NO IS '급여이체계좌번호';
    COMMENT ON COLUMN wdsql.TB_EMP.DIRECT_MANAGER_EMP_NO IS '직속상사사원번호';
    COMMENT ON COLUMN wdsql.TB_EMP.DEPT_CD IS '부서코드';
    COMMIT;
    
    INSERT INTO WDSQL.TB_EMP T (T.EMP_NO, T.EMP_NM, T.BIRTH_DE, T.LUNAR_YN, T.SEX_CD, T.ADDR, T.TEL_NO, T.FINAL_EDU_SE_CD, T.SAL_TRANS_BANK_CD, T.SAL_TRANS_ACCNT_NO, T.DIRECT_MANAGER_EMP_NO, T.DEPT_CD) VALUES ('9999999999', '김회장', '19651105', 'N', '1', '경기도 용인시 수지구 죽전1동 215', '010-3212-7777', '006', '003', '114-125-121257', NULL, '999999'); 
    
    
    -----------------------------------------------------------------------------------------------------------
    DROP TABLE WDSQL.TB_CERTI purge;
    CREATE TABLE WDSQL.TB_CERTI(
    	CERTI_CD		char(15)		NOT NULL,
    	CERTI_NM		varchar2(150)	NOT NULL,
    	ISSUE_INSTI_NM	varchar2(150)	NOT NULL
    );
    
    ALTER TABLE WDSQL.TB_CERTI ADD CONSTRAINT PK_TB_CRETI PRIMARY KEY (CERTI_CD);
    
    COMMENT ON COLUMN wdsql.TB_CERTI.CERTI_CD IS '자격증코드';
    COMMENT ON COLUMN wdsql.TB_CERTI.CERTI_NM IS '자격증이름';
    COMMENT ON COLUMN wdsql.TB_CERTI.ISSUE_INSTI_NM IS '발행기관';
    
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100001', 'SQLD', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100002', 'SQLP', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100003', 'DASP', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100004', 'DAP', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100005', 'ADSP', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100006', 'ADP', '한국데이터베이스진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100007', '정보처리기사', '한국산업인력공단');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100008', '리눅스마스터2급', '한국정보통신진흥협회');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100009', '리눅스마스터1급', '한국정보통신진흥협회');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100010', 'OCP', '오라클');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100011', 'OCM', '오라클');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100012', 'OCJP', '오라클');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100013', 'OCJD', '오라클');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100014', 'OCWCD', '오라클');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100015', '워드프로세서2급', '대한상공회의소');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100016', '워드프로세서1급', '대한상공회의소');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100017', '컴퓨터활용능력2급', '대한상공회의소');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100018', '컴퓨터활용능력1급', '대한상공회의소');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100019', '정보시스템감리사', '한국정보화진흥원');
    INSERT INTO WDSQL.TB_CERTI T (T.CERTI_CD, T.CERTI_NM, T.ISSUE_INSTI_NM) VALUES ('100020', '정보관리기술사', '한국산업인력공단');
    
    COMMIT;
    
    ----------------------------------------------------------------------------------------------------
    DROP TABLE TB_EMP_CERTI purge;
    CREATE TABLE TB_EMP_CERTI (
    	EMP_NO		char(10)	NOT NULL,
    	CERTI_SN	char(3)		NOT NULL,
    	CERTI_CD	char(15)	 NOT NULL,
    	ACQU_DE		char(8)		NOT NULL
    );
    
    ALTER TABLE WDSQL.TB_EMP_CERTI ADD CONSTRAINT PK_TB_EMP_CERTI PRIMARY KEY (EMP_NO, CERTI_SN);
    ALTER TABLE WDSQL.TB_EMP_CERTI ADD CONSTRAINT FK_TB_EMP_CERTI01 FOREIGN KEY (EMP_NO) REFERENCES wdsql.TB_EMP (EMP_NO);
    ALTER TABLE WDSQL.TB_EMP_CERTI ADD CONSTRAINT FK_TB_EMP_CERTI02 FOREIGN KEY (CERTI_CD) REFERENCES wdsql.TB_CERTI (CERTI_CD);
    
    COMMENT ON COLUMN wdsql.TB_EMP_CERTI.EMP_NO IS '사원번호';
    COMMENT ON COLUMN wdsql.TB_EMP_CERTI.CERTI_SN IS '자격증번호';
    COMMENT ON COLUMN wdsql.TB_EMP_CERTI.CERTI_CD IS '자격증코드';
    COMMENT ON COLUMN wdsql.TB_EMP_CERTI.ACQU_DE IS '취득일자';
    COMMENT ON TABLE WDSQL.TB_EMP_CERTI IS '사원자격증';
    
    ---------------------------------------------------------------------------------------------
    
    DROP TABLE WDSQL.TB_SAL purge;
    CREATE TABLE WDSQL.TB_SAL(
    	SAL_CD	char(6)			NOT NULL,
    	SAL_NM	varchar2(150)	NOT NULL 
    );
    
    ALTER TABLE WDSQL.TB_SAL ADD CONSTRAINT PK_TB_SAL PRIMARY KEY (SAL_CD);
    
    COMMENT ON COLUMN wdsql.TB_SAL.SAL_CD IS '급여코드';
    COMMENT ON COLUMN wdsql.TB_SAL.SAL_NM IS '급여명';
    COMMENT ON TABLE WDSQL.TB_SAL IS '급여';
    
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100001', '기본급');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100002', '상여금');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100003', '특별상여금');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100004', '야근수당');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100005', '주말수당');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100006', '점심식대');
    INSERT INTO WDSQL.TB_SAL T (T.SAL_CD, T.SAL_NM) VALUES ('100007', '복지포인트');
    COMMIT;
    
    
    ---------------------------------------------------------------------------------
    DROP TABLE TB_SAL_HIS purge;
    CREATE TABLE TB_SAL_HIS(
    	SAL_HIS_NO		char(15)	NOT NULL,
    	PAY_DE			char(8)		NOT NULL,
    	PAY_AMT			number(15)	NOT NULL,
    	EMP_NO			char(10)	NOT null
    );
    
    ALTER TABLE WDSQL.TB_SAL_HIS ADD CONSTRAINT PK_TB_SAL_HIS PRIMARY KEY (SAL_HIS_NO);
    ALTER TABLE WDSQL.tb_SAL_HIS ADD CONSTRAINT FK_TB_SAL_HIS FOREIGN KEY (EMP_NO) REFERENCES Wdsql.tb_emp (EMP_NO);
    
    COMMENT ON TABLE wdsql.TB_SAL_HIS IS '급여내역';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS.SAL_HIS_NO IS '급여내역번호';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS.PAY_DE IS '지급일자';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS.PAY_AMT IS '지급금액';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS.EMP_NO IS '사원번호';
    
    ---------------------------------------------------------------------------------
    
    DROP TABLE TB_SAL_HIS_DTL purge;
    CREATE TABLE TB_SAL_HIS_DTL(
    	SAL_HIS_NO	char(15)	NOT NULL,
    	DTL_SN		char(3)		NOT NULL,
    	SAL_CD		char(6)		NOT NULL,
    	PAY_DTL_AMT	number(15)	NOT NULL
    );
    
    ALTER TABLE WDSQL.TB_SAL_HIS_DTL ADD CONSTRAINT PK_TB_SAL_HIS_DTL PRIMARY KEY (SAL_HIS_NO, DTL_SN);
    ALTER TABLE WDSQL.TB_SAL_HIS_DTL ADD CONSTRAINT FK_TB_SAL_HIS_DTL01 FOREIGN KEY (SAL_HIS_NO) REFERENCES wdsql.TB_SAL_HIS (SAL_HIS_NO);
    ALTER TABLE WDSQL.TB_SAL_HIS_DTL ADD CONSTRAINT FK_TB_SAL_HIS_DTL02 FOREIGN KEY (SAL_CD) REFERENCES wdsql.TB_SAL (SAL_CD);
    
    COMMENT ON TABLE WDSQL.TB_SAL_HIS_DTL IS '급여내역상세';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS_DTL.SAL_HIS_NO IS '급여내역번호';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS_DTL.DTL_SN IS '상세순번';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS_DTL.SAL_CD IS '급여코드';
    COMMENT ON COLUMN wdsql.TB_SAL_HIS_DTL.PAY_DTL_AMT IS '지급상세금액';

     

     

     

     

     

     

    '개발자 수업 > DB' 카테고리의 다른 글

    18. 데이터베이스 설계2  (0) 2021.11.16
    17. 논리적 설계  (0) 2021.11.16
    16. 데이터베이스 설계  (0) 2021.11.16
    15. SELECT  (0) 2021.11.16
    14. JDBCConnectTest  (0) 2021.11.16

    댓글