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 로 저장됨
데이터를 구분할 때 사용할 식별자.
"수퍼 키(super key)"라 부르기도 한다.
식별자?
주요 용어
table(relation; entity; file)
intension(schema; header) => 데이터 구조 설계도
extension(instance; data) => 데이터
row(tuple; record) => 데이터(여러 컬럼으로 이루어진) 한 개. 예) 학생
column(attribute; field) => 데이터의 한 항목. 예) 이름, 학번, 전화번호
우선은 논리모델을 만듦
lms - lecture management system
**모든 테이블은 주키가 있어야함**
주 키 선정(Primary Key; PK)
포함관계 및 배타적 관계
sql 문법으로 포함관계와 배타적 관계를 제어할 수 없다. => 프로그래밍에서 제어해야한다. ***
비식별 관계와 식별 관계
1) 비식별 관계(non-identifying)
=>
DB 모델링을 위해서는 기본적인 도메인 지식 필요함 그리고 개인적인 경험이 들어갈 수 밖에 없음
공식이 존재하지만 개인적 경험이 들어가게됨(자동차 빙판길 운전시 주의사항 등)
2) 일반 관계
1쪽이 부모고 다쪽이 자식임
다 대 다 관계 해소 필요함
제1정규화
기본주소가 바뀌면 우편번호가 바뀜
js 다음 주소 api가 존재함
수강생과 강의의 관계 (다 대 다 관계) => 해소법 = 관계에 대한 정보를 보관 => 관계 테이블 만듦
not null 은 필수입력 항목이니까 not null 이 존재하게 되면 무조건 1개의 데이터와 관계를 맺는다.
관계데이터 차수를 정할 때 강의에서는 매니저 쪽을 바라보고 차수를 정하고 매니저 입장에서는 강의쪽을 바라보고 차수를 보면 됨 필수가 아니니까 연결됨 즉OI로 되어있으면 null 허용임
유니크(Unique) 컬럼 지정
중복되면 안되는 데이터는 unique 키로 설정
두개다 넣으면 안됨 그러면 묶어서 확인한다는 뜻임
모든 걸 인덱스 번호 지정해버리면 검색 속도가 느려짐(많은 데이터에 대해서 ex) 이름, 강의명과 같은 애들에 대해서 인덱스 걸면 좋음)
논리모델에서는 다 대 다 관계를 넣어도 되지만 물리모델에서는 다 대 다 관계를 빼버려야함
논리 모델은 DBMS에 비종속임 즉 DBMS의 능력을 고려하지 않은 상태에서 데이터 모델을 설계하는 것
이를 통해서 물리모델(MS-SQL용, Oracle용, MariaDB용 등등)을 만들면 됨 즉 특정 DBMS에 맞춰 모델을 변환함 이는 DBMS의 능력을 최대한으로 끌어내는 방식으로 설계한다.
물리모델을 설계할 때 논리모델을 재사용한다. 일단 개념적으로 만든 다음에 DBMS의 특성에 맞춰서 전환시킴
DBMS마다 테이블명과 컬럼명에 대해서 명명 규칙이 있음
보통 테이블 앞에 모듈명을 많이 붙임 lms , hr
일치화 = 동기화
동기화를 하지 않고 sql문을 추출하면 sql 이 버전이 맞지 않는 문제 발생
exerd 써서 reverse 엔지니어링 할 수 있음