본문 바로가기

Oracle/Oracle SQL

Oracle SQL_Database 기본!

Step 0. Database의 기본!

 

드디어 SQL을 시작하게 됐습니다 ㅎ 여기까지 오느라 너무너무 고생이었네요.. 설치하고 설명하는데만 몇일이 걸렸으니 ㅎ

설치를 제대로 하셨다면 나중에 Admin 할때 아~하실 수 있을겁니다 ㅎ 저도 그랬거든요 ㅎ

이번에는 Database를 시작하기 전에 Database란 무엇이고 관련된 용어에 대해서 설명하도록하겠습니다.

왜냐하면 IT에서 용어를 잘 모른다는 것은 그것에 대해 잘 모른다는 것이고 한발짝도 더 나아갈 수 없기 때문입니다ㅎ 하나하나 차근차근

 

Database란?

 

Database란 무엇일까.. 흔히말하는 Database는?? 이라는 질문을 했을때 Data? Base? 데이터의 기초? 라고 생각하기가 쉽습니다.

하지만 그 말이 틀렸다는 것은 아닙니다. 어원이 있기 때문에 용어가 나왔겠죠 ㅎ

 

 

 

 

Database는 데이터의 집합이라고 보시면 되겠습니다. 제일 많이 드는 예가 도서관이겠죠?

눈을 감고 도서관을 생각해 보시기 바랍니다. 도서관에는 무엇이 있는지 또 어떻게 생겼는지를 생각해보시면 도서관이 그려질 것입니다.

아니면 위에 그림을 봐도 되구요 ㅎㅎ 하나하나 말해볼까욤?ㅎ

저는 혼잣말로...;; 도서관에는 책장도 있고 책도 있고 사서도 있고 테이블과 의자들이 있습니다.

이것들 중 제일 중요한 것은 무엇일까요? 도서관에서의 핵심은 책이죠 ㅎ

커다란 책장이라는 틀 안에 빼곡히 들어있는 책들. 책들을 데이터라고 보면 되겠습니다!

쉽게 또다른 예를 한번 들어볼까요? 온라인 쇼핑몰이 있습니다. 제가 옷을 사고 싶어서 온라인 쇼핑몰에 들어갔더니!

사진과 글들이 쫘르르르륵. 아우터, 티, 바지, 신발, 악세서리 까지의 카테고리별로 상품들이 나열되어 있습니다.

이 모든것들이 데이터입니다. 여러분들이 지금 보고 있는 이 블로그의 글도 네이버 서버에 저장되어있는 데이터 입니다.

이러한 데이터들의 집합체가 바로 Database입니다.

그리고 이제 우리는 이 용도에 따라 모은 데이터들의 집합체를 어떻게하면 효율적으로 정리하고 써먹을 수 있을까 고민을 해야합니다.

효율적인 명령어를 써서 데이터를 보고 만들고 하는 것들이 SQL(Structured Query Language)입니다.

 

DBMS란?

 

Database Management System의 약자로 데이터베이스를 관리하는 시스템. 즉 소프트웨어를 말하는 용어입니다.

이렇게 말하면 어렵죠?ㅎ 그럼 지금 회사나 여러분이 알고 있는 Database 관리 소프트웨어에는 무엇이 있을까요?

Oracle, DB2, MS-SQL, MySQL 등이 대표적으로 많이 쓰이고 있습니다. 로고들을 보면 눈에 익지 않을까요?ㅎ


 

 

 

그중 저는 Oracle을 다루고 있는거구요 ㅎ Oracle이 세계의 강자인것은 불변이니까요 ㅎ 요새 DB2가 많이 따라오긴했죠 ㅎ

이 많은 DBMS의 원초적인 시스템을 공부하는 것을 Admin이라고 합니다.

이제 앞으로 Oracle의 Admin을 다룰 건데요. Admin이 많이 어렵습니다. 왜냐하면 DBMS 그 자체를 이해햐아하니까요 ㅎ

