728x90
반응형

https://youtu.be/WH44EjWt9LU?si=5kFHgFxZFg6L9h27

1. 데이터베이스 설계

1-1. 데이터베이스 개요
- 데이터베이스는 데이터의 체계적 집합으로, 여러 사용자와 응용 프로그램이 데이터를 공유하고 통합하여 저장하고 운영하는 시스템임
- 실시간 접근, 지속적 변화, 공유, 논리적 독립성 등의 특징을 가짐
- 중복과 무결성을 최소화하고, 효율성을 높일 수 있음
- 많은 기능과 비용이 소모되며, 전문가의 별도적인 관리가 필요함
- (중요) 데이터 무결성은 데이터베이스 설계에서 매우 중요한 개념임

1-2. 스키마
- 스키마는 데이터베이스의 자료 구조, 제약 조건, 관계 등을 정의한 것으로, 사용자와 관리자 모두에게 필요한 정보임
- 외부 스키마는 사용자의 선택에 따라 다양한 데이터베이스 구조를 정의함
- 개념 스키마는 조직의 데이터베이스 구조를 정의하며, 사용자와 관리자 모두에게 데이터베이스를 제공함
- 내부 스키마는 물리적 저장 장치의 데이터 저장 방법과 구조를 정의함

1-3. 데이터베이스 관리 시스템
- 데이터베이스 관리 시스템(DBMS)은 사용자와 데이터베이스 사이의 데이터 저장, 분석을 돕는 시스템임
- DBMS의 구성 요소에는 쿼리(질의어), 쿼리 프로세스, 분석 메타데이터, 관계, 저장장치 등이 있음
- DBMS의 쿼리 처리 기능은 질의어를 처리하는 것에서 시작함
- 질의어 처리를 통해 사용자와 데이터베이스 간의 상호작용을 지원함
- 쿼리 프로세스는 질의어를 처리하는 동작을 반복적으로 수행함

2. 데이터베이스 관리 시스템과 관계형 데이터베이스

2-1. 데이터베이스 관리 시스템의 역할과 구성 요소
- 데이터베이스 관리 시스템(DBMS)는 데이터베이스를 관리하고 서비스 제공함
- DBMS의 주요 구성 요소로는 데이터베이스 관리자, 데이터베이스 처리기, DBMS의 필수 기능 등이 있음
- (중요) 데이터베이스 관리자는 데이터베이스의 전반적인 동작을 관리하고, 데이터를 처리하며, 필요한 관리 작업을 수행함
- DBMS의 필수 기능으로는 정의, 조작, 제어 기능이 있음

2-2. 관계형 데이터베이스의 특징과 활용
- 관계형 데이터베이스는 데이터를 테이블 형태로 모델링하여 관리함
- 이 방식은 데이터의 변환에 적응력이 높고, 유지보수의 생산성이 향상됨
- 관계형 데이터베이스는 비비 시스템이나 네트워크 형태의 데이터 관리에 적합함
- (중요) 하지만, 관계형 데이터베이스는 데이터 종속성이나 복잡한 데이터 구조를 해결하지 못함

2-3. 개체 타입과 속성에 대한 이해
- 개체 타입은 현실 세계의 개념이나 대상을 데이터베이스로 표현하는 논리적 표현 단위임
- 속성은 개체를 구성하는 고유의 특성을 말하며, 속성 값은 개체를 구성하는 속성에 의해 결정됨
- (중요) 속성 값은 시스템에서 필드로 간주되며, 각 속성은 특정한 값을 가질 수 있음
- 속성과 속성 값은 데이터의 변환과 관계를 이해하는데 중요한 역할을 함

3. 데이터 모델링

3-1. 데이터 모델의 구조 이해
- 데이터 시스템에서 필드와 도메인, 튜플의 개념을 소개함
- 필드는 데이터의 유일한 값으로, 속성과 속성값으로 나뉨
- (중요) 속성은 데이터를 구분하는 기준이 되며, 속성값은 데이터의 값으로, 해당 범위 내 있어야 함
- 데이터 타입은 데이터의 입력 제한을 두는 것임
- 튜플은 하나의 개체를 표현하는 완전하고 고유한 정보 단위임

3-2. 릴레이션 스키마와 인스턴스
- 릴레이션 스키마는 속성명을 나열한 것임
- 릴레이션 인스턴스는 속성에 해당하는 속성 값들을 가진 새로운 개체임
- 릴레이션 인스턴스를 통해 데이터의 입력 제한을 구현할 수 있음
- 데이터의 제한을 잘 이해해야 함
- 표의 기본 구조와 유사함

3-3. 속성과 튜플
- 차수는 속성의 개수, 기수는 튜플의 개수를 의미함
- 전체 튜플의 개수는 행의 개수와 같음
- 튜플은 하나의 행으로 볼 수 있으며, 여러 개가 모여 생성됨
- 데이터 모델링 시 이러한 이해가 중요함

4. 릴레이션과 키

4-1. 튜플의 속성과 개수
- 튜플의 속성은 '열', '행'으로 나누어 각각 개수와 행을 기억함
- '열'은 튜플의 개수, '행'은 튜플의 행을 의미함
- 열과 행의 개수를 기억해 두면 튜플의 개수를 암기하는 데 도움이 됨
- (중요) '열'과 '행'의 개수를 기억하는 것이 중요함
- 열과 행의 개수를 암기하면 튜플의 개수를 찾는 문제를 풀 수 있음

4-2. 키의 종류와 개념
- 키는 튜플을 유일하게 구별할 수 있는 속성임
- 키의 종류에는 기본키, 대체키, 슈퍼키, 외래키가 있음
- 후보키는 유일성과 최소성을 만족하는 속성 중 하나임
- 후보키를 모두 사용할 필요는 없음
- 기본키는 후보키 중 튜플의 식별을 위해 지정된 속성임

