데이터 베이스를 운영하다보면 테이블의 구조를 변형해야 할 때가 있습니다. 가령, 손님의 정보 요구사항에 나이가 추가 되었다면 customer 테이블의 어트리뷰트( 열 )에 나이를 표시하는 항목이 추가되어야 할 것입니다. 이럴 경우 지금까지 배운 지식으로는 전체 테이블을 지우고 다시 만드는 수 밖에 없습니다. 하지만 테이블 안에 많은 양의 정보가 들어있을 경우 백업하기도 힘들고, 속도도 느리기 때문에 비효율적입니다.


1. 어트리뷰트 추가

 이럴 경우 간단히 테이블의 구조를 바꿀 수 있는 sql 구문이 있습니다. 바로 alter 구문인데요. 테이블에 어트리뷰트를 삽입하는 sql 문은 다음과 같습니다.


 table_name 에는 구조를 바꿀 테이블의 이름을 쓰고 A 에는 어트리뷰트 이름을 씁니다. D 는 추가 할 어트리뷰트의 도메인을 넣습니다. 예를 들어 customer 테이블에 age 라는 어트리뷰트를 추가하는 sql 문은 다음과 같습니다.

alter table customer add age int;

 위 sql 문이 적용되기 이전의 테이블이 다음과 같은 모습이었다고 가정하겠습니다.



sql문을 적용하고 난다음 테이블의 모습은 다음과 같습니다.




보시다 시피 age라는 어트리뷰트가 추가 된 것을 볼 수 있습니다. 하지만 따로 값을 지정해 주지 않았기 때문에 Mysql 의 경우에는 NULL 값을 채워 넣습니다.


2. 어트리뷰트 제거

 이제 테이블에서 어트리뷰트를 제거하는 sql문을 배워 보도록 하겠습니다. 어트리뷰트를 제거하는 sql구문은 다음과 같은 형태를 갖습니다.


 table_name 부분에는 어트리뷰트를 삭제하고자 하는 테이블의 이름을 쓰고 A에는 제거 할 어트리뷰트의 이름을 써 넣습니다. 그럼 예를 들어 보도록 하겠습니다. customer 테이블에 추가한 age 라는 어트리뷰트를 다시 제거해 보도록 하겠습니다.

alter table customer drop age;

위 sql 문이 적용되기 전의 테이블의 상태는 다음과 같습니다.



이제 sql 문을 적용한 모습을 보겠습니다.




 삭제 되는 어트리뷰트가 지워진 모습입니다. 모두 NULL 일 필요는 없고 저장되었던 정보는 모두 삭제가 됩니다. 이제 테이블의 구조도 바꿀 수 있게 되었습니다.




1. 릴레이션 스키마

 데이터 베이스에 다음과 같은 테이블이 존재한다고 가정합시다. R-DB에서는 테이블을 릴레이션이라고 합니다. ( 테이블 자체가 관계를 의미하는 릴레이션을 나타내기 때문이죠. )

 번호 이름
주소
나이
 1  김태연 서울시 강동구
 21
 2  김태현 서울시 관악구
 30
 3  김신영 서울시 서초구
 26

여기에서 맨 처음 열의 제목 부분을 보면 "번호", "이름", "주소", "나이" 가 있습니다. 이것들을 릴레이션 스키마라고 합니다. 이 릴레이션 스키마는테이블의 전반적인 디자인을 나타냅니다. 위의 예를 들면 릴레이션 스키마 항목 중에서 "나이"라는 항목은 직관적으로 해당 사람의 나이를 나타내며 숫자로 올 것임을 알 수 있습니다.

 이전 포스트에서 살펴본 create 구문에서 어트리뷰트와 도메인을 같이 쓴 부분이 바로 릴레이션 스키마를 정의한 부분입니다. 위와 같은 테이블에서 같은 열의 도메인은 같음을 알 수 있습니다. ( 예를 들어 나이 부분에 갑자기 글자가 나오지 않고, 번호부분에도 마찬가지 입니다. )