하지만 열심히 열심히 이해하다보면 될겁니다! 반드시!ㅎ

 

DBA란?

 

Database Administrator의 약자입니다. 데이터베이스를 관리하는 사람. 그 사람이 DBA 입니다.

그러기 위해서는 모든것을 알고 있어야 합니다. 하지만 SQL과 Admin 중에는 Admin을 더 잘 아는 사람이 DBA여야 겠지요 ㅎ

DBA는 데이터베이스를 총괄하여 관리를 하고 성능유지를 하는 사람입니다. 그러니 무엇보다 Admin을 잘 하는 사람이어야 겠죵ㅎ

 

관계형 데이터모델이란?

 

데이터베이스를 하다보면 많이 듣는 용어들이 있고 또 그 용어들이 같은 동의어가 있는 경우가 많기 때문에 잘 알아두어야 합니다.

관계형 데이터모델이란 테이블을 이용하여 데이터들을 정의하고 설명한 모델입니다.

관계형 데이터베이스라고 많이 이야기하는것은 이 테이블을 가지고 이야기 하는 것입니다.

서로의 데이터들은 서로 연관성이 있어 관계를 맺고 수정하는데 용이합니다. 그래서 관계형 데이터모델을 사용하게 되었구요 ㅎ

테이블은 보통 릴레이션이라고도 많이 하는데요. 자세히 한번 말을 해보려고 합니다. 테이블은 표라고 생각하시면 됩니다.

 

이게 뭘로 보이시죠?ㅎ 네~ㅎ 표입니다 ㅎ 이것을 데이터베이스에서 뭐라고 한다구요? 릴레이션 또는 테이블이라고 말한다는 겁니다ㅎ

 

보통 표에서는 행과 열 또는 줄과 칸이라고 하는 것으로 구성이 되지요?ㅎ

그럼 릴레이션이나 테이블에서 똑같이 줄과 칸이라고 부를까요? 그건 아니겠죠 ㅎ 그럼 뭐라고 부르는지 한번 보도록 하겠습니다.


 

 

처음 표랑 두번째 표랑 달라진 것은? 빨간박스가 쳐져 있습니다 ㅎ 빨간 박스를 보통 표에서는 어떻게 부르죠?

줄이라고 부릅니다ㅎ 그럼 릴레이션이나 테이블에서는?

행(Row) 이라고 부르기도 하고 레코드(Recode)라고 부르기도 하고 튜플(Tuple)이라고 하기도 합니다. 좀있다가 정리하도록 하죵ㅎ

 

 

 

이번에는 박스가 세로로 되어있죠?ㅎ 보통 표에서는 이것을 칸, 행이라고 부릅니다.

릴레이션이나 테이블에서는 열(Column), 필드(Field), 속성(Attribute)라고 부릅니다. 헷갈리죠?ㅎ

표 - 줄, 칸

릴레이션(Relation) - 튜플(Tuple), 속성(Attribute)

테이블(Table) - 행(Row), 열(Column) 또는 레코드(Recode), 필드(Field) 라고 부릅니다.

매우 헷갈리는 개념이기 때문에 잘 알아두셔야 합니다. 헷갈리면 답없는 아이들이기 때문에..ㅠㅠ

 

테이블 스키마와 테이블 인스턴스란?

 

테이블 스키마(Table Schema)테이블 인스턴스(Table Instance)도 많이 쓰이는 용어입니다.

Table Schema는 위에 컬럼들을 모아놓은 것인데요.

 

 

학생이라는 테이블의 학번, 이름, 생년월일, 주소가 테이블 스키마입니다.

표기법은 학생(학번, 이름, 생년월일, 주소) 이렇게 표기를 합니다. 어렵지 않죵?ㅎㅎ

 

그럼 Table Instance는? 하실텐데요 Table Instance는 Row들의 집합체라고 보시면 됩니다.

 

 

