DB는 일정한 규칙을 통해 구조화되어 저장되는 데이터의 모음
DBMS : MySql처럼 DB를 제어하는 통합 시스템
즉, 응용 프로그르램 아래에 DBMS가 있고, DBMS가 DB를 관리한다.
사람, 장소, 물건, 사건, 개념 등 여러 속성을 지닌 명사
엔티티 : 회원
속성 : 이름, 아이디, 주소, 전화번호, 키..
속성은 엔티티를 구성하지만, 서비스에 요구 사항에 따라 속성은 사라질 수 있다.
예를 들어 서울사는 남자를 모아달라는 서비스인데 전화번호, 키는 쓸모없는 속성이기 때문에 해당 엔티티에선 사라진다.
엔티티는 강한엔티티, 약한엔티티로 구분된다.
강한 엔티티 : 건물
약한 엔티티 : 방
딱 보면 건물은 그 자체로 존재하지만, 방은 건물이 없으면 존재할 수 없는 거처럼 강한 엔티티는 스스로 존재유지가 가능하고, 약한 엔티니는 불가능하다.
데이터베이스에서 정보를 구분하여 저장하는 기본 단위
DB는 Entity에 관한 데이터를 1개의 릴레이션에 담아서 관리한다.
우리가 아는 테이블이 릴레이션이며 NoSql에서는 컬렉션이라고 불리는 그것이 바로 릴레이션이다.
즉, 엔티티가 DB에서 관리되기 위해서 릴레이션이 되는데, DBMS에 따라 그 이름이 다르다는 것.
컬럼이 이름, 전화번호면 김창민, 010-0000-0000이 레코드이고, 레코드들이 보여서 테이블이 되고, 테이블이 모여서 DB가 된다.
릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
위에서 말했듯 엔티티의 속성이다.
엔티티 : 차
속성 : 차 번호, 바퀴 수, 차종, 색상..
릴레이션에 포함된 각 속성들이 가질 수 있는 값의 집합
뭔말이냐면,
속성 : 성별
도메인 : 남,여
컬럼명 : 필드, 레코드 : 튜플 (인스턴스 라고 생각하셈)
자세한건 SQL에서..
여러 테이블 간 관계
관계에는 3가지 종류가 있다
사람과 주민번호가 1:1 관계이다.
한 사람은 한개의 유효한 주민번호를 갖고, 한개의 유효한 주민번호는 딱 한사람만 가르킨다.
포스트와 댓글이 1:N 관계이다
한개의 포스트에 여러 댓글(0개 이상)이 달리고, 여러 댓글은 한 포스트에 속해있기 때문
사람과 온라인 게임이 N:M 관계이다.
사람은 여러 종류의 게임을 할 수 있고, 각 게임은 또 여러명의 유저를 감당할 수 있다.
이 경우 N:M이다.
이때 1:1, 1:N은 모두 두 테이블만을 이용해서 관계를 표현할 수 있지만, N:M의 경우만 중간에 사람_게임 테이블을 생성해서 사람과 1:N, 게임과 1:M 관계를 맺고 간접적으로 연결해야 한다.
테이블 간 관계를 보다 명확하게 하고, 테이블 자체의 인덱스가 된다.
유일성만 있는 키다.
기본키가 될 수 있으며, 기본키처럼 유일성, 최소싱이 있다.
후보키가 2개 이상이면 하나는 기본키, 나머지는 대체키가 된다.
즉, 후보키 안에 기본키, 대체키가 있는 것.
FK, Foreign Key라고 불리는 이 키는 다른 테이블의 기본키를 참조하는 값이다.
이를 통해 다른 개체와의 관계를 식별 할 수 있다.
다만, 외래키는 중복될 수 있다.
만약 학생1의 학번이 1111이면 해당 학생 테이블엔 학번이 1111가 기본키지만, 전공과목들 수강신청 테이블에 학생1이 4과목에 수강신청하면 1111가 4개가 존재하기 때문
PK, Primary Key로 불리는 기본키는 유일성과 최소성을 만족한다.
동일 테이블간 중복되는 값이 없고, 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성만 지녀야 한다.
키를 {id, name}처럼 두 개의 속성을 이용할 수 있지만, 기본키는 그래선 안된다.
한국 사람들의 주민 번호처럼 동일 명, 동일 주소, 성별 처럼 중복 가능성이 있는 속성을 다 제외하고 중복 가능성이 없는 속성이 덩그러니 남는다면 그건 자연키다.
가장 많이 사용하는 기본키이다. auto increment등 그냥 1, 2, 3.. 처럼 index 부여하듯 생성하는 키다.