4-3. 키와 관련 개념
- 슈퍼키는 유일성만 만족하는 속성이고, 대체키는 중복을 가리지 않고 식별할 수 있는 속성임
- 외래키는 다른 릴레이션의 기본키를 참조하는 속성임
- (중요) 외래키는 기본키를 가져다 쓰지만, 외래키 자체가 키의 속성을 만족하지 않을 수도 있음
- 키는 데이터를 분류, 정렬, 검색할 때 기준이 됨
- 키의 개념을 이해하면 데이터를 더 쉽게 이해할 수 있음

00:01
3과목 첫 번째 장입니다. 논리 데이터베이스 설계 챕터인데요. 비중이 굉장히 높은 편에 속하기 때문에 조금은 집중적으로 공부를 하실 필요가 있는 부분입니다. 최대한 쉽게 설명을 하려고 노력을 한번 해볼게요 같이 한번 보도록 하죠. 첫 번째 섹션은 데이터베이스 기본입니다. 데이터베이스가 뭔지부터 설명이 되어있죠. 데이터베이스는 데이터의 체계적인 집합이라고 되어 있습니다. 막 갖다 쑤셔 넣는 게 아니라 체계적으로 정리가 되어 있단 뜻이죠. 문장에 써 있죠. 여러 사용자 응용 프로그램이 데이터를 공유하여 사용할 수 있도록 데이터를 통합해서 저장하고 운영하는 데이터 관리 시스템 이걸 데이터베이스 시스템이라고 이야기한다라고 되어 있고요. 제가 지금 동그라미 친 공유 통합 저장 운영에 해당하는 요소를 간단하게 설명을 해놨습니다. 어려운 개념은 아니니까 보고 넘어가시면 될 것 같고요.

00:58
다음으로, 시스템의 특징 나와 있습니다. 데이터베이스 시스템의 특징은 실시간으로 접근할 수 있어야 되고 그다음에 계속적인 지속적인 변화 진화 등을 통해서 최신 상태를 유지해야 되고요. 동시에 공유가 가능해야 되고 그다음에 이거 조금 어려울 수 있어요. 데이터의 위치로 접근하는 게 아니라 요구하는 데이터 내용에 따라 데이터를 건드리거나 뽑아올 수 있어요. 마지막으로, 데이터의 논리적 독립성이라고 되어 있습니다. 응용 프로그램과 데이터베이스가 서로 분리되어 있어서 데이터의 논리적 구조 변경을 해도 응용 프로그램은 변경할 필요가 없다. 이러한 특징들이 있다는 거고요. 이러한 특징들을 통해서 데이터베이스는 중복을 최소화할 수 있고 무결성 보안성 안정성 효율성 이런 것들을 유지할 수가 있다라고 되어 있는 거고, 많은 기능이 있는 만큼 당연히 구조가 복잡해질 거구요. 많은 비용이 소모됩니다. 그래서 전문가가 별도로 필요해요.

01:56
제가 요 정도 볼 수 있는데, 제가 비밀 노트에도 적어 놓은 것처럼 모든 데이터베이스의 핵심은 무결성입니다. 데이터 무결성 이 무결성의 개념이 계속 언급이 될 거예요. 이 개념을 폭넓게 이해하고 있어야 됩니다. 이 무결성 하나 가지고 데이터베이스를 꾸려 나간다고 생각을 하시면 돼요. 앞으로 천천히 다뤄보도록 하겠습니다. 일단은 여기까지 마무리하고 스키마를 보도록 하죠. 스키마라는 거는 데이터베이스의 자료 구조 표현 방법 관계 등을 정의한 제약 조건이라고 되어 있어요. 왜 제약 조건이라고 하냐면 예를 들어서 어떤 표가 있다고 했을 때 이 위에 아무것도 안 써 있으면 이 밑에 어떤 데이터를 쓰든 자기 마음이죠. 근데 만약에 여기에 성별이라고 적혀 있다고 생각을 해보세요. 그러면 아무거나 적었던 방금 전과는 달리 이 공간에는 무조건 남녀 말고는 쓸 수가 없게 됩니다.

02:56
요런 걸 스키마라고 표현을 합니다. 그래서 제약 조건이라고 이야기를 해요. 어떤 느낌인지 아시겠죠. 어쨌든 그렇고요. 데이터베이스의 관리 시스템과 데이터베이스 구축 환경을 고려해서 정의할 수 있고요. 데이터 사전이라는 곳에 스키마가 저장이 된다 라고 되어 있습니다. 그리고 스키마는 관점에 따라 외부 개념 내부의 구조를 가진다 라고 되어 있어요. 여기에 그림이 나와 있는데, 그림이 뭔지 한번 보고 가죠 이렇게 되어 있습니다. 내부 스키마가 여러 개죠 그게 하나의 개념 스키마로 넘어가고요. 하나의 개념 스키마가 하나의 내부 스키마로 넘어가고 내부 스키마가 실제 데이터베이스를 건드리고 있어요. 이 개념입니다. 이거를 글로 한번 볼게요 첫 번째로, 외부 스키마입니다. 특정 사용자 입장에서 필요한 데이터베이스의 구조를 정의했다 라고 되어 있어요.

03:50
같은 데이터베이스에서도 서로 다른 관점을 정의 그래서 다양한 외부 스키마가 나올 수 있다. 사용자가 선택해서 이용할 수 있도록 한다 라고 되어 있습니다. 어떤 느낌이냐면 수많은 데이터들 중에 내가 원하는 정보만 뽑아온다고 생각하시면 돼요. 예를 들어서 학생 전교생이 저장되어 있는 데이터베이스가 있다고 생각을 해보면 거기에는 학생 정보 성적 뭐 여러 가지 특이사항이라든지. 많은 정보가 들어있겠죠. 그런데 거기서 예를 들어서 체육 선생님이에요. 그러면 이 학생들의 모든 성적이라든지. 그런 걸 다 볼 필요는 없잖아요. 그럼 예를 들어서 이 학생의 신체 조건이라든지. 이 지난 체육 점수라든지 그런 것만 뽑아보면 되겠죠. 그런데 예를 들어서 수학 선생님이면 당연히 수학 과목에 집중되는 정보만 뽑아볼 수 있겠죠. 그래서 데이터베이스는 그대로 있는데, 여러 가지 관점으로 이 데이터를 추출하거나 조회할 수 있다는 거죠. 그래서 외부 스키마는 여러 개가 있을 수 있다는 뜻이에요.

