hyeonga_code

Database_74_데이터베이스 설계_E-R 모델 본문

Oracle Database

Database_74_데이터베이스 설계_E-R 모델

hyeonga 2023. 8. 26. 05:59
반응형

-- 데이터베이스 설계
    -- 사용자의 다양한 요구 사항을 고려하여 데이터베이스를 생성하는 과정입니다.
    -- 설계 방법
        -- E-R 모델과 릴레이션 변환 규칙을 이용한 설계
        -- 정규화를 이용한 설계
    
    -- E-R 모델과 릴레이션 변환 규칙을 이용한 설계
        -- 설계 과정 중 오류를 발견하여 변경이 필요한 경우 이전 단계로 되돌아가 설계를 변경할 수 있습니다.
        -- 1단계 : 요구 사항 분석  
            -- 목적
                -- 사용자의 요구 사항을 수집하고 분석하여 개발할 데이터베이스의 용도를 파악합니다.
                -- 고려 사항
                    -- 필요한 데이터
                    -- 데이터의 처리
            -- 결과물
                -- 요구사항 명세서
            -- 주요 작업
                -- 데이터베이스를 실제로 사용할 주요 사용자의 범위를 결정합니다.
                -- 사용자가 조직에서 수행하는 업무를 분석합니다.
                -- 면담, 설문 조사, 업무 관련 문서 분석 등의 방법을 이용하여 요구 사항을 수집합니다.
                -- 수집된 요구 사항에 대한 분석 결과를 요구 사항 명세서로 작성합니다.
        -- 2단계 : 개념적 설계
            -- 목적
                -- DBMS에 독립적인 개념적 스키마를 설계합니다.
                -- 요구 사항 분석 결과물을 개념적 데이터 모델을 이요하여 개념적 구조로 표현합니다.
                    -- 개념적 모델링 (ERD 등)
            -- 결과물 
                -- 개념적 스키마 : E-R 다이어그램
            -- 주요 작업
                -- 요구 사항 분석 결과를 기반으로 중요한 개체를 추출하고 개체 간의 관계를 결정하여E-R 다이어그램으로 표현합니다.
            -- 작업 과정
                -- 개체와 속성 추출
                    -- 개체를 추출하고, 각 개체의 주요 속성과 키 속성을 선별합니다.
                    -- 개체 : 저장할 만한 가치가 있는 중요 데이터를 가진 사람이나 사물
                    -- 개체 추출 방법
                        -- 요구 사항 문장에서 업무와 관련이 깊은 의미 있는 명사를 찾습니다.
                        -- 업무와 관련이 적은 일반적이고 광범위한 의미의 명사는 제외합니다.
                        -- 의미가 같은 명사가 여러 개일 경우 대표 명사 하나만 선택합니다.
                        -- 찾은 명사를 개체와 속성으로 분류합니다.
                        -- 개체 정의서를 작성합니다.
                -- 개체 간의 관계를 결정합니다.
                    -- 관계 : 개체 간의 의미 있는 연관성
                    -- 관계 추출 방법
                        -- 요구 사항 문장에서 개체 간의 연관성을 의미있게 표현을 찾습니다.
                        -- 의미가 같은 동사가 여러 개일 경우 대표 동사 하나를 선택합니다.
                        -- 찾아낸 관계에 대해 매핑 카디널리티와 참여 특성을 결정합니다.
                            -- 매핑 카디널리티 : 일대일, 일대다, 다대다
                            -- 참여 특성 : 필수적( NOT NULL )/선택적 참여
                        -- 관계 정의서를 작성합니다.
                            -- 관계도 속성을 가질 수 있습니다.
                -- E-R 다이어그램으로 표현합니다.
                    -- 'https://app.diagrams.net/'
                    -- CSP : 클라우드 서비스 제공 업체
        -- 3단계 : 논리적 설계
            -- 관계 설계
            -- 목적
                -- DBMS에 적합한 논리적 스키마를 설계합니다.
                -- 개념적 스키마를 논리적 데이터 모델을 이용하여 논리적 구조로 표현합니다.
                -- 논리적 모델링=데이터 모델링
                    -- 일반적으로 관계 데이터 모델을 많이 이용합니다.
                -- 결과물
                    -- 논리적 스키마 : 릴레이션 스키마
                -- 주요 작업
                    -- 개념적 설계 단계의 결과물인 E-R 다이어그램을 릴레이션 스키마로 변환합니다.
                    -- 릴레이션 스키마로 변환한 후 속성의 데이터 타입, 길이, 널 값 허용 여부, 기본 값, 제약 조건 등을 세부적으로 결정하고 문서화 시킵니다.
                -- ERD를 릴레이션 스키마로 변환하는 규칙
                    -- 모든 개체는 릴레이션으로 변환합니다.
                        -- 개체의 이름 >> 릴레이션 이름
                        -- 개체의 속성 >> 릴레이션 속성
                        -- 개체 키 속성 >> 릴레이션 기본키
                        -- 속성이 복합 속성인 경우 복함 속성을 구성하고 잇는 단순 속성만 릴레이션의 속성으로 변환합니다.
                    -- 다대다 관계는 릴레이션으로 변환합니다.
                        -- 관계의 이름 >> 릴레이션 이름
                        -- 관계의 속성 >> 릴레이션의 속성
                        -- 관계에 참여하는 개체를 규칙 1에 따라 릴레이션으로 변환한 후 릴레이션의 기본 키를 관계 릴레이션에 포함시켜 외래키로 저장합니다.
                        -- 외래키들을 조합하여 관계 릴레이션의 기본키로 지정합니다.
                    -- 일대다 관계는 외래키로 표현합니다.
                        -- 약한 개체가 참여하는 일대다 관계는 외래키를 포함하여 기본키로 지정합니다.
                        -- 1측 개체 릴레이션의 기본키를 n측 개체 릴레이션에 포함시켜 외래키로 지정합니다.
                        -- 관계의 속성들도 n측 개체 릴레이션에 포함시킵니다.
                        -- n측 개체 릴레이션은 외래키를 포함하여 기본키를 지정합니다.
                        -- 약한 개체는 강한 개체에 따라 존재 여부가 결정되므로 강한 개체의 기본키를 이용하여 식별합니다.
                            -- 강한 개체가 약한 개체의 존재를 결정하는 관계를 약한 관계라고 합니다.
                    -- 일대일 관계는 외래키로 표현합니다.
                        -- 일반적인 일대일 관계는 외래키를 서로 주고받습니다.
                            -- 관계에 참여하는 개체 릴레이션들이 서로의 기본키를 주고받아 외래키로 지정합니다.
                            -- 관계의 속성들도 모든 개체 릴레이션에 포함시킵니다.
                            -- 불필요한 데이터 중복이 발생할 수 있습니다.
                        -- 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받습니다.
                            -- 관계에 필수적으로 참여하는 개체 릴레이션에만 외래키를 포함시킵니다.
                            -- 관계의 속성들은 관계에 필수적으로 참여하는 개체 릴레이션에 포함시킵니다.
                        -- 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션 하나로 합칩니다.
                            -- 관계에 참여하는 개체 릴레이션들을 하나의 릴레이션으로 합쳐서 표현합니다.
                            -- 관계의 이름을 릴레이션 이름으로 사용하고, 관계에 참여하는 두 개체의 속성들을 관계 릴레이션에 모두 포함시킵니다.
                            -- 두 개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정합니다.
                    -- 다중 값 속성은 릴레이션으로 변환합니다.
                        -- E-R 다이어그램의 다중값 속성은 독립적인 릴레이션으로 변환합니다.
                        -- 다중값 속성과 함께 그 속성을 가지고 있던 개체 릴레이션의 기본 키를 외래키로 가져와 새로운 릴레이션에 포함시킵니다.
                        -- 새로운 릴레이션의 기본키는 다중값 속성과 외래키를 조합하여 지정합니다.
                    -- 변환 규칙을 순서대로 적용하되, 해당되지 않는 규칙은 제외합니다.
                    -- 기타 고려 사항
                        -- 모든 관계를 독립적인 릴레이션으로 변환할 수 있습니다.
                        -- 속성이 많은 관계는 유형에 상관없이 릴레이션으로의 변환을 고려할 수 있습니다.
                        -- 개체가 자기 자신과 관계를 맺는 순환 관계도 기본 규칙을 그대로 적용합니다.
                -- 최종 산출물 : 테이블 명세서
                    -- 릴레이션 스키마에 대한 설계 정보를 기술한 문서입니다.
                    -- 테이블의 사용 목적, 이름, 작성자, 비고 사항 등의 테이블에 대한 기록을 포함합니다.
                    -- 릴레이션 스키마 변환 후 속성의 데이터 타입과 길이, 널 값 허용 여부, 기본값, 제약 조건 등을 세부적으로 결정하고 문서화시킵니다.
        -- 4단계 : 물리적 설계
            -- 하드웨어나 운영 체제의 특성을 고려하여 필요한 인덱스 구조나 내부 저장 구조 등에 대한 물리적인 구조를 설계합니다.
        -- 5단계 : 구현
            --  SQL로 작성한 명령문을 DBMS에서 실행하여 데이터베이스를 실제로 생성합니다.
    -- 식별 관계 : 기본키를 넘겨받아 사용하겠습니다.
    -- 비식별 관계 : 기본키를 외래키로 사용하지 않겠습니다.

