개체(Entity)
-사람이 생각하는 개념, 정보와 같은 현실 세계의 대상입니다.
-개체와 개체 타입으로 분류할 수 있다.
-개체: 업무에 필요한 유용한 정보를 저장하고 관리하기 위해 영속적으로 존재하는 단위
-개체들의 집합 -> 개체 타입이다.
예)
이혜영 강사, 최대한 강사, 임하라 강사 --> 강사
속성(Attribute)
-데이터의 가장 작은 단위
-개체에서 관리하고자 하는 더 이상 나눠지지 않는 최소 데이터 단위
-개체가 가지는 동일한 성격, 특징 파악.
예시)
이혜영 학생, 임하라 학생, 최대한 학생 ---> 학생
학생: 학번, 이름, 주소, 연락처, 전공, 학년
3.관계
-개체 간 관계 또는 속성 간 논리적 연결
-개체와 개체가 맺고 있는 의미 있는 연관성
예시)
고객-상품: 구매 --> 고객 개채와 상품 개채는 구매라는 관계가 있다.
관계 종류(다음 주 데이터베이스 설계 시간에 진행)
1:1
1:n
n:m
직사각형: 개체
타원: 속성
마름모: 관계
직선: 링크(개체와 속성을 연결)
=================================================================
데이터베이스의 구성
1) 데이터베이스 스키마
-데이터베이스의 전체 구조
-데이터베이스를 구성하는 릴레이션 스키마의 모음
*스키마(Schema)
-릴레이션이 어떻게 구성되는지, 어떤 정보를 담고 있는지 기본적인 구조를 정의한다.
-테이블의 속성와 자료 타입에 대한 정보를 가지고 있다.
2) 데이터베이스 인스턴스
-데이터베이스를 구성하는 릴레이션 인스턴스의 모음.
*인스턴스: 스키마를 정의하고, 정의한 스키마에 따라서 실제로 테이블에 저장되는 데이터의 집합.
3)릴레이션
릴레이션:학생
애트리뷰트:학번, 이름, 주소, 연락처
Degree:애트리뷰트(속성)의 수
식별자(키):학번
튜플: 속성이 쌓이는 데이터(Row, 레코드)
카디널리티(cardinality) : 튜플의 수
Domain:릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합.
예) 성별 -남, 여, 학년 - 1 ~4
3-1) 릴레이션의 특징
-릴레이션은 중복된 튜플을 가질 수 없다.
-릴레이션은 튜플을 식별하기 위해 KEY를 설정하여 유니크하게 식별 가능하다.
-릴레이션에서 튜플의 순서는 중요하지 않다. - 정렬 기준이 다양하기 때문에
-하나의 릴레이션에서 애트리뷰트의 이름은 중복될 수 없다.
-하나의 릴레이션에서 애트리뷰트의 순서는 중요하지 않다.
원자값(Atomic)을 가져야한다.
4)도메인 정의하기
하나의 애트리뷰트(속성)가 가질 수 있는 같은 타입의 원자값의 집합
애트리뷰트:하나의 릴레이션에서 맡은 역할에 대한 이름을 부여하는 것.
만약, 동일한 도메인 이름이라면, 릴레이션에 표기할 때,
연락처 ->phone_num
비상 연락처 -> emer_num
튜플은 각 애트리뷰트의 값으로 이루어진 행(row, list)이며, 값이 Null일 수 있다. 단,
주소 입력 시, 필수 입력 값이 아니라면 Null 허용. NOT NULL이면 NULL값 작성 불가능.
애트리뷰트 리스트 작성 방법
테이블_이름(속성)
->학생(학번,이름, 주소, 연락처, 비상연락처)
NULL 의미
-값이 존재하지 않는다.
-값은 존재하는데, 아직 그 값을 알지 못한다.
1.KEY
키는 릴레이션에서 튜플들을 유일하게 구별하는 속성 또는 속성들의 집합을 의미한다.
데이터베이스에서 조건을 만족하는 튜플을 찾거나, 순서대로 정렬할때, 튜플을 서로 구분할 수 있는 기준이 되는 애트리뷰트를 말한다.
종류
기본 키(Primary Key)
-후보키들 중에서 기본적으로 사용하기 위해 선택한 키
-중복된 값을 가질 수 없다.
-하나의 릴레이션에서 특정 튜플을 구별할 수 있는 유일한 속성
후보 키(Candidate Key)
-릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별할 수 있는 키 즉, 기본 키로 사용할 수 있는 속성들.
-유일성 +최소성을 동시에 만족하는 속성 또는 속성들의 집합.
대체 키(Alternate Key)
-후보키가 둘 이상일때, 기본 키로 선택되지 못한 후보 키를 대체 키라고 한다.
슈퍼 키(Super Key)
-유일성을 만족하는 속성 또는 속성들의 집합. 최소성을 만족하지 않는다.
외래 키(foriegn Key)
-다른 릴레이션의 기본 키를 참조하는 속성 또는 속성들의 집합.
-참조 되는 릴레이션의 기본 키와 대응되어 릴레이션 간 참조관계를 표현하는 중요한 도구.
key의 개념
슈퍼 키
-릴레이션에서 튜플을 유니크하게 식별할 수 있는 하나 또는 속성들의 집합
-릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 않는다.
학생(학번, 이름, 주소, 연락처, 주민번호)
(학번)(주민번호)(학번+이름)(이름+주민번호)(이름+연락처)(학번,이름,주소,연락처,주민번호)
후보 키
-기본 키로 사용할 수 있는 속성들의 최소 집합.
-유일성: 하나의 키 값으로 하나의 튜플만 유일하게 식별해야 한다.
-최소성: 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성해야 한다.
(학번)(주민)(학번+주민번호)
기본 키
-후보 키에서 선정된 키
-하나의 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성
-NULL값을 가질 수 없다.
대체 키
-PK가 아닌 후보키
-후보 키가 둘 이상일때, 기본 키로 선택 받지 못한 나머지 후보 키
(학번, 주민번호) --> 학번 PK, 주민번호(대체 키)
외래 키
-다른 릴레이션의 기본 키를 참조하는 속성
-다른 릴레이션의 기본 키를 참조하여 테이블 간 관계를 표현한다.
====================================
RDBMS 제약 조건
제약 조건
-RDBMS에서 릴레이션들이 항상 지켜야 하는 사항
1)Implicit constraints(내포, 포함된 제약 조건)
-릴레이션 자체가 가지고 있는 제약 조건
-릴레이션은 중복된 튜플을 가질 수 없다.
-릴레이션은 같은 이름의 애트리뷰트를 가질 수 없다.
2)무결성 제약 조건(integrity)
무결성: 데이터의 결함이 없는 상태.
일관성과 정확성을 가지고 구축된 데이터베이스가 계속해서 무결성을 유지하려면, 데이터의 삽입, 삭제, 수정 시, 데이터의 제약 조건 준수 여부를 확인해야 한다.
종류
1)도메인 무결성 제약 조건
-애트리뷰트의 값은 정의된 도메인에 속한 값이어야한다.
예) 학생R -> 학년 1~4까지, 20X
-NOT NULL이 아닐경우, null 값은 허용한다.
2)개체 무결성 제약 조건(Entity)
-기본 키 제약이라고 한다.
-기본 키를 구성하는 속성은 중복 값을 가질 수 없고, NULL값을 가질 수 없다.
왜?
유니크하게 식별 불가능.
3)참조 무결성 제약 조건
-외래 키의 값은 NULL이거나, 참조 릴레이션의 기본 키값과 동일해야한다.
단, NULL을 입력하려면, NULL 허용일 경우 ->(Null value constraint)
-외래 키는 참조하고 있는 테이블의 기본 키에 없는 값을 외래 키로 가질 수 없다.
4)key constraints
- 서로 다른 튜플들은 같은 값의 키를 가질 수 없다.
5)Null value constraint
-애트리뷰트가 NOT NULL이라고 명시되어 있다면, NULL값을 가질 수 없다.
============================================================================
6) Check 제약 조건(*MySQL 8.0.16)
-애트리뷰트에 들어갈 수 있는 값을 제한한다.
-숫자 비교, 문자 비교 가능.
-입력되는 값이 check조건과 맞지 않으면, 에러가 발생한다.
-구문:컬럼명 데이터 타입 Check(컬럼명 조건)
예) -회원테이블 생성
출생년도를 제한하고 싶어요
birth_year INT CHECK(birth_year >= 1950 AND birth_year <= 2020)
나이 제한하기
age INT CHECK(age >=20)
==================================================
간단한 문제
1.goods table에서 전체 상품의 판매 가격 합을 구하여 조회하시오.
2. goods table에서 판매자 별 상품 가격 합계와 판매자 아이디를 조회하시오.
3.goods table에서 판매자 별 상품 가격 합계가 300만원 초과인 판매자 아이디와 판매 금액을 조회하시오.
4. order table에서 최대 구매 수량, 최소 구매 수량, 총 구매 수량을 조회하시오.
===============================
JOIN
-두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만드는것
-JOIN은 관련있는 두 개 이상의 테이블을 결합하여 여러 테이블에 나눠져 있는 데이터들을 한번에 가져오기 위한 방법
종류
INNER JOIN
OUTER JOIN
CROSS JOIN
NATURAL JOIN
SELF JOIN
두 테이블을 JOIN하려면, 테이블이 1:n관계로 연결되어야 한다.
->기본 키와 외래 키 관계로 연결되어있어야 한다.
INNER JOIN
->교집합
-두 테이블이 공통적으로 가지고 있는 값.
구문
SELECT
*
FROM
table_a AS a
INNER JOIN
table_b AS b
ON
a.key=b.key;
WHERE
조건
*ON : 작성하지 않으면, 데이터 섞여버림.(규칙 없이! 그래서 꼭 해줘야함)
기준 컬럼을 잡고, 조회해야함 꼭
OUTER JOIN
-LEFT OUTER JOIN, RIGHT OUTER JOIN(OUTER 생략가능)
LEFT OUTER JOIN: 왼쪽 테이블을 기준으로 정렬하겠다.
RIGHT OUTER JOIN: 오른쪽 테이블 기준을 정렬하겠다.
B
Left
A
CROSS JOIN
-두 테이블의 곱집합
-A 테이블에 행이 10개, B테이블에 12개가 있다. 120개 출력
SELF JOIN
-계층형 구조
===========================================================
1. country table의 continent 컬럼이 Europe인 모든 도시의 이름과 continent를 조회하시오.
1)테이블 확인(erd) -> 연관 관계
**조회할 컬럼명 작성 시, 두 테이블에 전부 동일한 이름의 컬럼이 존재한다면, 명확하게 테이블명 작성 후, 컬럼 이름을 작성해준다.
2. continent 컬럼이 Asia에 속해있는 city의 인구 수를 더한 값을 조회하시오.
'코딩 국비수업들으며 느끼는점' 카테고리의 다른 글
서브쿼리:delimiter/procedure/선언(declare)/호출(CALL) (0) | 2023.05.30 |
---|---|
서브쿼리 (2) | 2023.05.29 |
데이터 모델링/MySQL 변수 (0) | 2023.05.15 |
데이터베이스의 구축 : 종류 (0) | 2023.05.09 |
데이터베이스의 구축 절차 (0) | 2023.05.08 |