04:49
어떤 느낌인지 보셔야 돼요. 어쨌든 이 외부 스키마이터 특징은 결국에 사용자 입장에서 외부에서 이 데이터베이스를 바라보는 관점을 이야기한다. 나는 이렇게 이렇게 이렇게 여기 있는 데이터베이스를 이용할 거예요. 라는 개념이라고 보시면 돼요. 그렇고 설명이 되셨을지 모르겠네요. 그다음 개념 스키마는 모든 사용자 조직이라고 보시면 돼요. 조직의 입장에서 필요한 데이터베이스의 구조를 정의한 스키마라고 되어 있습니다. 일단 데이터베이스의 구조를 정의했다고 되어 있는데, 데이터베이스가 어떻게 생겼는지를 정의하는 거예요. 그래서 방금 말씀드렸던 학생 정보나 성적 이런 것들을 예를 들어서 하나의 테이블에 다 나타낸다든지 아니면 별도의 테이블로 따로 구분을 한다든지 이 별도의 테이블에 각각 접근 권한이라든지.

05:41
보안을 어떻게 할 거고, 무결성 아직 다 안 배웠지만 이 무결성 규칙 등도 어떻게 적용할 건지 어떤 구조와 어떤 규칙을 가지고 데이터베이스를 꾸릴 건지 이런 것들을 정하는 걸 개념 스키마라고 합니다. 당연히 이건 사용자가 정하는 게 아니라 관리자가 정해야 돼요. 그리고 당연히 데이터베이스당 하나만 존재를 해야 됩니다. 데이터베이스의 구조를 잡는 거기 때문에 구조가 여러 개 있을 필요는 없죠 그리고 마지막으로, 내부 스키마입니다. 내부 스키마는 물리적인 저장 장치의 입장에서 데이터베이스가 저장되는 방법이나 구조를 정의한다고 써 있죠. 그러니까 이거는 실제로 물리적으로 저장되는 방법 형식 이런 것들을 찾겠다는 뜻이에요. 개념 스키마 같은 경우에는 어떤 식으로 구조를 잡을지에 대한 부분인데 이건 논리적인 부분입니다. 예를 들어서 성적이라고 하면 국어 성적 다음에 영어 성적이 보이고 그다음에 수학 성적이 보이고 이렇게 하고 싶다.

06:39
분해 이렇게 하는 게 개념 스키마라고 하면 이 성적이 물리적으로 데이터 저장 장치에 어떻게 저장을 할 건지 다시요. 데이터 저장 장치에 어떻게 저장이 되는지에 대한 부분은 내부 스키마라는 거죠. 실제로 저장이 되는 부분 정도로 이해를 해주시면, 될 것 같네요. 네 이 정도 보고 넘어가도록 하겠습니다. 방금은 데이터베이스 자체를 이야기한 거고, 지금은 데이터베이스 관리 시스템이라고 되어 있죠. 사용자와 데이터베이스 사이에 데이터를 저장하고 분석하기 위해서 상호작용을 도와주는 시스템이라고 보시면 돼요. 관리 시스템이니까요? 데이터베이스를 운용하는 시스템이기 때문에 데이터베이스의 특징을 그대로 계산한다고 되어 있어요. 요거는 무슨 의미냐면 보통 데이터베이스의 특징과 데이터베이스 매니지먼트 시스템의 특징이 같다고 나와요. 그렇기 때문에 이 두 가지를 차이를 둬서 공부를 한다든지 그렇게 할 필요는 없습니다. 그렇게 보시면 될 것 같고요.

07:36
다음으로, dbms의 구성 나와 있습니다. 일반적인 데이터베이스 매니지먼트 시스템의 구조는 이런 형태예요. 그런데 구조 자체가 중요한 건 아니구요. 일반적인 형태가 이렇다는 거고, 여기에 사용되는 여러 가지 요소들의 설명 항목 이런 것들이 중요합니다. 지리어 처리기 질의어라는 걸 이제 qual이라고 하는데 이따가 배울 거예요. 영어로 쿼리 쿼리를 처리하는 거예요. 사용자가 쿼리를 입력하면 이 입력한 쿼리가 어떤 의미를 가지는지를 분석한다고 보시면 되죠. 그렇게 보시면 되고 그다음에 db 처리기는 여기 데이터베이스 처리기라고 되어 있죠. 데이터베이스가 실행되는 동안 진행되는 데이터베이스 연산을 저장 데이터 관리자의 전송을 해주는 역할을 합니다. 어려운 얘기는 아니고요. 여기 보면 또 이제 dml 컴파일러 ddl 컴파일러 나와 있는데, 아직 이게 뭔지는 안 나왔어요.

08:35
컴파일러는 근데 앞에서 잠깐 배웠죠 번역 같은 개념이에요. 그래서 여기 보면 dml 컴파일러랑 ddl 컴파일러 나와 있는데, 자 dml 명령어를 분석한다. ddl 스키마 똑같은 개념이라고 보시면 됩니다. 분석한다 라고 되어 있어요. 어쨌든 이런 것들을 분석해주는 에다라고 보시면 됩니다. 지리어 처리기 dml 컴파일러 ddl 컴파일러 이렇게 보시면 되겠죠. 그리고 저장 데이터 컬리자는 데이터베이스와 데이터 사전에 접근 관리 운영체제 파일 접근 요청 이런 것들을 해주는 에다 복합적으로 이렇게 보시면 되겠습니다. 특별하게 어려운 개념은 아니라서 단어만 봐도 대충 감이 오시죠. 처리기 컴파일러 관리자 이런 말만 들어도 어느 정도 설명이 좀 되실 거예요. 넘어가도록 할게요 세 번째 dbms의 필수 기능 필수 기능은 정의 조작 제어 기능이 있다고 되어 있죠. 중요합니다. 정의 기능은 물리적인 구조를 정의하는 역할을 하고 있고요.

