출처 : medium.com/omarelgabrys-blog/database-fundamentals-part-2-b841032243ac
데이터베이스 및 테이블
데이터베이스
- 데이터베이스는 모음 또는 테이블 집합이다. 각 테이블에는 하나의 특정 정보에 대한 형식화 된 반복 데이터 목록이 있다. 예를 들어 고객, 학생, 주문, 제품 등에 대한 테이블이다. 시각적으로 종종 엑셀 시트처럼 표시된다.
DB(학생테이블, 고객테이블, ....) : 출처 내머리
테이블
- 테이블은 데이터베이스의 가장 기본적인 '건물(틀)'이다. 데이터를 입력하고 데이터 유형을 정의하고 다른 테이블과의 관계를 정의하는 곳이다. 행과 열로 구성된다.
(고객 테이블[id, name, ....], 학생 테이블, ...) : 출처 내머리
테이블 대신 "엔티티:개체"라는 용어를 들을 수 있지만 간단하게 테이블을 사용한다.
- Entity (개체), table...
행 및 열
- 각 테이블 내에서 모든 행(학생 1에대한 인스턴스)은 한 명의 학생, 고객, 주문 또는 직원을 나타낸다. 그러나 이러한 각 행은 자유 형식이 아니다. 이 데이터에 구조를 적용해야 한다.
- 따라서 모든 행의 구성을 말해야 하며 해당 테이블의 열(속성 : 이름, 나이, 번호 등등)을 정의해 이를 수행한다. 그리고 각 열은 하나의 데이터를 설명한다. 그것은 그것에게 주는 이름과 같은 이름, 아이디, 이메일, 생년월일 및 유형, 그리고 각 속성에 맞는 텍스트 또는 날짜 및 숫자......
- 이제 모든 행은 동일한 형식에 따라 동일한 구조를 따라야한다. 열이 설정되는 방식에서 벗어날 수 없다. (각 속성의 유형과 뜻에 맞게 기입하라는 얘기임. 예를들어 이름속성에 번호가 들어가면 안되듯이...) 그리고 이러한 열을 정의함으로써 우리는 데이터에 규칙을 적용하고 있으며 DBMS는 이를 깨뜨리지 않도록 한다.
간단히 말해 열은 테이블에 있어야하는 데이터를 정의하는 반면 행은 검색, 삽입, 업데이트 및 삭제하려는 실제 값(인스턴스)을 보유한다.
- 행은 튜플(Tuple)이라고도 하며 열은 속성(Attribute)라고 한다.
다음 주제로 이동하기 전 열에 대해 언급해야할 사항 (3가지 유형 열)
1. Simple(단순, 단일)
- 단일 값
2. Composite(합성, 복합)
- 다른 값으로 구성된 값이다. 예를 들어 이름, 중간 이름 및 성으로 구성된 이름이 있을 수 있다.
- 복합속성이라고함, 별도의 단순 속성으로 분해됨.
3. Mulit-valued(다중 속성)
- 단일 열에 대한 여러 값, 예를 들어 자동차의 색상은 검정색과 빨간색일 수 있다.
- 다중 값 속성은 다른 테이블에서 추출된다. 이 내용은 나중에 데이터베이스 매핑에서 설명한다.
기본 키 (Primary Key)
- 이제 긴 행 목록이 있는 경우 각 행을 고유하게 식별하는 항목이 있어야하며 이를 "기본 키(Primary Key, PK)"라고 한다. 기본 키는 각 행에 대한 고유 한 값의 열이다.
- 동일한 이름을 가진 학생이 한 명 이상있을 수 있지만 동일한 기본 키를 가진 학생은 한 명 이상일 수 없다. 중복 값을 삽입하려고 하면 DBMS에서 허용하지 않는다.
(예를 들어 이름속성에 중복된 이름을 가진 튜플은 있을 수 있지만 동일한 주민번호를 가질 수는 없다라고 생각하면 된다.)
일반적으로 정수 값의 "id"라는 기본 키 열이 표시됨
- 기본 키는 자연적으로 존재하거나 DBMS에 의해 생성된다. 예를 들어 기본적으로 모든 고객은 회사에서 할당 한 고유한 SSN을 가지고 있따. 따라서 SSN은 모든 고객을 고유하게 식별한다.
- 그러나 일부 제품에 대한 정보가 테이블에 있을 수 있으며 본질적으로 ID가 없다. 따라서 DBMS에 제품ID와 같은 새로운 고유 열을 생성하도록 요청하고 이를 "자동 증가(auto-increment)"로 표시할 수 있다.
자동 증가열을 사용하면 새 레코드(튜플, 인스턴스, 행)가 테이블에 삽입 될 때 새 레코드마다 값을 1씩 증가시켜 고유 번호를 생성 할 수 있따.
기본 키는 행을 고유하게 식별 할 뿐만 아니라 테이블을 연결하고 관계를 형성하는데도 사용하는데 매우 중요하다.
일대 다 관계( 1 : N )
- 대부분의 테이블은 자연스럽게 연결되어 있으므로 테이블간에 관계가 있어야한다. 존재하지 않는 관계를 만들려고하는 것이 아니라 이미 존재하는 것을 설명할거다.
- 일대 다 관계의 예는 고객이 둘 이상의 주문을 할 수 있지만 주문은 한 명의 고객만 할 수 있다. 두 명 이상의 고객이 주문한 상품은 있을 수 없다.
- 고객의 정보는 테이블에 있고 주문 정보는 다른 테이블에도 있지만 관계가 있다. 그래서 " 일대 다 관계를 어떻게 정의하냐 ?"
- 테이블 간 연결에 기본키(PrimaryKey, PK)가 사용된다는 말을 기억하자. 따라서 여기서는 "외래 키(ForeignKey, FK)"라는 주문 테이블(다[N] 측면에 새 열을 추가한다. 이 열에는 고객의 기본 키 값이 있다.
- 고객이 둘 이상의 주문을 할 수 있기 때문에 외래 키 열의 값이 중복 될 수 있따. 그리고 고객은 하나 이상의 주문을 가질 수 있다.
- 이 관계를 정의하는 이점은 다음과 같은 몇 가지 질문을 할 수 있다는 것이다. "이름이 Smith인 고객의 주문은 무엇이냐" 또는 반대로 "ID 1012를 주문한 고객을 누구냐 ?"
다대 다 관계(N:M)
- 테이블간에 일대 다 관계를 많이 사용하게 된다. 그러나 테이블을 함께 연결하는 또 다른 방법이 있다. 학생이 있고 각 학생이 하나 이상의 과정에 등록 할 수 있고 동시에 각 과정에 한 명 이상의 학생이 등록 할 수 있다면 어떨까?
- 따라서 더 이상 일대 다가 아니며 양쪽에서 많이 발생한다. 그리고 평소와 같이 기본 키는 테이블을 연결하는 방법이다. 그러나 이번에는 새 테이블을 생성한다. 일반적으로 "접합" 또는 "연결" 테이블이라고 한다.
- 이 테이블은 두 테이블을 연결하기 위해서만 존재하며, 두 개의 외래 키가 있다. 하나는 학생 테이블의 기본 키를 가리키고 두 번째는 코스 테이블의 기본 키를 가리킨다.
- 그리고 두 개의 외래 키가 함께 새 테이블의 기본 키를 형성한다.
- 이제 이 관계를 사용하여 특정 학생의 과정을 알거나 다른 방식으로 특정 과정에 등록한 학생을 얻을 수 있다.
공식적으로 세 번째 종류의 일대일 관계가 가능하지만 일반적이지 않다.
생각해 보면 한 테이블의 한 행이 하나의 행과 다른 테이블을 가리키고 있다면 해당 테이블을 결합하여 두 위치에서 하나의 행이 되도록하는 것이 좋다. 이 내용은 나중에 데이터베이스 매핑에서 설명한다.
- 이러한 유형의 관계(1:N, N:M, 1:1)를 일반적으로 "카디널리티(릴레이션 안의 튜플의 개수) 제약"라고 한다. 테이블 간의 최대 참여를 지정하는 제한이다.
( 카디널리티란 ? : itholic.github.io/database-cardinality/)
- " 존재 종속성 제약 : Existence Dependency Constraint" ("참여 제약 : Participation Constraint"이라고도 함)과 같은 다른 제약이 있다. 최소 참여를 지정한다. 0(선택적 참여) 또는 하나 이상(필수 참여)
관계는 직원이 부서에서 일한다고 말할 때이지만, 제약은 한 직원이 여러 부서에서 일할 수 있다는 것임.
SQL (구조적 쿼리 언어 : Structured Query Language)
- 데이터를 생성(Create), 읽기(Read), 수정(Update), 삭제(Delete) 하고 데이터베이스 자체를 정의하는 데 사용되는 언어이다. (CRUD 라는 약어에 속한다)
- 프로그래밍 언어가 아니라 선언적 쿼리 언어로 간주된다. 원하는것을 말하고 DBMS가 실제로 수행되는 방식을 처리하도록 하면 된다.
- 반면에 프로그래밍 언어에서는 이를 수행하기 위한 단계를 작성해야 한다. 루프도 있고 이것이 필요한 데이터인지 확인한다.
- 이제 이후 튜토리얼에서 SQL을 다룰 거다 구문은 이해하기 매우 쉽지만 기본적인 SQL 지식이 있어야 DBMS를 하기 쉬울거다
마무리
- 우리는 관계형 데이터베이스의 기본 기초를 다룼다. 이제 우리는 이것을 더 나아가 실제 데이터베이스를 만드는 데 필요한 단계를 살펴볼 것이다. 다음은 "데이터베이스 설계 프로세스" 이다.
'자바과정 > DB(Oracle)' 카테고리의 다른 글
DB를 활용한 회원가입/로그인 (JDBC, 오라클, MVC 1패턴) (0) | 2021.03.16 |
---|---|
JDBC 연결 테스트 (0) | 2021.03.15 |
데이터베이스란? 1부 (0) | 2021.03.14 |
SQL 조건문 (0) | 2021.03.12 |
SQL 기본 정리 (0) | 2021.03.12 |
댓글