요로코롬 Table Schema에 속한 Row들의 집합체! Recode들의 집합체! 들이 바로 Table Instance입니다. 따로 표기법은 없어요 ㅎ

 

테이블의 일반적인 특성을 말하자면

- 중복된 레코드의 값이 없어야 합니다. 중복된 값이 있다고 하면 데이터의 중복이기 때문에 어긋납니다. 그럴경우 모델링을 잘못한겁니다

- 레코드간의 순서는 의미가 없습니다. SQL을 통해 순서 조정을 할 수 있습니다.

- 레코드 내 필드 순서 또한 의미가 없습니다. 필도 또한 SQL을 통해 순서 조정을 할 수 있고 순서가 중요하지 않습니다.

- 모든 필드는 원자값을 갖습니다. 원자값이란 더이상 쪼개질 수 없는 값을 의미합니다.

 

Key란?

 

일반적으로 key는 무엇일까요?ㅎ 여기서부터 생각해보죠 ㅎ

key는 뭔가를 열기 위한 도구라고 생각이 되고 key에 맞는 문이 아닐경우 열리지 않습니다. 그럼 key로 문을 식별(확인) 할 수 있는거겠죠?

데이터베이스에서는 Key라는 것이 식별(identity)을 하기 위한 도구로서 식별자(identifier)의 역할을 하는 것을 말합니다.

뭔가 어렵다구요? 쉽게 생각해보면 위에 테이블에서 20090983이라는 학번을 갖는 학생이 누군가요? 이충현이죠?ㅎ

학번이 바로 식별을 위한 Key라는 겁니다. 기본키라고 하죠.

Key는 보통 기본키(Primary Key), 외래키(Foreign Key)가 가장 많이 쓰이고 가장 중요한 Key의 개념입니다.

기본키(Primary Key)란 말 그대로 기본적으로 가지고 있는키. 식별을 위한 키. 문을 따기 위한 키 입니다.

중복되는 값이 있어서는 안되고 이 Primary Key를 가지고 식별이 가능해야합니다. 위에 테이블에서는 학번이 Primary Key가 되겠죠 ㅎ

지금 주민등록증을 보셔도 기본키가 보입니다. 이름일까요? 발급처일까요? 아니죠 ㅎ 이름은 동명이인이 얼마나 많습니까?ㅎ

바로 주민등록번호를 가지고 식별이 가능하죠. 세상에서 단 하나밖에 없는 번호. 주민등록번호가 Primary Key입니다.

 

그럼 외래키(Foreign Key)는 무엇이냐~ 할텐데요. Foreign은 외래의, 외국의 라는 뜻을 가지고 있죠?

이러한 뜻때문에 지어진 것인데요 Foreign Key는 다른 테이블이 가지고 있는 기본키를 참조하는 키를 외래키 Foreign Key라고 합니다.

말이 참 어렵죠?ㅎ 역시 그림이 짱인것 같습니다 ㅎ

 

 

이전 테이블에서 좀 바꼈죠?ㅎ 공간이 협소해서..ㅠㅎ 왼쪽은 학생테이블 오른쪽은 학과 테이블입니다.

학생테이블의 기본키는? 두루루루루루 학번이죠 ㅎㅎ

학과테이블의 기본키는? 두루루루루루루 학과번호입니다 ㅎ

두루루루루루루는 생각하는시간..ㅋㅋㅋㅋ

이전에 Foreign Key는 뭐라고 했죠?ㅎ 다른테이블이 가지고 있는 기본키를 참조해서 갖다 쓰는 거라고 했습니다.

그럼 지금 학생테이블의 학과 컬럼이 있죠?ㅎ 이 컬럼은 학과테이블의 기본키를 참조해 오기 때문에 Foreign Key라고 할 수 있습니다.

어렵죠?ㅎ 잘생각을 해보셔야해요 ㅎ 이해하고 나면 어렵지 않답니다

 