09:34
조작은 데이터를 조작하는 거예요. 이런 식으로 그다음에 제어 기능은 보안과 권한 같은 조작이 아닌 다른 여러 가지 관리에 해당하는 기능들 있죠. 그걸 제어 기능이 합니다. 이 세 가지가 있다. 정도로 기억을 하고 있으시면 돼요. 자 그다음 넘어갈게요 지금 우리가 데이터베이스 관리 시스템을 본 건데 아래쪽에 보니까 두 번째 포인트로 관계형 데이터베이스라는 말이 나왔어요. 비비 시스템 유형을 먼저 좀 보죠. 가장 먼저 파일 시스템입니다. 우리가 흔히 컴퓨터 할 때 쓰는 영상 이미지 이런 것들을 다 파일이라고 이야기를 하죠. 파일 단위로 데이터를 관리하는 게 파일 시스템이에요. 일반적인 시스템이고요. 이거는 데이터베이스라고 보통 얘기 안 합니다. 그리고 두번째는 hdbms에요. h라는 것은 계층에 관련이 있는 용어입니다. 그래서 데이터를 계층화해서 관리하는 형태고요.

10:30
속도가 빠르지만 상하종속적이라서 데이터 구조를 변화하기가 굉장히 어려운 편이에요. 모든 레코드의 관계는 1대 다 이거 다라고 읽는다 그랬죠 1대 다 관계며 다대다 관계의 표현이 어렵다라고 되어 있습니다. 이것까지가 hdbms의 특징이고요. 대략 이렇게 생길 수 있다라고 판단을 해주시면, 됩니다. 자 그다음은 h가 아니라 ndbms에요. 여기서 n은 네트워크라고 되어 있죠. 네트워크는 망 형태로 관리한다는 뜻이거든요. 네트워크 형태로 상하 종속관계 해결이 가능해요. 이렇게 거꾸로 올라갈 수 있습니다. 이런 식으로 거꾸로 올라갈 수 있기 때문에 이거는 상하 관계라고 볼 수가 없어요. 근데 딱 봐도 구성이 복잡하잖아요. 데이터 종속성을 해결하지는 못합니다. 서로 어디가 어디에 영향을 받고라고 하는 이런 것들은 해결하지 못하구요. 모든 레코드의 관계를 표현할 수가 있다.

11:29
1대1부터 1대 다 대다까지 모두 표현할 수가 있다. 하지만 이게 구성이 복잡하기 때문에 데이터 종속성도 해결을 하지 못하고 해서 많이 쓰이는 경우는 아니에요. 그리고 다음으로, 돌고 돌아서 rdbm에서 나왔습니다. 이게 관계형 데이터베이스를 뜻하는 거예요. 데이터를 테이블 구조로 우리가 알고 있는 테이블 구조로 모델링을 해서 관리하는 형태의 업무 변화에 적응력이 굉장히 높고요. 그러니까 유지보수 생산성이 향상이 되겠죠. 레코드가 아닌 테이블을 기준으로 상호 간의 관계를 설정할 수가 있다. 이 레코드라든지 이런 용어는 뒤에서 자세하게 볼 겁니다. 단순하면서도 뛰어난 논리적 구조를 지원하지만 딱 봐도 우리가 평소에 쓰는 거니까요? 그쵸. 시스템의 부하가 커질 수 있다. 시스템이 뭔가 해야 되는 일이 많다 뭐 이렇게 생각하시면 되겠죠. 자 그래서 사람이 보기 편하고 배우기 편하기 때문에 시스템의 부하가 커질 수 있지만 보통은 이제 rdbms를 사용을 합니다.

12:30
그래서 우리가 공부하는 부분도 관계형 데이터베이스 관련된 부분이에요. 첫 번째로, 관계형 데이터베이스 용어의 개체 타입이라는 게 있습니다. 용어를 정말 확실하게 이해하고 넘어가셔야 돼요. 안 그러면은 이 이후의 내용들에 대해서 이해가 되는 속도가 천차만별일 거예요. 요 용어를 확실하게 이해했냐 안 했냐에 따라서 천천히 보겠습니다. 첫 번째 개체 타입 현실 세계의 개념이나 대상을 데이터베이스로 표현하고자 하는 논리적인 표현 단위라고 되어있어요. 대체 타입은 다수의 속성으로 표현된다고 되어 있습니다. 보세요. 제품이라는 놈의 속성은 색상 크기 가격 모델명 이런 것들로 표현할 수가 있어요. 그러면 이 제품이라는 애가 개체 타입이 되는 거예요.

13:29
일단 여기까지고요. 계속해서 볼게요 개체 타입은 관계형 데이터베이스에서 릴레이션에 해당하며 릴레이션의 표예요. 표에 해당하며 테이블 형태로 표현된다. 바로 나오죠. 개체 개체 타입은 뭐고 개체는 뭐냐 개체 개체 타입의 규칙을 통해서 생성된 대상으로 파일 시스템의 레코드와 대응된다라고 되어 있어요. 자 아래쪽에 설명이 좀 되어 있는데요. 개체 타입이 붕어빵 기계라면 개체는 붕어빵에 해당됩니다. 개체 타입을 통해서 생성되는 애 여기 개체다 이 얘기죠 자 속성까지 보고 다시 한번 설명을 또 천천히 해볼게요 속성이라는 거는 방금도 이야기를 했지만, 개체를 구성하는 고유의 특성을 속성이라고 얘기합니다. 의미 있는 데이터의 가장 작은 논리적 단위라고 되어 있어요. 속성 자체만으로는 의미가 없어요.

