database + DBMS + 연관된 application
SQL : Structured Query Language
현업에서 쓰이는 relational DBMS의 표준 언어이다.
DDL, DML, VDL의 기능을 모두 다루는 종합적인 database 언어이다.
SQL에서 relation은 중복된 tuple을 허용한다. (multiset of tuples)
SQL relation 용어
[ SQL <-> relational data model ]
- table <-> relation
- column <-> attribute
- row <-> tuple
- domain <-> domain
data model
은 DB 구조를 추상화해서 표현할 수 있는 수단을 제공한다.data models 분류
- conceptual (high-level) data models
- logical (representational) data models
- physical (low - level) data models
개발자가 아닌 일반 사용자들도 쉽게 이해할 수 있는 개념들로 이뤄진 모델이다.
추상화 수준이 가장 높기 때문에, 비즈니스 요구사항을 추상화하여 기술할 때 사용한다.
이해하기 어렵지 않으면서 디테일하게 DB를 구조화 할 수 있는 개념들을 제공한다.
데이터가 컴퓨터에 저장될 때의 구조와 크게 다르지 않게 DB 구조화를 가능하게 한다.
특정 DBMS나 storage에 종속되지 않는 수준에서 DB를 구조화 할 수 있는 모델이다.
relational data model
을 가장 많이 사용된다. ( 테이블 형식 )컴퓨터에 데이터가 어떻게 파일형태로 저장되는지를 기술할수 있는 수단을 제공한다.
데이터가 실제로 저장장치에 저장되는 것과 밀접하게 모델링 할 수 있다. (index 등)
Member 객체의 정보가 담긴 테이블이다.
relation
: 하나의 테이블을 relation이라고 한다.relation name
: 테이블 명 (Member)attribute
: 속성 (memberId, name, loginId, password)tuple
: 하나의 객체 (테이블에서 하나의 row)( tuple들의 집합을 relation 또는 relation state
라고 부르기도 한다. )
MEMBER(memberId, name, loginId, password)
MEMBER(memberId, name, loginId, password)
-> degree 4relational data model
에 기반하여 구조화된 DB를 말한다.ex) {memberId, name, loginId, password}
, {memberId, name}
, {memberId, password}
등
만약 Id가 중복이 안된다고 가정하면,
이름은 동명이인이 있을 수 있고, pw도 다른 member와 같을 수 있기 때문에
{name, password}
는super key
가 아니다.
ex) {loginId, password}
, {name, loginId}
, {name, loginId,password}
등
-> 세가지 모두 loginId
제거시 tuple을 식별할 수 없다.
위에서
{name, password}
는 superkey가 아니라고 했으니,
{memberId, name, password}
는candidate key
가 아니다.
만약, member의 loginId를 참조하는 다른 relation이 있다면,
그 relation에서 loginId는 foreigh key 이다.
relational database의 relation들이 항상 지켜줘야 하는 제약 사항
relational data model 자체가 가지는 constraints 이다.
DDL을 통해 schemad에 직접 명시할 수 있는 constraints이다.
name이라는 attribute에 특수문자가 들어갈 수 없으므로, name에 "kim!^^"
와 같은 값은 들어갈 수 없다.
또, 사람의 나이를 나타내는 age
라는 attribute가 있는데, 여기에 500은 들어갈 수 없다.
NOT NULL
로 명시됐다면 null 값을 가질 수 없다.foreign key
와 primary key
의 도메인이 같아야 한다.primary key
에 없는 values를 foreign key
가 값으로 가질 수 없다.(참고)
쉬운코드
데이터베이스 강의
https://www.inflearn.com/course/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0/dashboard