2. 테이블로 데이터 삽입1 - 전체 어트리뷰트를 삽입 (insert into 구문)

 전 포스트에서 만들었던 customer라는 테이블에 데이터를 삽입하는 실습을 해보도록 하겠습니다. 테이블에 데이터를 삽입하는 SQL 문은 다음과 같은 구조를 갖습니다.


 
 table_name 부분에 데이터를 삽입하고 싶은 테이블 이름을 집어 넣으시고, value 이후에 오는 값들은 삽입 될 데이터들이며 오는 순서대로 테이블에 들어가게 됩니다. 다음의 예제를 직접 실행해 보도록 하겠습니다.

insert into customer value( 1, 'KTY', 'seoul');

 위 SQL 문을 직접 실행해보면 다음과 같은 실행 결과가 나오게 됩니다.



 위 SQL 문을 실행한 결과 각각 1, kty, seoul 이라는 값이 테이블에 삽입 된 것을 볼 수 있습니다. 여기서 주의 하셔야 할 것은 value 이후에 오는 값들은 테이블에 순차적으로 삽입 된다는 것입니다. 즉, 앞에서 value( 1, 'kty', 'seoul' ) 이라고 적었으므로 각각 1은 customer_num에 'kty'는 customer_name에 'seoul'은 customer_addr에 들어가게 되었습니다. 만일 순서를 바꿔서 입력을 한다면 어떻게 될까요?? 그건 숙제로 남겨두겠습니다.



3. 테이블로 레코드를 삽입 2 - 일부 어트리뷰트를 삽입 (insert into)

 만일 고객의 이름은 아는데 주소를 모를 경우 난감한 상황이 발생합니다. 왜냐하면 앞에서 배운 구문으로는 레코드를 이루는 값들을 모두 알아야 입력을 할 수 있기 때문입니다. 하지만 insert into 구문에는 필요한 어트리뷰트만 삽입 할 수 있는 방법이 있습니다. 해당 방식은 다음과 같은 형식을 갖습니다.
 

  테이블 이름 뒤에 입력하고 싶은 어트리뷰트를 선택하는 항목이 있습니다. 즉, A1 ~ Ak 까지가 입력하고 싶은 어트리뷰트를 선택하는 부분이고, value1 ~ value k 가 선택 된 어트리뷰트에 집어 넣을 값들을 써 넣는 부분입니다. 이번에도 실습을 통해서 배워 보도록 하겠습니다. 다음 SQL 구문을 실행해 보도록 하겠습니다.

insert into customer ( customer_num, customer_name ) value ( 2,'kth' );


  선택 된 어트리뷰트인 customer_num과 customer_name에 해당 값인 2와 'kth'가 삽입 된 것을 볼 수 있습니다. 그러면 선택이 되지 않은 어트리뷰트에는 어떤 값이 들어갈 까요? 바로 "널"값이 들어가게 됩니다.

 널값이란 1)알 수 없는 값이거나 2)존재하지 않는 값을 의미합니다. 간단히 바람직하지 않은 값이라고 생각하시면 됩니다. 나중에 이 널값에 대해서 다시 자세하게 알아보도록 하겠습니다. 일반적으로 널 값은 바랍직하지 않으며, 여러 경우에서 문제를 일으키게 됩니다.





.




 SQL을 이용해서 간단한 테이블을 만들어 보도록 하겠습니다. 테이블을 생성하는 명령어는 기본적으로 다음과 같은 형식을 갖습니다.


 create table로 시작해서 table_name 에는 만들고자 하는 테이블의 이름이 들어갑니다. 즉, 고객의 명단을 만들고 싶다면 create table customer ( ... ) 같은 SQL 문을 만들면 됩니다. A와 D는 각각 어트리뷰트 이름과 도메인을 정합니다. 예를 들면 name char(30) 은 30바이트의 크기를 갖는 문자열을 도메인으로 하는 name이란 어트리뷰트를 의미합니다. 쉽게 말하면 표에서 열 이름이라 할 수 있습니다.