14:25
관련 있는 속성을 모아서 의미 있는 개체를 구성할 수 있다고 되어 있습니다. 예를 들면 그냥 이름이라고 생각을 해볼게요 이름이라는 속성이 있어요. 그럼 이름이라는 속성에 해당하는 속성 값이 있겠죠. 요거 속성 값이라는 개념이 약간 다릅니다. 지금 이름이라는 속성이 있는 거예요. 이름이라는 속성을 가진 값들이 있을 거 아니에요. 그러면 예를 들어서 뭐 a라는 애가 있고 b라는 애가 있다고 생각을 해보죠. 이렇게는 하나의 열이라고 볼 수가 있어요. 그러면 이 열이 어떤 의미를 가질 수 있냐는 거예요. 아무 의미가 없어요. 그냥 이름을 나열한 것 뿐이에요. 하지만 이 오른쪽에 예를 들어서 국영수를 적어 놓는다든지 여러 가지 추가적으로 속성을 연결하다 보면 얘는 어떤 성적을 가지고 있는 애구나 또는 어떤 신체적 특징을 가지고 있는 애구나 라는 식으로 파악이 가능하죠.

15:25
이게 정보라는 개념입니다. 그냥 이름만 있을 땐 이건 데이터예요. 해석이 안되니까요? 그냥 순수하게 a인 거예요. 그런데 지금처럼 국영수라든지 오른쪽에 성적이라든지. 순위라든지 그런 것들이 입력이 된다라고 하면 예를 들어서 어디 사는 a 어떤 점수를 받은 에이 전교 1등 a 이런 식으로 의미 부여가 가능해지죠 요걸 의미 있는 개체라고 표현을 하는 거예요. 그게 뭐다 속성이 모여서 생성이 되는 거다 라는 의미입니다. 아시겠죠. 속성값은 파일 시스템에서 필드를 의미한다고 되어 있어요. 이거 구분 잘하셔야 돼요. 심지어 문제에서도 많이 구분을 못하고 나옵니다. 그런데 이거를 문제에서 안 한다고 해서 우리도 안 할 수는 없는 거니까 문맥상으로 우리가 파악할 수 있어야 돼요. 아래쪽에 비밀 노트 보고 확인해 볼게요 학생 객체의 성적이 80이라고 써있다고 하면 이 학생이라는 요놈이 개체잖아요.

16:28
정확하게는 개체 타입이 맞지만, 어떤 특정 학생 개체 하나를 보는 겁니다. 지금은 성적이라는 게 속성이 되는 거죠. 그럼 80이라는 이건 뭘까요? 이게 속성값이에요. 그래서 성적과 80을 확실하게 속성과 속성 값으로 구분할 수 있어야 된다는 뜻이에요. 이 속성 값이 시스템에서는 파일 시스템에서는 필드라는 얘기예요. 얘가 필드가 아니고요. 되시죠. 어떤 느낌인지 값이 필드에요. 파일 시스템에서 자 이렇게 구분을 할 수 있어야 된다라는 거죠. 성적이 속성이고 80이 속성 값입니다. 하지만 단순하게 80을 성적이라고 지칭하는 경우도 많아요. 설명을 하거나 여러 가지 경우에서 그렇기 때문에 80을 속성이라고 오해할 수 있는데, 이러면 안 된다는 거죠.

17:27
다만 문제에서 이렇게 낼 수 있기 때문에 문맥을 통해서 지금 80이라는 것을 지금 속성을 빗대서 설명을 하고 있구나 이런 것들을 파악할 수 있어야 된다는 거예요. 넘어가서 도메인은 하나의 속성 값이 가질 수 있는 속성이 아니에요. 속성 값이 가질 수 있는 모든 원자값의 집합이라고 되어 있습니다. 일단 원자값은 나중에 배울 거예요. 곧 배워요 그렇기 때문에 일단 지금은 넘어가고요. 어떤 값의 집합이다. 라는 게 포인트입니다. 자 예를 들어서 가장 간단한 거죠. 아래쪽에 설명이 나와 있죠. 여기 성별 속성이 있다고 생각을 해볼게요 성별 속성이 있다고 하면 이 성별 속성에는 수많은 데이터들 중에 남녀 말고는 적을 수가 없어요. 지금 남녀라고 써있는데, 남녀가 맞죠. 어쨌든 남녀로 도메인을 정의한다. 이렇게 표현을 할 수가 있다는 뜻이에요. 그러면 남녀만 여기에 들어갈 수 있다. 이걸 도메인이라고 표현합니다.

18:26
등급이라는 속성이 있다고 치면은 뭐 등급은 여러 가지가 있겠지만, vip gold silabrons라고 도메인으로 정의를 할 수 있다는 거죠. 자 그런데 정의가 어려운 경우가 있어요. 이름 같은 경우입니다. 이름은 예를 들어서 뭐 가가가부터 시작해서 홍홍홍까지 이렇게 정의를 할 수가 없는 저기죠 그렇기 때문에 이럴 경우에는 데이터 타입을 거기에 맞게끔 정의를 합니다. 그래서 여기서는 최대 20개의 문자로 영어 이름 같은 경우도 있으니까요? 최대 20개의 문자로 데이터를 적을 수 있게끔 타입을 따로 지정을 해주는 거예요. 최대한 제약사항을 걸어두는 거죠. 정확하게 데이터를 입력할 수 있게끔 이런 것들을 도메인이라고 한다. 이렇게 보시면 되겠습니다. 다음은 튜플이에요. 튜플은 하나의 개체를 표현하는 완전하고 고유한 정보 단위라고 되어 있습니다. 우리가 표에서 데이터를 쭉 적으면 이렇게 한 줄 있죠. 가로 한 줄 그거를 하나의 튜플이라고 해요.

19:25
레코드라고도 할 수 있구요. 자 각 튜플은 고유해야 하며 서로 식별이 구별이 돼야 된다는 소리예요. 순서가 없다라고 되어 있어요. 맨 아래에 있어도 되고 맨 위에 있어도 어차피 그 데이터는 그 역할을 합니다. 각 테이블의 행에 해당하고요. 릴레이션 인스턴스라고도 이야기한다 라고 되어 있어요. 이 인스턴스라는 개념은 어디선가 복제되었다. 라는 개념이에요. 릴레이션의 앞에서 우리가 테이블이라고 그랬잖아요. 릴레이션 인스턴스는 이 테이블에 있는 특성을 그대로 복사해서 새로 태어난 새로운 개체 이렇게 생각하시면 됩니다. 이게 릴레이션 인스턴스예요. 앞에서 릴레이션이 엄청 나왔는데 릴레이션에 대한 설명이 이제 아래쪽에 나옵니다. 릴레이션 개체에 관한 데이터를 속성과 튜플로 구성된 2차원의 테이블의 구조로 표현한 것이다. 그냥 표란 뜻이에요. 릴레이션 스키마와 릴레이션 인스턴스의 결합으로 구성된다라고 되어 있어요.