/*
    -- 테이블 명세서에 따라 작성
    테이블 이름                                            |              회원
    ----------------------------------------------------------------------------------------------------------------------
    속성 이름   |   데이터 타입   |   널 사용 여부   |   기본값   |   기본키   |   외래키   |   제약 조건
    ----------------------------------------------------------------------------------------------------------------------
    회원 아이디   VARCHAR(20)           N                                  PK
    비밀번호       VARCHAR(20)            N
    이름             VARCHAR(20)            N
    나이             NUMBER(3)                Y                                                              0 이상
    직업             VARCHAR(20)             Y
    등급             VARCHAR(20)            N                 silver                                    silver, gold, vip만 허용
    적립금          NUMBER(6)                N                0
    ----------------------------------------------------------------------------------------------------------------------
CREATE TABLE member (
    member_id VARCHAR(20) NOT NULL PRIMARY KEY,
    password VARCHAR2(20) NOT NULL,
    member_name VARCHAR(20) NOT NULL,
    age NUMBER(3) CHECK( age >= 0),
    job VARCHAR(20),
    member_grade VARCHAR2(10) DEFAULT 'silver' NOT NULL,
    point NUMBER(6) NOT NULL,
    CONSTRAINT member_grade_ck CHECK(member_grade IN ('silver', 'gold', 'vip')
    );
*/

반응형