그럼 이해하기 쉽게 예제를 이용해서 보도록 하겠습니다.
( 예제의 실행 환경은 Mysql 입니다. Access를 이용하실 분들도 문제 없이 실행 하실 수 있습니다. ) 다음 SQL 문을 실행하도록 하겠습니다.




 쿼리가 제대로 입력이 되었다면 "Query OK, 0 rows affected ... "라는 메시지가 뜰겁니다. 그럼 테이블이 제대로 만들어 졌는지 확인을 해보도록 하겠습니다.




 "show tables;"라는 명령어를 입력하면 Mysql DBMS는 여러분에게 현재 데이터베이스에 있는 테이블을 보여줄 것입니다. 이전 쿼리에서 customer 라는 테이블을 생성하였기 때문에 테이블 확인 쿼리에서 위와 같이 확인 하실 수 있습니다.

 테이블 만드는 법을 배웠으니 이제 테이블을 삭제하는 법을 배워 보도록 하겠습니다. 테이블을 지우는 쿼리는 다음과 같은 구조를 갖습니다.



 drop table table_name 의 구조를 갖으며 table_name 부분에 삭제하고 싶은 테이블의 이름을 입력하고 실행하시면 됩니다. 직접 실행을 해보면서 배워 보겠습니다. 다음과 같은 쿼리를 입력합니다.

 

 
 쿼리의 문법적 오류가 없으면 Query OK 이라는 메시지가 뜰 것입니다. 그러면 show tables; 를 입력해서 쿼리가 정상적으로 적용이 되었는지 확인해보도록하겠습니다.




 하나 있었던 테이블이 없어졌기 때문에 Empty set 이라는 결과가 나왔습니다. 이제 데이터베이스를 설계하고 실제로 Mysql에 구현을 할 수 있게 되었습니다. 좀 더 자세한 제약조건들이나 DDL 들을 배우시겠지만 여기까지만 배워도 데이터베이스를 구현하는데에는 큰 문제가 없을 겁니다.




 컴퓨터를 접하는 우리는 항상 데이터를 다루고 있습니다. 하지만 데이터란 무엇일까요? 세상에서 가장 어려운 질문이 정의를 물어보는 것이 아닌가합니다. 막연히 데이터라는 말을 사용하고 있지만 정작 데이터의 정확한 정의는 알고 있지 않습니다. ( 물론 컴퓨터 공학 전공이신 분들은 명쾌한 정의를 다 알고 계실 겁니다. )

Information Superhighway
Information Superhighway by nickwheeleroz 저작자 표시비영리동일조건 변경허락

 데이터는
The term data means groups of information that represent the qualitative or quantitative attributes of a variable or set of variables.
라고 위키피디아는 정의합니다. 한글로 쉽게 풀어 쓰면, 데이터는 사실을 나타내는 수치라고 할 수 있습니다. 예를 들면, 오늘의 날씨 정보에서 오늘 아침 기온, 습도, 날씨 등등 각각의 수치들은 데이터가 됩니다.

Actual is not normal (a tribute to Edward Tufte) by kevindooley 저작자 표시

 하지만 데이터 자체로는 큰 의미가 없습니다. 컴퓨터 공학에서는 데이터를 가공( 처리 : Processing )하여 정보를 만듭니다. 예를 들면 날씨를 나타내는 데이터들 ( 기온, 습도, 풍속, 위성사진 등 )은 기상대나 백엽상 등에서 측정 장비로 관측됩니다. 이 데이터는 그저 사실을 나타 낼 뿐이죠. 이제 이 데이터들을 처리하여 정보를 만듭니다. 기상대에서 측정 된 각각의 데이터들을 바탕으로 내일의 날씨를 예보하게 되죠.
 
Extinct Poster
Extinct Poster by Network Osaka 저작자 표시비영리변경 금지

 데이터를 처리하여 나온 결과를 "정보"라고 하는데, 정보란 간략하게 정의하자면 "사용자의 의사결정에 도움이 될 만한 잘 정리 된 데이터들." 이라고 할 수 있습니다. 현실 세계에서 보자면 구름 사진( 데이터 )이 지구과학 교과서에 사용되어 교육용으로 이용( 정보 ) 될 수도 있고, 사진 작품전에 출품( 정보 ) 될 수도 있습니다.

 컴퓨터는 이런 데이터를 입력 받아서 정보로 만들어 주는 역할을 하는 기계라고 할 수 있습니다.


-- 요약 --
 데이터는 그냥 사실을 나타내는 수치일 뿐이고, 정보는 사용자의 의사결정에 도움을 주는 가공 된 데이터들의 집합이다.


+ Recent posts