20:25
스키마는 속성명을 쭉 나열한 것 이게 릴레이션 스키마입니다. 릴레이션 인스턴스는 이 속성에 해당하는 속성 값들을 가진 새로운 하나의 개체 새로 나오는 하나하나의 개체들을 릴레이션 인스턴스라고 하는 거예요. 그걸 릴레이션 어커런스라고도 합니다. 뭐 이렇게 써 있으니까 보고 판단하시면 될 것 같구요. 자 요걸 이제 그림으로 보고 이제 이해를 해보도록 하겠습니다. 여러분들은 책으로 보시는 거니까 영상으로는 이 표를 보시고 실제 책으로는 각각 용어에 대한 설명을 비교해 가면서 보시면 될 거예요. 한번 보도록 하죠. 약간 확대를 해서 같이 좀 보겠습니다. 생각을 잘해보세요. 일단은 우리가 표를 만든다고 하면 일단 이게 기본일 거예요.

21:15
데이터 입력하기 전 데이터를 입력하기 전에 맨 위에다가 어떻게 값을 입력할 건지를 위쪽에다 기록을 해놓죠 맨 처음에 고객 아이디 적고 그다음에 고객명 적고 그다음에 성별 그다음에 나이 적어야지 이렇게 생각을 하잖아요. 이렇게 생각해서 표의 틀을 기본적으로 만들죠 이게 제 타입이에요. 이해되시죠. 앞으로 이쪽에다가 이쪽에다가 이렇게 적게 될 수많은 개체들의 기본적인 타입이 이렇습니다라는 얘기예요. 그래서 여기서 릴레이션 스키마라고 이야기를 하는 겁니다. 이해되시죠. 그래서 이 각각의 하나하나 하나에 대한 특성을 속성이라고 이야기를 한다는 거죠. 그리고 제가 지금 이해를 위해서 도메인을 따로 적어놨는데 원래 속성 밑에 도메인이 적혀있진 않아요. 지금 예시를 든 거니까요?

22:08
그리고 지금 각각의 속성이 가질 수 있는 속성 값들이 어떤 값을 가질 수 있는지 따로 적어놨는데 이거를 이제 도메인이라고 한다라는 거죠. 정확하게 여기서 도메인은 정확한 도메인은 요 남녀 여기에 정확한 도메인이고요. 사실 나머지는 도메인 역할을 해주는 데이터 타입이에요. 예를 들어서 나이 같은 경우엔 인터넷 정수거든요. 정수만 입력할 수 있게 해 놓은 거예요. 고객명은 20자까지 고객 아이디도 마찬가지 20자까지 문자열을 입력할 수 있게끔 해놓은 거기 때문에 정확하게 따지면 도메인이라고 볼 수는 없지만, 어쨌든 우리가 이 데이터 타입을 통해서 입력의 제한을 제약사항을 걸어둔 거잖아요. 그래서 도메인의 역할을 하고 있다. 이렇게 이해를 해주시면, 될 것 같아요. 그러면 현재 도메인 정했고 속성 정했어요.

23:01
그래서 속성을 다 정하니까 이 속성의 집합인 릴레이션 스키마가 생겼고 여기 밑에다가 이 릴레이션 스키마에 해당하는 데이터의 모음을 하나하나 만들어 갈 수 있게 됐어요. 자 그래서 요렇게 하나를 딱 그려서 썼습니다. 지금 보면은 애플 뭐 최은기 남 45 이렇게 써놨죠 요 각각의 하나하나 하나의 데이터 하나하나의 하나의 데이터를 모아서 하나의 튜플이 되는 거예요. 이게 릴레이션 인스턴스에요. 릴레이션 스키마를 통해서 생성된 그러니까 릴레이션 스키마의 규칙을 통해서 생성된 하나의 개체 이걸 릴레이션 인스턴스라고 이야기를 하는 거예요. 그리고 이 릴레이션 인스턴스 정보가 적힌 요 한 줄이 하나의 튜플이 되는 겁니다. 그리고 튜플은 하나의 행이라고도 볼 수가 있다는 거죠.

23:58
이 형태로 데이터를 또 하나를 적게 되면 튜플이 두 개가 되는 거예요. 표를 기준으로 봤을 때 여기 안에 있는 정보를 기준으로 본다면 릴레이션 인스턴스가 하나 더 생긴 거죠. 구분되시죠. 이렇게 보시면 되겠습니다. 이게 한 번에 이해하기가 좀 어려울 거예요. 제가 설명을 조금 더 자세하게 좀 쉽게 드렸으면 좋겠는데 일단 여기까지가 최선입니다. 같이 한번 계속해서 보도록 할게요 이것도 기초 용어인데 같이 한번 볼게요 차수 디그리 그다음에 기수 카디널리티라는 게 있는데, 자 여기서 차수와 기수는 그냥 문제에 자주 나와서 제가 따로 적어 놓은 거예요. 속성의 전체 개수 속성 값이 아니에요. 전체 속성의 개수 열의 개수라고 보면 됩니다. 속성은 보통 이렇게 하나의 열을 표현하기 때문에 열의 개수예요. 그다음에 전체 튜플의 개수는 아까도 말씀드렸듯이 행의 개수잖아요. 그래서 행의 개수라고 보시면 돼요.