그러면 위 그림에서 에러가 날 것이 하나가 있습니다. 뭘까요?

두루루루루루루루루루루루룰

두룰루루루루루루루루룰루루루 이건 좀 생각을 ㅎㅎ

학과테이블에 있는 기본키를 학생테이블이 참조한다고 했습니다. null은 될까요? 네 됩니다 ㅎㅎ 이거 생각해셨으면 땡!

null은 상관이 없습니다. 그럼 어떤게 문제일까요?

송경호 학생의 학과가 3으로 되어 있습니다. 하지만 학과번호에 3이 있나요? 없죠? 그럼 참조해 올 수 있나요? 없다는 겂니다 ㅎ

Foreign Key는 다시 보면 참조 번호이기 때문에 학과번호 테이블의 기본키에 없다면 학생테이블의 학과 컬럼에서 쓸수 없습니다.

다시 말해서 학과테이블을 생성 한 후 학생테이블을 생성해야 에러가 나지 않는 다는 것입니다.

제가 용어 많이 쓰죠?ㅎ 잘 모르겠으면 위에서 다시 한번 이해하고 내려오세욤 ㅎ 용어 습득은 계속 보고 쓰는 것 밖에 없습니다.

 

또하나 가르쳐 드릴것은 Foreign Key는 FK, Primary Key는 PK라고 부르고 스키마에서 표기법이 또 다릅니다.

기본키인 Primary Key는 학과(학과번호, 학과명) 이렇게 밑줄로 표시하지만 Foreign Key는 저 직선이 점점점점으로 됩니다.

 

핳.. 눈속임입니다.. 속아주세요 제발..ㅎ 저렇게라도 표현을 해보고 싶었습니다.. 포토샵으로..ㅎㅎ 이런 ㅠ

저렇게 학과에는 점점점으로 밑줄이죠?ㅎ 이렇게 해주시면 됩니다 표현을 ㅎㅎ

 

그 외에 Key의 종류에는 후보키(Candidate Key), 복합키(Composite Key), 대체키(Alternate Key) 등이 있습니다. 설명을 드릴텐데요 ㅎ

먼저 후보키와 대체키를 설명하기 위한 테이블부터 보시죵 ㅎ

 

 

우리 눈에 익숙한 테이블이 하나 등장했습니다. 학생 테이블이죠?ㅎ

저기있는 주민등록번호는 가짜이니 등록해도 소용없습니다 ㅎㅎ 하핳ㅎ

후보키와 대체키와 복합키는 기본키와 같이 설명을 드려야 하는건데요. 위 테이블을 보시게 되면 두개의 식별자가 있습니다.

뭘까요~ 라고 하면 너무 티나겠죠.. 학번이랑 주민번호입니다. 학번은 학교내에서 식별가능하고 주민번호는 우리나라에서 식별 가능합니다. 그러면 어떤 것을 써야할지 고민이 되겠죠?ㅎ 그래서 나오는 개념이 후보키입니다.

후보키는 식별자가 될 수 있는 Key들을 말하는 겁니다. 그 중 학번이 기본키가 되면 주민번호가 대체키가 되는 겁니다.

대체키는 기본키가 되지 못한 후보키를 말하는 거죠 ㅎ

그럼 복합키는 무엇이느냐~ 하면 키가 두개이상인 것을 말합니다. 여기서는 학번과 주민번호가 둘다 식별일 경우인데

만약에 학번하나에 여러명의 학생들이 존재한다고 하면 학번과 주민번호를 묶어서 복합키를 만들어 식별할 수 있죠 ㅎ

아니면 동명이인이 없다고 하면 학번과 이름을 묶어도 상관은 없습니다. 이것이 복 합 키~ㅎ

 

핳 이렇게 기본 개념을 설명을 드렸습니다! 이제 다음에는 본격적인 SQL로 들어가죠 ㅎ