DataBase-1

아기코딩단2·2022년 3월 21일
0

2022 02 24
오늘 설치한 거 이클립스에 논리모델 만드는 거 설치
https://ko.exerd.com/down.jsp

테이블이 많을 경우 코드 분석이 어렵다.
영어 단어만으로 코드의 의미를 알기어렵다. ex) stnt(수강생)
데이터를 분산시키는 이유 => 데이터의 유지보수를 쉽게하고 문제를 막기위해서, 이렇게 하면 테이블 간에 관계가 생길 수 밖에 없음
pk를 참조하는 쪽이 자식
pk면서 fk 로 사용가능
0개 이상의 데이터에 대응하는 경우 ->I0--으로 그림

구매자나 판매자가 동일인일 경우 똑같은 정보를 다시 입력해야하는 번거로움이 있음 그래서 옥션의 경우 공통정보를 회원정보를 두고 구매자 정보 따로 판매자 정보따로 테이블을 둠

부모자식은 특별한 관계가 있으면 일 대 다의 관계임

pk 가 fk 가 되면 1:1의 관계임(02-24 am10 : 11)

ERD(entity relationship diagram) 도구 - ER-win

exerd 설치하기 10 : 25

ordbs - 관계형 데이터베이스

modeling - 시스템을 분석하여 글과 그림으로 표현한 것(추상화 한 것(왜? 그림으로 그리니까))
DB 모델링 - 데이터를 분석하고 구조화시켜 데이터 속성과 관계를 글과 그림으로 표현한 것
table 은 하나의 file 로 저장됨

키(key)

  • 데이터를 구분할 때 사용할 식별자.

  • "수퍼 키(super key)"라 부르기도 한다.

  • 식별자?

    • 데이터를 구분할 때 사용하는 값.
    • 한 개 이상의 컬럼으로 구성된다.
    • 식별자를 key라고 부른다.
    • 예) 학생(학번, 이름, 전화, 이메일, 학과, 우편번호, 주소, 주민등록번호)
      • 학번 (O)
      • 주민등록번호 (O)
      • 이메일 (O)
      • 전화 (X) <= 다른데이터와 구분 불가 즉 키로 사용 불가
      • 이름 (X)
      • (이름,전화) (O)
      • (이메일,이름) (O)
      • (이름,학과,학번) (O)
      • (이름,학과,전화) (O)

    주요 용어

  • table(relation; entity; file)

  • intension(schema; header) => 데이터 구조 설계도

  • extension(instance; data) => 데이터

  • row(tuple; record) => 데이터(여러 컬럼으로 이루어진) 한 개. 예) 학생

  • column(attribute; field) => 데이터의 한 항목. 예) 이름, 학번, 전화번호

우선은 논리모델을 만듦

lms - lecture management system

**모든 테이블은 주키가 있어야함**

주 키 선정(Primary Key; PK)

  • 데이터를 구분할 때 사용할 식별자를 지정한다.
  • 만약 PK로 지정할 적절한 컬럼이 없거나, 있더라도 여러 개의 컬럼을 묶어서 사용해야 하는 경우
    surrogate key(대리 키=인공 키) 사용을 고려하라!

포함관계 및 배타적 관계

sql 문법으로 포함관계와 배타적 관계를 제어할 수 없다. => 프로그래밍에서 제어해야한다. ***

비식별 관계와 식별 관계

1) 비식별 관계(non-identifying)
=>

DB 모델링을 위해서는 기본적인 도메인 지식 필요함 그리고 개인적인 경험이 들어갈 수 밖에 없음
공식이 존재하지만 개인적 경험이 들어가게됨(자동차 빙판길 운전시 주의사항 등)

2) 일반 관계

  • 두 테이블 사이의 관계 식별하여 연결한다. => 여기서 도메인 지식과 개인적 경험이 들어감(그래서 계속 경험해봐야함)
  • 부모-자식 관계로 정의한다.
    • 데이터를 참조하는 쪽이 자식 테이블이다.
    • 데이터를 참조 당하는 쪽이 부모 테이블이다.

1쪽이 부모고 다쪽이 자식임
다 대 다 관계 해소 필요함

제1정규화

  • 정규화? 데이터 중복을 찾아내어 별도의 테이블로 데이터를 분리시키는 것.
  • 중복 데이터 또는 중복 컬럼을 별도의 테이블로 분리하여 부모-자식 관계를 맺는다.

기본주소가 바뀌면 우편번호가 바뀜

js 다음 주소 api가 존재함

수강생과 강의의 관계 (다 대 다 관계) => 해소법 = 관계에 대한 정보를 보관 => 관계 테이블 만듦

not null 은 필수입력 항목이니까 not null 이 존재하게 되면 무조건 1개의 데이터와 관계를 맺는다.

관계데이터 차수를 정할 때 강의에서는 매니저 쪽을 바라보고 차수를 정하고 매니저 입장에서는 강의쪽을 바라보고 차수를 보면 됨 필수가 아니니까 연결됨 즉OI로 되어있으면 null 허용임

유니크(Unique) 컬럼 지정

  • PK는 아니지만 PK처럼 중복되어서는 안되는 컬럼이다.
  • 대체 키(alternate key) 컬럼이 유니크 컬럼이 된다.
  • 즉 PK로 선정되지 않은 나머지 후보 키는 유니크 컬럼으로 지정하여 데이터가 중복되지 않도록 한다.

중복되면 안되는 데이터는 unique 키로 설정
두개다 넣으면 안됨 그러면 묶어서 확인한다는 뜻임

모든 걸 인덱스 번호 지정해버리면 검색 속도가 느려짐(많은 데이터에 대해서 ex) 이름, 강의명과 같은 애들에 대해서 인덱스 걸면 좋음)

논리모델에서는 다 대 다 관계를 넣어도 되지만 물리모델에서는 다 대 다 관계를 빼버려야함

논리 모델은 DBMS에 비종속임 즉 DBMS의 능력을 고려하지 않은 상태에서 데이터 모델을 설계하는 것
이를 통해서 물리모델(MS-SQL용, Oracle용, MariaDB용 등등)을 만들면 됨 즉 특정 DBMS에 맞춰 모델을 변환함 이는 DBMS의 능력을 최대한으로 끌어내는 방식으로 설계한다.

물리모델을 설계할 때 논리모델을 재사용한다. 일단 개념적으로 만든 다음에 DBMS의 특성에 맞춰서 전환시킴
DBMS마다 테이블명과 컬럼명에 대해서 명명 규칙이 있음

보통 테이블 앞에 모듈명을 많이 붙임 lms , hr

일치화 = 동기화
동기화를 하지 않고 sql문을 추출하면 sql 이 버전이 맞지 않는 문제 발생

exerd 써서 reverse 엔지니어링 할 수 있음

profile
레거시 학살자

0개의 댓글