24:56
그래서 열의 개수 속성의 개수는 차수구요. 행의 개수 튜플의 개수는 개수예요. 이렇게 보시면 되고 이거를 헷갈리지 않게 외우는 방법은 열차 비행기라고 외우시면 돼요. 저는 이렇게 했었어요. 선택적입니다. 열차 비행기 그래서 열은 차수 비행기 행은 기수 요렇게 암기를 했었는데 어쨌든 영어도 잘 나오잖아요. 그래서 요 앞에 있는 요 디바 씨까지 같이 기억을 해주시면, 좋아요. 이렇게 그리고 nural은 그렇게 어려운 개념은 아닌데 혹시나 헷갈릴 수도 있으니까 예시를 하나 드릴게요. 정보의 없음을 명시한다고 이야기를 하고 있습니다. 이런 느낌이죠. 예를 들어서 어떤 데이터를 조회를 한다고 생각을 해보면 조건을 여러 개 적을 수가 있어요. 예를 들어 그러면 이렇게 할 수 있죠.

25:47
서울 그러면 서울이 적혀있는 데이터만 조율을 할 수가 있겠죠. 또는 뭐 서울이 아니다라든지 아니면 뭐 80 이상 뭐 이런 것들의 조건을 적어서 원하는 데이터를 이렇게 출력을 할 수가 있어요. 자 그러면 이런 데이터가 안 적혀있는 값을 조회를 하고 싶을 때는 어떻게 해야 될까요? 서울이고 뭐고 그런 게 안 적혀있는 걸 구하고 싶은 거죠. 예를 들어서 여기 아래쪽에 보시면 나이가 쭉 적혀있는데, 나이가 안 적혀있는 튜플만 내가 갖고 오고 싶은 거예요. 그러면 조건이 아예 없는 거잖아요. 그렇죠. 그러면 여기에 아무것도 안 쓰면 될까요? 자 요런 부분이 조금 문제가 생기는 거죠. 그래서 이 널이라는 거는 자리 없음이라고 이렇게 붙여놓는 거랑 같은 개념이에요. 그래서 아무것도 안 써 있으면 조건이 아예 없는 거예요. 그러니까 값이 여기에 적혀있든 안 적혀있든 이걸 다 갖고 오는 겁니다.

26:45
아예 안 적혀있다고 하면요 그런데 여기에 널이라고 써있다고 생각을 해보세요. 그러면 여기에 뭔가가 안 적혀있는 것만 갖고 오라는 뜻이 돼요. 정보가 부재일 때 없을 때만 가지고 오세요라는 뜻이에요. 어떤 느낌인지 아시겠죠. 그래서 아무것도 없으면은 그냥 정말 아무것도 없는 거예요. 조건이 없습니다. 그냥 갖고 오세요라는 개념이고요. nal이라고 써 있으면 이거는 거기 안에 아무것도 안 적혀있는 것만 갖고 오세요라는 뜻이 되는 거예요. 두 가지를 이제 구분을 하실 수 있으셔야 됩니다. 자 넘어가서 이제 키에 대해서 볼 겁니다. 우리가 인제 앞으로 어쨌든 데이터를 다룰 때 이런 표를 많이 사용을 할 거예요. c는 데이터를 분류 정렬하거나 검색할 때 기준이 되는 속성이에요. 속성 중에 기준 어떤 기준이냐 튜플을 유일하게 구별 이걸 식별이라고 이야기를 했죠. 식별할 수 있는 식별자의 역할을 할 수 있는 행위 그것을 속성이라고 이야기합니다.

27:44
식별자의 개념을 정확하게 잡기 위해서 키의 종류를 공부하면서 볼게요 후보키 기본키 대체키 슈퍼키 외래키 등이 있다고 되어 있는데, 각각 먼지를 확인하면서 식별이라는 개념이 식별을 잘하는 개념이 어떤 거구나 라는 것들을 익혀보도록 하죠. 첫 번째로, 후보키라고 나와 있습니다. 후보키는 키가 될 수 있는 후보들이란 개념이에요. 키가 될 수 있는 조건은 두 가지입니다. 유일성과 최소성을 모두 만족시킬 수 있는 속성만 가능해요. 유일성은 말 그대로 중복이 없다는 뜻이에요. 중복 x 이렇게 보면 되겠죠. 그다음에 최소성 같은 경우에는 가장 적은 수의 속성 1개죠 1개의 속성으로만 구성할 수 있으면 후복기가 됩니다.

28:39
어떤 느낌이냐면 아래쪽에 이 학생 테이블을 보면서 이야기를 해볼게요 학생테이블이 있단 얘기는 학생을 관리하고 있다는 얘기인데 가령 학교 내부의 도서관에서 책을 빌린다고 생각을 해보죠. 그러면 a라는 학생이 책을 빌리러 왔어요. 그래서 제 이름은 a인데요. 이 책을 빌리고 싶습니다. 했어요. 그래서 a라는 학생한테 책을 빌려줬어요. 근데 책을 안 갖고 와서 이 a라는 학생이 어딨나 하고 찾아봤더니, a라는 학생이 3반에도 있고 7반에도 있고 9반에도 a라는 학생이 있는 거예요. 그러면 누가 빌려갔는지 알 수가 없죠 자 누가 빌려갔는지 알 수가 없다는 얘기는 식별이 불가능하다 구별이 불가능하다는 뜻이에요. 그러니까 이름이라는 속성은 각각 학생들을 구별할 수 있는 속성이 아니라는 얘기죠 자 그러면 이 경우엔 어떻게 하면 되냐면 저 3반의 a인데요.

29:38
7반의 a인데요. 9반의 a인데요. 라고 얘기를 해주고 요렇게 적어 놓으면 돼요. 그러면 3반에는 a가 한 명뿐이니까. 이거는 식별이 되겠죠. 그런데 이렇게 식별을 하려고 지금 몇 가지 속성을 썼나요? 이게 반에 해당하는 속성이고요. 이게 이름에 해당하는 속성이었죠. 반과 이름을 같이 썼어요. 이러면 후복기가 될 수 없다는 겁니다. 자 그래서 보통 대여하거나 우리가 마일리지 회원 정보 입력을 할 때 아니면 회원 조회를 할 때 어떻게 합니까? 학번이라든지. 연락처 뒤에 4자리라든지 이런 식으로 입력해서 찾죠 그런 것들이 우리를 서로서로 구분할 수 있게끔 해주는 속성들이기 때문이에요. 이게 키의 개념이고요. 이 키가 될 수 있는 속성들의 후보들이 후보키다 이렇게 보시면 되겠습니다. 그러면 이 후보키들을 다 사용할 필요는 없잖아요. 어차피 하나만으로도 서로 유일하게 구분이 되니까요?

