티스토리 뷰
무결성 | |
데이터에 결함이 없어야 함. 데이터의 정확성, 일관성, 유효성이 유지되는 것. |
|
정확성 | : 데이터는 애매하지 않아야 한다. |
일관성 | : 각 사용자가 일관된 데이터를 볼 수 있도록 해야 한다. |
유효성 | : 데이터가 실제 존재하는 데이터여야 한다. |
1.개체 무결성 | 개체는 하나의 테이블을 의미함 모든 테이블은 PK로 선택된 컬럼을 가져야 한다. |
2.참조 무결성 | 두 테이블의 데이터가 항상 일관된 값을 가지도록 유지하는 것. |
3.도메인 무결성 | 도메인은 컬럼. 컬럼의 무결성. 컬럼의 타입, NULL값의 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는 지를 확인하는 것. |
모델링(기획) : 추상적인 주제를 DB에 맞게 설계하는 것.
어플리케이션 기획 안에 모델링이 포함되어 있음.
테이블을 짜야지 모델링 할 수 있음.
(프론트, 서비스, 모델링 3가지가 기획팀에서 어플리케이션 기획)
1.요구사항 분석
: 3가지를 관리하고자 한다. >> 문서화
2.개념적 설계
회원, 주문, 상품 >> 테이블 3개가 필요하네
회원 | 주문 | 상품 |
아이디(PK) | 주문번호(PK) | 상품번호(PK) |
비밀번호 | 주문날짜 | 상품명 |
이름 | 아이디 | 가격 |
주소 | 상품번호 | 재고량 |
이메일 | ||
생일 |
3.논리적 설계(논리 모델링)
회원 | 주문 | 상품 |
아이디(PK) | 주문번호(PK) | 상품번호(PK) |
비밀번호 | 주문날짜 | 상품명 |
이름 | 아이디(FK) | 가격 |
주소 | 상품번호(FK) | 재고량 |
이메일(UK) | ||
생일 |
4.물리적 설계 //영어이름, 자료형 등등 구체적으로, 누구나 테이블을 만들 수 있게끔
TBL_USER | ||
USER_ID : VARCHAR2(1000) : PRIMARY KEY | ||
USER_PW : VARCHAR2(1000) | ||
USER_NAME : VARCHAR2(1000) | ||
USER_ADDRESS : VARCHAR2(1000) | ||
USER_EMAIL : VARCHAR2(1000) : UNIQUE | ||
USER_BIRTH : DATE |
5.구현
==============================================================
EX
1.요구사항 분석
꽃과 화분 두 종류를 판매하고,
꽃을 구매할 때 화분도 같이 구매합니다.
꽃은 이름과 색상, 가격, 유통기한, 재고량이 있고,
화분은 제품번호, 색상, 모양, 재고량, 가격이 있습니다.
화분은 모든 꽃을 담을 수 없고 맞는 꽃들을 담아야 합니다.
KF는 중복됨.
2.개념적 설계
꽃 | 화분 |
이름 | 제품번호 |
색상 | 색상 |
가격 | 모양 |
유통기한 | 재고량 |
재고량 | 가격 |
꽃 이름 | |
꽃 색상 |
3.논리적 설계
꽃 | 화분 |
이름PK | 제품번호PK |
색상PK | |
가격 | 색상 |
유통기한 | 모양 |
재고량 | 재고량 |
가격 | |
꽃 이름FK | |
꽃 색상FK |
하나의 화분(번호 PK)에 여러 종류의 FK꽃이 들어갈 수 있음.
4.물리적 설계
TBL_FLOWER | ||
FLOWER_NAME : VARCHAR2(1000) : PRIMARY KEY | ||
FLOWER_COLOR : VARCHAR2(1000) : PRIMARY KEY | ||
FLOWER_PRICE : NUMBER | ||
FLOWER_DATE_OF_EXPIRY : DATE | ||
FLOWER_STOCK : NUMBER |
TBL_POT | ||
POT_NUMBER : NUMBER : PRIMARY KEY | ||
POT_COLOR : VARCHAR2(1000) | ||
POT_SHAPE : VARCHAR2(1000) | ||
POT_STOCK : NUMBER | ||
POT_PRICE : NUMBER | ||
FLOWER_NAME : VARCHAR2(1000) : FOREIGN KEY | ||
FLOWER_COLOR : VARCHAR2(1000) : FOREIGN KEY |
5.구현(day02.sql)
SET ACTIVE
스크립트 만들기 CTRL+]
PK(FLOWER) -> FK(POT)
부모테이블 -> 자식테이블
PRIMARY KEY 명령어는 한번만 쓸 수 있음.
기본 키는 하나만 있어야 함, 기본 키를 할당하는 컬럼의 개수는 여러개 가능
PK는 컬럼 옆에다 쓰는 게 편하고,
FK는 밑에다 이어서 쓰는게 훨씬 편함.
==============================================================
[실습]
1.요구사항 분석
동물병원에서 반려동물 정보와 보호자의 정보가 필요하다
반려동물의 정보는 핀번호, 종, 이름, 나이, 병명이 필요하고
보호자의 정보는 이름, 나이, 주소, 핸드폰 번호가 필요하다.
한 명의 보호자는 여러 반려동물을 등록할 수 있다.
2.개념적 설계
보호자 | 반려동물 |
이름 | 핀번호 |
나이 | 종 |
주소 | 이름 |
핸드폰번호 | 나이 |
병명 | |
핸드폰 번호 |
3.논리적 설계
보호자 | 반려동물 |
핸드폰번호PK | 핀번호PK |
이름 | 종 |
나이 | 이름 |
주소 | 나이 |
병명 | |
핸드폰 번호FK |
보호자 한 명이 여러 동물을 키울 수 있음.
하나의 동물 PK에 핸드폰 번호FK 여러개 올 수 있음.
KF는 자식
4.물리적 설계
TBL_OWNER | ||
OWNER_PHONENUMBER : VARCHAR2(1000) : PRIMARY KEY | ||
OWNER_NAME : VARCHAR2(1000) | ||
OWNER_AGE : NUMBER | ||
OWNER_ADDRESS : VARCHAR2(1000) |
TBL_PET | ||
PET_PIN_NUMBER : NUMBER : PRIMARY KEY | ||
PET_SPECIES : VARCHAR2(1000) | ||
PET_NAME : VARCHAR2(1000) | ||
PET_AGE : NUMBER | ||
PET_TROUBLE : VARCHAR2(1000) | ||
OWNER_PHONE_NUMBER : VARCHAR2(1000) : FOREIGN KEY (이름은 달라도 되지만 자료형,용량은 같아야 함.) |
FK 참조하는 컬럼 이름만 정확하게 써주면 됨.
테이블의 컬럼명과 참조컬럼; 가독성을 위해서 보통 통일하나, 따로 써야 하는 경우에는 따로 써도 됨.
5.구현
--------------------------------------------------------------------------------------------
▶DML(Data Manipulation Language) 데이터 조작어 >> CRUD
1.SELECT : 조회
SELECT [컬럼명,...]
FROM [테이블명]
WHERE [조건식];
2.INSERT : 추가
1) 컬럼을 생략할 수 있다.(DEFAULT 제약조건이 있다면, 알아서 그 값이 들어감)
INSERT INTO [테이블명] ([컬럼명,...])
VALUES([값,...]);
2) 모든 값을 전부 작성해야 되면, 컬럼명은 직접 작성하지 않는다.
INSERT INTO [테이블명]
VALUES([값,...]);
3.UPDATE : 수정
UPDATE [테이블명]
SET [컬럼명 = 값, ...]
WHERE [조건식]; //WHERE절은 생략 가능 > 그럼 전체 내용이 수정됨.
4.DELETE : 삭제
DELETE FROM [테이블명]
WHERE [조건식]; //WHERE절은 생략 가능 > 그럼 전체 내용이 삭제됨.
----------------------------------------------------------
조건식 : 참 또는 거짓 둘 중 하나
조건식에서 사용되는 연산자(WHERE절에서만 사용 가능)
>, < | 초과 미만 |
>=, <= | 이상 이하 |
= | 같다 |
<>, !=, ^= | 같지 않다 |
AND | 둘 다 참이면 참 |
OR | 둘 중 하나라도 참이면 참 |
* : 전체라는 의미, 전체 컬럼
문자열 값은 '' : 작은 따옴표
SET절 = : 대입연산자
WHERE절 = : 같다
TO_DATE 포맷 형식 : 'YYYY-MM-DD HH24:MI:SS'
2019/12/04 이렇게 써도 화면에서는 2019-12-04 이렇게 나옴
20191204 구분점 없이 써도 들어감.
시작점, 끝점, 증가량 정할 수 있는 것 : SEQUENCE
CREATE SEQUENCE SEQ_[테이블명];
디폴트로 1부터 1씩 증가
NEXTVAL : 현재 시퀀스부터 다음 시퀀스 까지 계속 증가해줌.
시퀀스는 중복없음에 포커스 맞추기.
자식보다 부모의 값이 무조건 먼저 있어야 한다.
부모(PK)에 없으면 자식(FK)에 추가할 오류가 남.
자식에서 쓰고 있으면(참조 중) 부모에서 수정,변경,삭제되지 않음.(오류: child record found)
시퀀스는 순서를 의미함.
순서가 필요할 때 시퀀스를 생성함.
SYSDATE + 3 : 현재 시스템 시간 + 3
부모가 있어야 자식이 있다 : 추가
수정, 삭제는 자식에서 없애주고 부모를 수정, 삭제 해야 함. 참조가 되어 있어서.
FK 제약조건(CONSTRAINT)을 줄 때 부모가 삭제되면 자식에서도 삭제되게 걸어주기.
>> ON DELETE CASCADE
보안때문에 회사에서는 잘 사용하지 않는다고 함.
부모 테이블의 값이 있어야 자식 테이블에서 참조할 수 있다.
자식에서 참조 중인 부모의 데이터가 있다면, 부모에서 수정 및 삭제가 불가하다.
만약 자식 테이블 생성 시 FK 제약조건에 ON DELETE CASCADE 옵션을 작성해주면
부모 데이터 삭제 시, 참조중인 자식 데이터들이 자동으로 같이 삭제된다.
자식 테이블의 FK수정
**부모에 없는 값으로 수정할 수 없다.
부모 테이블에 수정할 새로운 정보를 추가한 뒤 해당 PK로 수정 가능!
'2022 > dbms' 카테고리의 다른 글
day05[MySQL] (0) | 2022.08.30 |
---|---|
day04[DCL,VIEW,JDBC] (0) | 2022.08.27 |
day03[TCL,정규화,NULL,SUB_QUERY,JOIN] (0) | 2022.08.27 |
DBeaver 22.1.5 단축키 (0) | 2022.08.25 |
day01[Oracle,DBeaver설치,RDBMS,DDL] (0) | 2022.08.23 |