30:38
하나만으로도 구분이 되기 때문에 이 많은 후보키들 중에 하나를 정해야 돼요. 그게 기본키입니다. 기본키는 후보키들 중 튜플의 식별을 위해서 지정된 하나의 지정된 속성이라고 보시면 됩니다. 그러면 이제 후보키가 예를 들어서 10개인데 하나를 기본키로 설정했어요. 그러면 이 하나의 기본키는 당연히 후보키들의 특징을 가지고 있어야 되니까. 중복이 되면 당연히 안 되구요. 그다음에 nal도 가질 수 없습니다. nal이라는 거는 값이 비어있단 뜻인데 값이 비어있는 것도 중복이 되면 안 되기 때문에 그리고 식별이 돼야 되기 때문에 널을 가질 수 없어요. 자 그러면 1개는 기본키고 후보키들 중에 나머지 9개는 어떻게 돼요. 대체키가 됩니다. 기본키로 지정된 속성을 제외한 후보키들이라고 되어 있죠. 이렇게 보시면 됩니다. 후보키가 큰 개념이고 그 중에 하나가 기본키 나머지가 대체키 이렇게 보시면 되겠네요.

31:33
자 그 이외에 키라는 용어를 같이 쓰지만 키와는 약간 개념이 다른 애들을 좀 살펴볼게요 첫 번째로, 슈퍼키입니다. 방금 제가 도서 대여할 때 이름과 반을 같이 썼잖아요. 요게 슈퍼키라는 개념이에요. 튜플의 식별을 위해서 유일성을 만족하는 속성 유일성을 만족하는 속성이 없어서 지금 우리가 합친 거잖아요. 그래서 둘 이상의 속성을 합칠 때 최소성을 만족하지 못하지만 유일성만 만족할 수 있죠. 요게 슈퍼키의 개념이에요. 후보키는 유일성과 최소성을 둘 다 만족 슈퍼키는 최소성은 불만족 대신에 유일성만 만족 이렇게 보시면 되겠습니다. 이 개념은 제가 비밀 노트에 적어놨고 추가 설명이 필요한 정도까지는 아니기 때문에 책만 읽어보시면 될 것 같고요. 다섯번째 외래키입니다. 마지막인데요.

32:32
외래키는 외래라는 거는 말 그대로 밖에서 라는 개념이에요. 관계된 다른 릴레이션의 기본키를 참조하는 속성이다 라고 되어 있어요. 말이 좀 어렵죠 참조라는 개념이 쉽게 표현을 하면 가져다 쓴다 이 개념이에요. 쉽게 읽어보면 다른 릴레이션의 기본키를 가져다 쓰는 속성이라고 보시면 됩니다. 외래키는 기본키를 가져다 쓰지만 외래키 자체는 키의 속성을 만족하지 않을 수도 있다고 되어 있어요. 자 이건 예시를 보면 금방 이해가 됩니다. 여기 써 있죠. 대여 테이블이라고 되어 있어요. 회원 테이블이라고 되어 있고요. 그러면 회원 테이블에 어떤 회원이 뭔가 빌리는 거죠. 그러면 회원 테이블의 회원이 a b c d라는 회원이 있다고 생각을 해보죠.

33:27
그러면 이 회원 테이블에서 a라는 회원이 뭔가를 빌렸어요. a라는 회원이 또 빌릴 수 있죠. 이건 문제가 안 돼요. 그 사람이 여러 개를 빌릴 수가 있는 거죠. 그다음에 뭐 b라는 회원을 빌릴 수도 있고요. d라는 회원이 빌릴 수도 있는데, c라는 회원은 빌리지 않을 수도 있어요. 회원 가입만 하고 나중에 빌릴 수도 있는 거니까요? 자 그러면 이 오른쪽에 있는 요게 기본키라고 생각했을 때 원래 a라는 회원은 기본키가 안 된다고 했지만, 지금은 그냥 예시니까요? 기본키라고 가정하고 기본키라는 거를 지금 이 데이터를 그대로 대여 테이블에 갖다 쓰고 있죠. 그러면 얘는 기본키구요. 얘가 외래키가 되는 거예요. 기본키를 가져다 쓰고 있으니까요? 그런데 이 외래키는 어때요 c가 없을 수도 있고 그리고 여러 번 갖다 쓸 수도 있어요. 그러니까 키의 속성을 전혀 만족하지 않는 거죠.

34:27
하지만 어쨌든 키를 가져다 쓰는 개념이기 때문에 외래키라는 별도의 표현을 쓴다 이렇게 생각을 하시면 됩니다. 자 그래서 이쪽에는 무조건 데이터가 있어야 되니까. 1이고요. 여기에는 없거나 많을 수 있기 때문에 이 관계를 1대 다라고 이야기하는 거예요. 읽을 때는 다 대 1 이렇게 읽는 게 아니라 보통은 1이 앞으로 가서 해석이 됩니다. 그래서 1 대 다 이렇게 이야기를 해요. 여기 이 부분을 잠시만요 이렇게 옮기면 되는 거니까요? 이렇게 하게 되면은 그냥 화살표만 이렇게 바꾸고 여기 1 이렇게 다 이렇게 쓰면 되잖아요. 똑같은 개념이죠. 그래서 1대 다 이렇게 해석을 하는 거예요. 보통 그래서 1이 기본키를 가지고 있는 경우구요. 다가 이 기본키를 참조하는 외래키를 가지고 있는 경우인 경우가 거의 대부분일 거예요. 대충 어떤 느낌인지 아시겠죠. 그리고 다음 섹션으로 넘어가도록 하겠습니다.

728x90
반응형
posted by 아이윤맨
: