'DATABASE'에 해당되는 글 37건

  1. 2015.03.21 :: [MySQL] 무한정 늘어나는 log-bin 파일 줄이기
  2. 2014.02.05 :: postgresql 컬럼 조회, 컬럼 코멘트 조회
  3. 2014.01.25 :: mysql 원격접속.
  4. 2011.07.22 :: ORA-22992: 원격 테이블로 부터 선택된 LOB 위치를 사용할 수 없습니다.
  5. 2011.07.22 :: Unix에서 오라클 9.2 TNS 재가동.
  6. 2011.06.28 :: 오라클 특수문자 입력(sqlplus)
  7. 2010.12.01 :: varchar와 nvarchar의 차이점
  8. 2010.10.01 :: dummy 테이블
  9. 2010.04.07 :: 테이블명/컬럼명 변경, 컬럼추가/제거, UNIQUE설정해제, PK 변경
  10. 2010.02.23 :: [Mysql] 실행 계획 보기
  11. 2009.09.27 :: MySQL 명령어 정리.
  12. 2009.09.24 :: Mysql 5.1.1 커넥터/Java 버젼
  13. 2009.09.04 :: You can't specify target table .....
  14. 2009.07.19 :: MySQL 문자셋
  15. 2009.07.19 :: MySQL Windows 설치
  16. 2009.07.10 :: MySQL 백분율 구하기
  17. 2009.06.17 :: 오라클에서 BIN$로 시작하는 테이블 삭제(쓰레기 테이블 삭제)
  18. 2009.05.28 :: MySQL max 함수 null 처리 및 최대값 구하기
  19. 2009.05.18 :: 오라클 10G XE
  20. 2009.05.18 :: DB 모델링의 이슈
  21. 2009.05.18 :: Relationship에 관하여
  22. 2009.05.18 :: Entity에 관하여
  23. 2009.05.14 :: SQL 실행순서
  24. 2009.05.06 :: [DataBase] 문제풀이 7장
  25. 2009.05.06 :: [DataBase] 문제풀이 6장
  26. 2009.05.06 :: [DataBase] 문제풀이 5장
  27. 2009.05.06 :: [DataBase] 문제풀이 4장
  28. 2009.05.06 :: [DataBase] 문제풀이 3장
  29. 2009.05.06 :: [DataBase] 문제풀이 2장
  30. 2009.05.06 :: [DataBase] 문제풀이 1장
DATABASE/MYSQL 2015. 3. 21. 18:13

purge master logs before date_sub(current_date, interval 30 day);


원본은 -> http://theeye.pe.kr/archives/972



MySQL에서 사용하는 log-bin이라는 옵션은 사용된 쿼리들이 로깅되는 파일이며 Innodb 혹은 Replication등에서 사용되곤 합니다.

하지만 이 파일의 문제는 무한정 늘어난다는 것입니다. relay-log-space-limit 같은 옵션이 있지만 이 옵션은 Replication에서 사용되는 relay-log-bin의 용량을 제한 하는 옵션이지 해결책이 되지 못합니다.

하지만 이 파일을 정리하는 방법이 있습니다. 우선 다음의 Query를 사용하는 것입니다.

INTERVAL에서는 원하시는 로깅 시점을 기록하시면 됩니다. 위의 경우에는 30일 이전의 로깅 정보를 삭제하게 됩니다.

차례차례 해보도록 하겠습니다.

1. 현재의 하드디스크 용량 상태를 확인합니다.

데이터베이스 공간이 85%나 사용되어 곧 꽉찰지도 모른다는 불안감에 휩싸이게 되었습니다.

2. log-bin 파일을 확인해 봅시다.

파일이 엄청나게 많이 있습니다.

3. 다음 명령어를 수행합니다.

물론 mysql에 접속하셔서 위의 명령어를 입력하셔도 됩니다. Super권한을 가진 root계정으로 실행해 주세요.

4. log-bin 파일이 줄었나 확인해 봅시다.

41번 이전의 파일들이 모두 삭제 되었습니다. 41번 부터가 최근 30일 이내의 로그정보가 남아있는 모양이군요.

5. 하드디스크 용량 상태를 확인해 봅시다.

확실히 용량이 많이 확보가 되었군요^^

주기적인 실행이 필요하실 경우에는 위의 명령어를 crontab에 등록하시면 됩니다. 일주일에 한번정도의 실행이 적당하겠네요.

posted by 나는너의힘
:
DATABASE/Postgresql 2014. 2. 5. 00:01

--컬럼 코멘트 조회

select c.relname, a.attrelid as "tableoid",

     a.attname  as "colname",

    a.attnum   as "columnoid",

    (SELECT col_description(a.attrelid, a.attnum)) AS COMMENT

from

    pg_catalog.pg_class c

    inner join pg_catalog.pg_attribute a on a.attrelid = c.oid

where

    c.relname = '테이블명'

    and a.attnum > 0

    and a.attisdropped is false

    and pg_catalog.pg_table_is_visible(c.oid)

order by a.attrelid, a.attnum




--컬럼 조회

select table_name, column_name, data_type, character_maximum_length , character_octet_length  , udt_name

from information_schema.columns where table_name='테이블명'

order by ordinal_position



--테이블 코멘트 조회

SELECT n.nspname, c.relname, obj_description(c.oid) 

FROM pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on c.relnamespace=n.oid 

WHERE c.relkind = 'r'

and nspname = 'public'

and relname = '테이블명'



posted by 나는너의힘
:
DATABASE/MYSQL 2014. 1. 25. 15:38




#mysql -u root -p mysql // mysql 접속 

select host, user, password from user;

모든 IP
INSERT INTO mysql.user (host,user,password) VALUES ('%','계정',password('계정비밀번호'));
GRANT ALL PRIVILEGES ON 계정.* TO '계정'@'%';
FLUSH PRIVILEGES;

원복
DELETE FROM mysql.user WHERE Host='%' AND User='계정';
FLUSH PRIVILEGES;



http://jmnote.com/wiki/MySQL%EC%97%90_%EC%9B%90%EA%B2%A9_%EC%A0%91%EC%86%8D_%ED%97%88%EC%9A%A9


posted by 나는너의힘
:
DATABASE/ORACLE 2011. 7. 22. 11:39
출처 : http://orapybubu.blog.me/40025520035



CREATE GLOBAL TEMPORARY TABLE FOO
(
  C1                 VARCHAR2(8 BYTE),
  C2                 VARCHAR2(8 BYTE),
  C3                 CLOB
)
;

INSERT INTO FOO SELECT * FROM 스키마마명.테이블명@링크명 WHERE 절 ;

SELECT * FROM FOO;

COMMIT 하면 안됨.
posted by 나는너의힘
:
DATABASE/ORACLE 2011. 7. 22. 11:32
오라클 계정 로그인 필
su - o~
[/oracle/app/oracle/product/920/network/admin]$vi tnsnames.ora
수정

/* 오라클 tns 중지*/
[/oracle/app/oracle/product/920/network/admin]$lsnrctl stop

/* 오라클 tns 시작*/
[/oracle/app/oracle/product/920/network/admin]$lsnrctl start

/* 오라클 tns 구동여부 체크*/
[/oracle/app/oracle/product/920/network/admin]$ps -ef | grep lsnr*
  oracle xxxx     1   0  11:11:54  pts/2  0:00 /oracle/app/oracle/product/920/bin/tnslsnr LISTENER -inherit
  oracle xxxx xxx   0  11:12:02  pts/2  0:00 grep lsnr*
posted by 나는너의힘
:
DATABASE/ORACLE 2011. 6. 28. 13:33

출처 : http://www.oracleclub.com/lecture/1148


Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법



-- 테스트 테이블 생성
SQL> CREATE TABLE test_str(
        val varchar2(10)
     );
 
 
-- 테이블에 아래와 같이 특수문자를 인서트 할경우
SQL> INSERT INTO test_str VALUES('Q&A');
a의 값을 입력하십시오: 
-- 이런 문장이 나옵니다..  
-- 특수문자를 갖는 데이터를 인서트 하기 위해서는 
-- 다음과 같은 세 가지 해결 방법이 있습니다.
    

SET DEFINE OFF

 
-- SQL*Plus에서 SET DEFINE OFF나 SET SCAN OFF를 실행하여 
-- Substitution Variable(&)을 Turn Off시킨다.

SQL> SET DEFINE OFF
SQL> INSERT INTO test_str VALUES('Q&A');

SQL> SELECT * FROM test_str;
     VAL
     ------
     Q&A
    

SET DEFINE %

 
-- SET DEFINE ON 상태로 유지 시키면서 Substitution Variable을 
-- 다른 Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 
-- 대체시킨다. 
  
SQL> SET DEFINE %
SQL> INSERT INTO test_str VALUES('Q&A');
    

SET ESCAPE ON

 
-- SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON 상태로 유지) 
-- 특수 문자 앞에 ESCAPE 문자인 BACKSLASH('\')를 붙인다.
 
SQL> SET ESCAPE ON
SQL> SHOW ESCAPE 
     ESCAPE "\" (hex 5c)
SQL> INSERT INTO test_str VALUES ('Q\&A');
    


posted by 나는너의힘
:
DATABASE/MS-SQL 2010. 12. 1. 09:28

varchar(10)의 의미?
 - 한글 5자, 영문 10자 입력 가능

nvarchar(10)의 의미?
 - 한글,영문 5자 입력 가능

한글, 영문을 제외한 다국어 언어를 사용하기 위해서는 nvarchar를 사용해야 한다.

참고 자료 : 데이터 형식(Transact-SQL)
posted by 나는너의힘
:
DATABASE 2010. 10. 1. 14:00

DB DUMMY 테이블
ORACLE - DUAL
IBM - SYSIBM.SYSDUMMY1
MySQL - 없음
posted by 나는너의힘
:
DATABASE/MYSQL 2010. 4. 7. 15:42

테이블  이름  변경

     RENAME  TABLE  이전테이블명  to  바꿀테이블명;

컬럼  추가하기      

     ALTER  TABLE  테이블명  ADD  컬럼명  데이터타입;

테이블에서  컬럼만  제거
     ALTER  TABLE  테이블명  DROP  COLUMN  컬럼명; 
 
컬럼명  변경
     ALTER  TABLE  테이블명  CHANGE  이전컬럼명  바꿀컬럼명  데이터타입; 

 

UNIQUE  설정을  해제 

     ALTER  TABLE  테이블명  DROP  INDEX  인덱스명; 

 

 

PK 변경

     1.  PK로  참여할  컬럼조건이  NULL값이  아니어야  한다.
     2.  ALTER  TABLE 구문에서  기존  값  삭제와  새로운  정의를  함께  수행한다.

     ALTER  TABLE 테이블명 DROP PRIMARY KEY, ADD PRIMARY KEY (키컬럼명);

posted by 나는너의힘
:
DATABASE/MYSQL 2010. 2. 23. 19:01

[Mysql] 실행 계획 보기

사용은 아래처럼 합니다.
   
EXPLAIN tbl_name  OR  EXPLAIN SELECT select_options

tbl_name은 테이블의 구조를 나타냅니다.



EXPLAIN SELECT select_options

EXPLAIN SELECT select_options 은 SQL의 실행계획을 표시합니다.
결과에 나오는 항목으로는
table : 테이블 명
type : 조인의 타입
    - system : 테이블이 하나의 레코드만 가지는 경우
    - const : 테이블에 조건을 만족하는 레코드가 하나일 때, 상수 취급
    - eq_ref : 인덱스가 UNIQUE이거나 PRIMARY KEY인 경우의 조인으로 const를 제외한 조인 중 가장 좋은 형태
    - ref : eq_ref와 다른 점은 UNIQUE가 아닐 경우 사용한다는 것.
    - range : 조건에 레코드의 범위가 주어진 조인.
    - index : all 형태와 비슷하며, 인덱스를 사용한다.
    - all : 모든 레코드를 스캔한다.
possible_keys : 테이블에서 사용 할 수 있는 키(인덱스)
key : possible_keys에 나온 키 중에서 실제로 사용한 키
key_len : 키의 길이
ref : 인덱스를 사용할 때 어떤 컬럼과 조건이 맞아야 하는지
rows : 조건을 만족하는 레코드를 찾기 위해 몇개의 레코드를 검사해야 하는지
Extra : 부가적인 정보
    - distinct : 조건을 만족하는 레코드를 찾았을 때 같은 조건을 만족하는 또 다른 레코드가 있는지 검사하지 않음.
    - not exist : left join 조건을 만족하는 하나의 레코드를 찾았을 때 다른 레코드의 조합은 더 이상 검사하지 않는다.
    - range checked for each record : 최적의 인덱스가 없는 차선의 인덱스를 사용한다는 의미.
    - using filesort : mysql이 정렬을 빠르게 하기 위해 부가적인 일을 한다.
    - unsing index : select 할때 인덱스 파일만 사용
    - using temporary : 임시 테이블을 사용한다. order by 나 group by 할때 주로 사용
    - where used : 조건을 사용한다는 의미.

posted by 나는너의힘
:
DATABASE/MYSQL 2009. 9. 27. 19:50
출처 : http://blog.naver.com/myrilke/150019611211



이 메뉴얼은 http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&lang=k 의 한글메뉴얼 중 겨우 3장을 정리한 내용입니다. 버전은 5.0 기준이므로 이보다 낮은 버전의 MySQL에서는 몇 가지 기능이 실행되지 않습니다. 좀 더 자세히 SQL문에 대해 알고 싶으시다면 한글 메뉴얼의 13장을 보세요. 레퍼런스 북처럼 되어 있습니다.

참고하세요.

 

mysql 실행시

-h: MYSQL서버의 IP또는 호스트명

-u: 유저명

-p: 패스워드

-D: 데이터베이스명

ex) mysql -h localhost -u root -p

// localhost에 root라는 유저명의 유저가 접속, -p를 쓰면 패스워드를 묻는 절차가 실행됨

// 귀찮다면 만약 패스워드가 myrilke라면 -pmyrilke로 쓰면 바로 접속 가능

// 만약 떨어져 있을 시에는 myrilke라는 데이터베이스로 오판함

 

1.mysql에는 쿼리를 넣을 때 대소문자 구분을 하지 않습니다. 쿼리 입력시 제일 마지막에는 ;(세미콜론)을 입력하는 것도 잊지 말아야 합니다.

 

2.입력을 하다 이 명령어를 실행시키고 싶지 않으면 \c로 취소하면 '삐'하는 경고음없이 취소할 수 있습니다. 가끔 \c로 못 마칠 때가 있는데 이는 문장구조가 여전히 대기 상태이기 때문입니다. 그럴 때엔 필요로 하는 문자(아래 Prompt형태에서 1)을 제외한 모든 경우)을 입력 후 \c를 입력해야 합니다. ex) '\c, "\c...

 

3.Prompt 형태
1) mysql> 새로운 명령어를 위한 준비
2) -> 다중 라인 명령어의 다음 라인 대기 상태
3) '> '로 시작된 문장의 완결을 위한 다음 문장 대기
4) "> "로 시작된 문장의 완결을 위한 다음 문장 대기
5) `> `로 시작된 식별자의 완결을 위한 다음 문장 대기
6)/*> /*로 시작된 주석문의 완결을 위한 다음 문장 대기

 

4. 단순 Query입력
1) select version(), current_date; (버전정보및 오늘 날짜 확인)
2) select sin(pi()/4), (4+1)*5; (파이를 4로 나눈 값의 sin값과 (4+1)*5값이 출력)

 

5. 데이터베이스 생성 및 사용
1) show databases;

//현재 서버의 데이터 베이스들 출력

 

2) use test

//Database changed라는 출력과 함께 test라는 데이터 베이스에 접속,

//이 때에는 세미콜론 사용을 안 한다.

//또한 단일라인에서만 사용가능하므로 한 줄에 다 입력해야 함.

3) grant all on test.* to 'myrilke'@'localhost';

//myrilke라는 이름의 등록된 사용자가 localhost라는 호스트 이름으로

//test라는 데이터베이스에 사용자 권한을 요청

4) create database test;

//test라는 데이터베이스 생성

 

5) show tables;

//현 데이터베이스 내의 테이블들을 출력

 

6) create table pet(name varchar(20), owner varchar(20),
species varchar(20), sex char(1), birth date, death date);

//name, owner, species, sex, birth, death의 정보를 가질 table을 생성,

//가독성을 높이기 위해 2줄에 걸쳐 타입

7) describe pet;

//pet이라는 테이블이 가지는 정보에 대해 검사, 이 때 필드 이름, 데이터 타입,

//NULL의 여부, Key의 여부, DEFAULT의 여부, 기타 에 관한 정보가 출력된다

 

8) load data local infile
'C:/mysql/pet.txt' into table pet;

//C:\mysql\에 있는 pet.txt 내에 있는 정보를 pet이란 테이블에 불러와서 입력한다.

//텍스트 파일로 데이터 입력시 각각의 필드는 tab이나 띄어쓰기로 구분하도록 디폴트

//텍스트 파일 입력 중 누락된 값들은 NULL값으로 자동처리된다.

//주의할 점은 mysql에서 위치입력시 Dos처럼 \를 쓰는 것이 아니라 /를 사용한다

9) load data local infile
'C:/mysql/pet.txt' into table pet
lines terminated by '\r\n';

//\r\n을 라인 터미네이터로 사용한다

 

10) insert into pet
values('Puffball','Diane','hamster','f',1993-03-30',NULL);

//pet이란 테이블에 값을 입력, 이 때는 NULL을 써줘서 누락된 값을 표시한다.

 

11) select * from pet;

//pet테이블에 있는 모든 정보 출력

 

12) delete from pet;

//pet테이블에 있는 모든 정보 삭제, 이 명령어는 텍스트 파일의 자료 중 잘못된 값이 많을 때

//텍스트 파일의 정보 수정 후 다시 입력하려고 할 때 필요하다. 만약 정보 수정 후 바로 load

//data를 해주게 되면 정보가 중복입력이 되기 때문이다.

 

13) update pet set birth = '1989-08-31' where name = 'Bowser';

//pet 테이블에서 name이 Bowser인 줄의 birth를 1989-08-31로 수정한다,

//update A set B=C where D set E의 형태로 작성하면

//A테이블의 D필드의 값이 E인 줄에서 B필드의 값을 C로 수정한다.

14) select *from pet where name = 'Bowser';

//pet 테이블에서 name이 Bowser인 줄을 모두 출력한다.

 

15) select *from pet where birth >= '1998-1-1';

//pet 테이블에서 birth가 1998-1-1 이후인 줄을 출력한다.

//만약 비교연산자 사용시 문자를 사용하면 ASCII코드 값을 비교한다.

//예를 들어 select *from pet where name >='S';를 타입하면

//'T~Z'까지의 문자로 시작되는 이름을 가진 줄들이 출력된다.

16) select *from pet where species = 'snake' or species = 'bird';

//pet 테이블에서 species가 snake이거나 species가 bird인 줄을 출력한다.

//or 뿐만 아니라 and도 사용된다.

//예를 들어 select *from pet where species ='cat' and owner = 'Gwen';

//을 타입하면 pet 테이블의 species가 cat이고 owner가 Gwen인 줄이 출력된다.

 

17) select *from pet where (species='cat' and sex='m')
or (species='dog' and sex='f');

//pet 테이블에서 species가 cat이고 sex가 m인 줄이거나 species가 dog이고 sex가 f인 줄은

//모두 출력한다.

//괄호를 쓰는 까닭은 and와 or 중 우선순위가 and가 더 높기 때문에

//혼용할 수 있으므로 방지차원에 쓴다.

 

18) select name, birth from pet;

//pet테이블에서 name과 birth필드값들을 모두 출력한다.

//이는 특정 행을 선택하여 출력하는 것과 같다.

 

19) select distinct owner from pet;

//pet테이블에서 같은 이름의 owner는 한 번만 출력하도록 owner필드값들을 모두 출력한다.

 

20) select name, species, birth from pet
where species='dog' or species='cat';

//pet테이블에서 species가 dog이거나 cat인 줄의 name, species,birth를 출력한다.

 

21) select name, birth,

(year(curdate())-year(birth) - (right(curdate(),5)<right(birth,5))

as age

from pet;

 

//pet 테이블에서 name과 birth 그리고 age를 출력한다.

//age는 오늘 날짜(curdate()는 오늘 날짜를 불러오는 MySQL지원 메소드) 중 연도에서

//생일의 연도를 뺀 다음에

//right(curdate(),5)는 curdate() 중 오른쪽 5자리 (몇월-몇일)를 추려내서 birth의 월일과

//비교했을 때 작으면 1, 크거나 같으면 0이란 값을 출력하게 된다.

//(비교연산자 식이 true면 1, false면 0을 리턴한다)

//그래서 나온 값을 빼주면 나이가 된다.(조금만 생각해보시면 이 식이 이해가 갈껍니다.;;)

 

22) select * from pet where name like 'b%';

// pet테이블에서 name이 b로 시작되는 줄을 찾는다.

// '_'을 사용하면 단일문자 매칭

// '%'를 사용하면 문자의 부정 숫자를 매칭

// SQL 패턴 사용시 논리연산자 사용불가

// 대신 like 또는 not like를 사용할 수 있다.

 

23) select * from pet where name like '%fy';

// pet테이블에서 name이 fy로 끝나는 줄을 찾는다.

 

24) select * from pet where name like '%w%';

// pet테이블에서 name이 이름 내에 w를 포함하고 있는 줄을 찾는다.

 

25) select * from pet where name like '_____';

// pet테이블에서 5개의 문자로 name이 되어있는 줄을 찾는다.

// _의 갯수만큼의 문자검색을 할 수가 있다.

 

26) select * from pet where name  regexp '^b';

// pet테이블에서 name이 b로 시작하는 줄을 찾는다.

// regexp는 테스트가 되는 값이 있는 모든 곳에서 매칭

// like는 전체값에서만 패턴매치를 진행

 

27) select * from pet where name regexp 'fy$';

// pet테이블에서 name이 fy로 끝나는 줄을 찾는다.

 

28) select * from pet where naem regexp 'w';

// pet테이블에서 name이 중간에 w를 가지고 있는 줄을 찾는다.

 

29) select * from pet where regexp '^.....$';

// pet테이블에서 name이 5문자인 줄을 찾는다.

// regexp에서는 .을 단일문자로 취급한다.

 

30) select * from pet where name regexp '^.{5}$';

// pet테이블에서 name이 5문자인 줄을 찾는다.

// {n}은 repeat - n - times 연산자이다.

 

31) select count(*) from pet;

// pet테이블에 몇 개의 줄이 있는지 찾는다.

 

32) select owner, count(*) from pet group by owner;

// pet테이블에서 owner의 이름에 따른 줄이 몇 개가 있는지 그룹화한 결과를 출력한다.

// group by n은 n이란 속성에 따라 그룹화한다.

// 만약 select 후 n만 사용하고 뒤에 group by n을 붙이지 않으면 에러가 발생한다.

// ex) select owner, count(*) from pet; <- ERROR 1140

 

33) select species, sex, count(*) from pet group by species, sex;

// pet테이블에서 species와 sex의 조합에 따른 줄이 몇 개가 있는지 그룹화한 결과를 출력한다.

 

34) select species, sex, count(*) from pet

where species = 'dog' or species = 'cat'

group by species, sex;

// pet 테이블에서 species 이름이 dog 나 cat인 줄들을 species와 sex의 조합으로 그룹화하여 결과를 출력한다.

 

35) select species, sex, count(*) from pet

where sex is not null

group by species, sex;

// pet테이블에서 sex가 null이 아닌 줄들을 species와 sex의 조합으로 그룹화하여 결과를 출력한다.

 

36) select pet.name,

(year(date)-year(birth)) as age,

remark from pet, event

where pet.name = event.name and event.type='litter';

// pet테이블의 name과

// 오늘 날짜(date) 중 년도에서 birth의 년도를 뺀 것을 age로 한 것과

// remark를

// pet과 event 테이블에서

// pet테이블의 name이 event테이블의 name과 같고

// event테이블의 type이 litter인 줄을 출력한다.

// 만약 name이나 type처럼 두 테이블에 동시에 있는 field같은 경우

// (테이블명).(필드명)을 사용한다.

// 사용 안 할시 ambigugous 에러 발생

// ex) pet.name, event.type

 

37) select p1.name, p1.sex, p2.name, p2.sex, p1.species

from pet as p1, pet as p2

where p1.species=p2.species and p1.sex='f' and p2.sex = 'm';

// pet테이블 과 pet테이블, 즉 같은 2개의 테이블에서

// pet테이블에서 species값은 같지만

// sex에서 값이 'f'와 'm'으로 다른

// 줄의 name, sex를 각각 출력하고 species도 출력한다.

// 이 때 두 species는 같으므로 한 테이블의 species만 출력

 

38) select name,birth from pet order by birth;

// pet테이블에서 birth를 기준으로 오름차순으로 정렬된 name과 birth 출력

 

39) select name,birth from pet order by binary name;

// pet테이블에서 name을 기준으로 대소문자 구별하여 오름차순으로 정렬된 name과 birth 출력

// binary를 사용하면 ASCII코드 값의 크기에 따라 정렬

 

40) select name, birth from pet order by birth desc;

// pet 테이블에서 birth를 기준으로 내림차순으로 정렬된 name과 birth를 출력한다

// 마지막에 desc입력시 내림차순 정렬

// desc는 바로 앞에 있는 birth에만 영향을 미친다.

// 하나의 컬럼 이상의 컬럼에 영향을 주고 싶을 땐 계속 써넣어줘야 한다.

 

41) select name, species, birth from pet

order by species,birth desc;

// pet테이블에서 species와 birth 내림차순으로 기준을 한 name,species,birth를 출력한다.

// 먼저 species기준으로 정렬후 birth 내림차순을 기준으로 삼아 정렬한다.

 

42) show index from pet;

// pet테이블에 있는 인덱스들을 보여준다.

 

43) !!이 구문은 윈도우 프롬프트 창에서 쓰는 명령어다!!

C:\> mysql -e "source c:/mysql/src.txt"

// mysql을 사용하여 c:\mysql\src.txt란 스크립트를 실행시킨다

// 만약 엑세스 문제가 발생한다면

// mysql -h localhost -u root -pmyrilke -e "source c:/mysql/src.txt"

// localhost에서 사용자 이름이 root이고 비밀번호가 myrilke인 계정으로 mysql에 접속하여

// c:\mysql\src.txt란 스크립트를 실행시킨다

 

44) source c:\mysql\src.txt;

// c:\mysql\src.txt란 스크립트를 실행시킨다.

// 이 것은 mysql프롬프트 에서 쓰는 것으로 기능은 위와 똑같다

 

45) \. c:\mysql\src.txt

// c:\mysql\src.txt란 스크립트를 실행시킨다

// 끝에 ;(세미콜론)을 붙이지 않는 점에 주의

 

46) select max(article) as article from shop;

// shop 테이블에서 article중에서 가장 큰 값을 가진 것을 article이라는 이름으로 출력

// select max(A) as B from C;

// C테이블에서 A중에 가장 큰 값을 가진 것을 B라는 이름 하에 출력

 

47) select article, dealer, price

from shop

where price=(select max(price) from shop);

// shop 테이블에서 price가 가장 큰 값인 줄의 price를 선택하여 그 줄에 있는 article, dealer, price를 출력

 

48) select article, dealer, price

from shop

order by price desc

limit 1;

// shop테이블에서 price를 내림차순으로 정렬하여 그 중 위에서 1개의 줄만 article,dealer,price를 출력

// limit에 들어가는 값은 출력해낼 줄의 숫자

// 47번 예제보다 좀 더 유동성있고 사용하기 편함

 

49) select article, max(price) as price

from shop

group by article;

// shop테이블에서 article, price 중에 가장 큰 값만 price로 하여 article로 그룹화한 결과를 출력

 

50) select article, dealer, price

from shop s1

where price=(select max(s2.price)

from shop s2

where s1.article = s2.article);

//shop테이블에서 price가 가장 높은 줄의 article,dealer,price를 출력한다.

 

51) select @min_price:=min(price),@max_price:=max(price) from shop;

select * from shop where price=@min_price or price=@max_price;

// shop테이블에서 min_price라는 변수를 선언하고 그 값은 price중 가장 작은 값

// 또한 shop테이블에서 max_price라는 변수를 선언하고 그 값은 price중 가장 큰 값

// shop테이블에서 price가 min_price값을 가지거나 max_price값을 가진 줄 모두를 출력

 

52) select name, sex

from pet where name='Claws'

union

select name,sex

from pet where sex='f';

// pet테이블에서 name이 Claws인 줄의 name, sex를 출력하고

// pet테이블에서 sex가 f인 줄의 name,sex를 출력한다.

// union은 두 개의 쿼리문 결과를 붙여서 보여준다.

// 따라서 select하는 필드값은 일치해야 한다.

posted by 나는너의힘
:
DATABASE/MYSQL 2009. 9. 24. 14:58

mysql-connector-java-5.1.10.zip

Mysql 5.1.1 커넥터/Java 버젼
posted by 나는너의힘
:
DATABASE/MYSQL 2009. 9. 4. 14:32

출처 : http://darky.egloos.com/2378550

업데이트(인서트) 할때 같은 테이블명이 중복사용되서는 안된다
sub Query로 처리해야 함.
 
insert into xt_tbl (
컬럼들 .................. )
values  (
값들.....,        (select (max(seq) + 1) from xt_tbl) )

You can't specify target table 'goodsrate' for update in FROM clause



FAILcom.ibatis.common.jdbc.exception.NestedSQLException:  
--- The error occurred while applying a parameter map. 
--- Check the goodsrate.insert-InlineParameterMap. 
--- Check the statement (update failed). 
--- Cause: java.sql.SQLException: You can't specify target table 'table_name' for update in FROM clause

posted by 나는너의힘
:
DATABASE/MYSQL 2009. 7. 19. 13:21

SET character_set_client = euckr;
SET character_set_connection = euckr;
SET character_set_database = euckr;
SET character_set_filesystem = euckr;
SET character_set_results = euckr;
SET character_set_server = euckr;
SET character_set_system = euckr; --안됨
SHOW VARIABLES LIKE 'c%';

posted by 나는너의힘
:
DATABASE/MYSQL 2009. 7. 19. 10:51

1) Mysql root 계정 설정
Mysql을 설치하면, Mysql root계정에 비밀번호가 걸려있지 않고, 외부에서 remote로도 접근가능하다. Mysql root계정을 비밀번호를 사용하면서 local에서만 사용가능하게 하려면 다음과 같이 하면 된다.
Mysql을 root계정으로 실행시킨다. 

C:\Program Files\mysql> mysql -u root

일단, Mysql 계정의 remote접근을 막는다. 

mysql> delete from user where Host='%';

mysql> flush privileges;

root 계정의 비밀번호를 지정한다. 

mysql> set password for root@localhost=PASSWORD('root');// 암호넣기



2) DB 생성
제로보드나 적수보드와 같은 게시판을 사용하기 위해서는 DB가 필요하게 되는데, DB생성법은 다음과 같다. think라는 id로 think라는 DB를 생성하고, DB암호를 (사용할DB암호)라고 할 경우, 다음과 같이 하면 된다. Mysql을 root계정으로 실행시킨다. 


 

c:\Program Files\mysql> mysql -u root -p

Mysql 프롬프트에서 다음과 같이 입력한다. 

mysql> Create database think;

mysql> grant all privileges on think.* think@localhost indentified by'(DB)';



3) Mysql DB 계정의 암호를 변경할 때 
 

mysql > set password for id@locahost=PASSWORD('DB');


posted by 나는너의힘
:
DATABASE/MYSQL 2009. 7. 10. 15:56
select  truncate(( b.cnt / a.cnt * 100 ), 2)  cnt , b.fildname from 
( select count(*) cnt from tablename  where fildname <> '') a ,
( select count(fildname) cnt, fildname from tablename  where fildname <> '' group by fildname) b

소숫점 2자리 까지.
posted by 나는너의힘
:
DATABASE/ORACLE 2009. 6. 17. 22:17

http://blog.daum.net/rksung/11?srchid=BR1http%3A%2F%2Fblog.daum.net%2Frksung%2F11

오라클에서 BIN$로 시작하는 테이블 삭제

디비에서 테이블을 drop으로 삭제 했을때 테이블이 없어지긴 했는데 BIN$어쩌고 하고 나오는 테이블이 대신 생겼다.
이걸 지우는 방법!!
SQL> purge recyclebin;
이거 한번 하고 나면 Bin$으로 시작하는 테이블이 모드 삭제된다.
추가로 오라클 purge에 대해 알아보았다.
오라클이 10g에서 새롭게 추가된 '휴지통'이라는 기능
테이블을 drop 하더라도 언제던지 복원할 수 있게 하고자 하는 것이므로,
윈도우의 휴지통과 같다고 보면 된다.
* 휴지통에 들은 테이블을 조회
SQL>show recyclebin;
*휴지통의 모든 내용이 비워진다.
SQL>purge recyclebin;
*삭제된 테이블을 되살리고 싶다면
SQL>flashback table 테이블명 to beford drop;
만약, 특정 테이블을 휴지통에 남기지 않고 모두 삭제하려면..
SQL>drop table 테이블명 purge;
purge문 없이 그냥 drop 한 후에는
SQL> purge table 테이블명..
결국 bin$는 휴지통에 있는 쓰레기 파일인셈이다..
그것을 purge recyclebin; 을 통해 휴지통 비우기를 하면 없어지는 것이다.@!

posted by 나는너의힘
:
DATABASE/MYSQL 2009. 5. 28. 12:44
select ifnull(max(good_seq),0) +1 from k_item

posted by 나는너의힘
:
DATABASE/ORACLE 2009. 5. 18. 09:55
http://download.oracle.com/otn/nt/oracle10g/xe/10201/OracleXEUniv.exe

로그인 계정


http://technet.oracle.com/
posted by 나는너의힘
:
DATABASE/Modelling 2009. 5. 18. 00:19
  • Entity Type의 병합 기준
  • Entity Subtype 관리 방안
  • Code 관리 방안
  • 집계 Entity Type 운용 방안
  • Index (index, primary index(key) 등...) 관리 방안
  • Relationship의 물리적 구현
  • RI(Referential Integrity) 운용 방안
  • 논리모델과 물리 모델과의 차이 파악과 관리 방안
posted by 나는너의힘
:
DATABASE/Modelling 2009. 5. 18. 00:18
  Relationship은 두 엔티티 타입 간의 관계를 표현하는데눈 양방향으로 표시. 관계를 표시하는 방법은 카디널리티(cardinality)와 옵셔널리티(optionality)가 사용
    
    cardinality
        엔티티 인스턴스가 다른 엔티티 타입의 엔티티 인스턴스와 맺을 수 있는 릴레이션쉽 인스턴스의 수효
    optionality
        엔티티 인스턴스가 다른 엔티티 타입의 엔티티 인스턴스와 맺어야 하는 관계가 필수인지 선택인지 표시

카디널리티와 옵셔널리티

카디널리티와 옵셔널리티

엔티티간 단방향

엔티티간 단방향 표시 (사용안함)

엔티티간 양방향

엔티티간 양방향 표시 (양방향으로 표시)

posted by 나는너의힘
:
DATABASE/Modelling 2009. 5. 18. 00:18
Entity
    엔티티 타입이 분류된 정보의 집합체를 총칭한다면, 엔티티 인스턴스(entity instance)는 엔티티 타입에 포함되어 있는 낱개의 정보를 의미

Entity 분류
    엔티티 타입은 사물, 사건, 개념 등의 3가지 범주로 분류

    - 사물 : 형체를 갖고 있는 정보
        ex) 고객, 직원, 대리점 ...
  • 사물 엔티티 타입은 다른 범주에 속해 있는 엔티티 타입 보다는 도출이 용이
  • 엔티티 인스턴스의 발생이 빈번하지 않으며 변경되거나 없어지지 않으면서 계속 활용
  • 다른 엔티티 타입보다는 우선적으로 도출되어야 함.
  • 사물 엔티티 타입의 구조 변경은 전체 데이타 모델에 심각한 영향을 미치므로 신중하게 검토한 후 엔티티 타입의 구조를 결정하여야

    - 사건 : 기업 활동을 통해서 생성되고 활용되는 정보들
        ex) 주문, 구매, 판매, 청구 ...
  • 해당 업무에 대한 정확한 지식을 갖고 있어야만 도출이 가능
  • 정보 활용을 극대화하기 위해서는 정보를 분류하는 기준이 모든 엔티티 타입에 일관되게 적용되어야 함.
  • 엔티티 인스턴스의 발생이 빈번하며, 한번 생성된 엔티티 인스턴스도 자주 변경
  • 엔티티 인스턴스의 수효가 많으며 항상 증가하게 되므로, 오래된 정보는 주기적으로 정리하는 것이 바람직

    - 개념 : 기업의 필요에 의하여 임의적으로 만들어진 개념
        ex) 부서, 코드, 고객군, 상품군 ...
  • 도출이 어려울 뿐만 아니라, 시간이 지남에 따라 개념이 변경되거나 추가되는 등 엔티티 타입 자체의 안정성이 보장되지 않는다
  • 기업의 시각에서 관찰하기 위하여 추가되는 경우가 대부분
  • 엔티티 인스턴스나 엔티티 타입의 변동이 기업의 정책 변경이나 환경 변경 시에만 이루어지며, 그 이외에는 거의 변동되지 않는다
posted by 나는너의힘
:
DATABASE 2009. 5. 14. 22:52

SELECT ------------------ 5
FROM -------------------- 1
WHERE ------------------- 2
GROUP
BY ---------------- 3
HAVING ------------------- 4
ORDER BY ---------------- 6
http://www.soqool.com/
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:41


7.1 SQL에서의 릴레이션(테이블)과 4장에서 정의한 릴레이션의 차이점은 무엇인가? 용어상의 기타 차이점도 설명하라. 왜 SQL은 테이블이나 질의 결과에 중복 투플들을 허용하는가?
SQL의 테이블(릴레이션)은 모든 애트리뷰트 값이 동일한 투플을 하나 이상 가질 수 있다. 일반적으로 집합은 두 개의 동일한 원소를 허용하지 않기 때문에 SQL테이블은 투플들의 집합이 아니고 투플들의 다중 집합이다.
SQL 질의 결과에서 중복된 투플이 나타나는 이유
- 중복을 없애는 것은 비용(시간)이 많이 드는 연산이다. 한 가지 구현 방법은 먼저 투플들을 정렬하고 중복된 투플들을 제거하는 것이다.
- 사용자가 질의 결과에 중복된 투플들이 나타나는 것을 원하는 경우가 있다.
- 집단 함수가 투플들에 적용될 때 대부분의 경우에 중복 삭제가 필요하지 않다.

7.2 SQL 애트리뷰트에 허용되는 데이터 타입들을 나열하라.
숫자 -  integer, int, smallint,  float, real, double precision
문자열 - char, varchar, clob
비트열 - blob
불리언 - true, false, unknown
날짜,시간 - date, time
타임스탬프 - timestamp

7.3 SQL에서는 4장에서 설명한 엔티티 무결성과 참조 무결성 제약조건을 어떻게 구현하였는가? 참조 트리거된 동작이란 무엇인가?
엔티티 무결성을 나타내는 제약조건은 not null로 한다. 일반적으로 애트리뷰트의 정의에 대한 디폴트값은 null이며 널 값이 허용되지 않을 때는 not null을 명시한다.
키와 참조 무결성을 위한 절로 primary key 절이 있다. primary key 절은 릴레이션의 기본키를 구성하는 하나 이상의 애트리뷰트를 명시한다. 만약 기본키가 하나의 애트리뷰트로 되어 있다면 이 절은 그 애트리뷰트 바로 뒤에 직접 올 수 있다. foreign key절도 참조 무결성을 명시한다. 투플들을 삽입 또는 삭제하거나 외래키 애트리뷰트 값을 수정할 때 참조 무결성 제약조건을 위반할 수 있다. SQL에서 무결성 제약조건을 위반할 때 취하는 디폴트 동작은 위반을 초래한 갱신 연산을 거절하는 것이다. 그러나 외래키 제약조건에 참조 트리거된 동작절을 추가하여 참조 무결성 제약조건이 위반된 경우에 취할 다른 동작을 명시할 수 있다. 참조 트리거된 동작에는 set null, cascade, set default가 있으며 위반된 경우를 가리키는 on delete나 on update 와 함께 사용해야 한다.

7.4 SQL 질의 구문 내의 6개의 절을 설명하고 6개의 절 각각에서 명시할 수 있는 구문 유형은 무엇인지 보여라. 6개의 절 중에서 필수적인 것은 무엇이며 선택적인 것은 무엇인가?
select 애트리뷰트 리스트 : 질의를 통해 값들이 검색되는 애트리뷰트 이름들의 리스트(필)
from 테이블 리스트 : 질의 처리를 위해 필요한 릴레이션들의 리스트(필)
where 조건 : 질의를 통해 검색되는 투플들을 식별하기 위한 조건식(선)
group by 컬럼 조건에 따른 연산(선)
having group에 대한 제한 : 그룹을 새로운 조건으로 분류(선)
order by 정렬 : 하나 이상의 애트리뷰트를 기준으로 질의 결과에 들어 있는 투플들을 정렬(선)

7.5 각 6개의 절을 실행하는 개념적 순서를 명시함으로써 어떻게 SQL 질의가 수행되는가를 개념적으로 설명하라.
from절, where절, group by절, having절 의 순서로 적용함으로써 평가된다. 개념적으로 order by절은 질의 결과를 정렬하기 위해 마지막에 적용된다.

7.6 SQL 내의 비교 연산자에서 널은 어떻게 다루는지 설명하라. SQL 질의에 집계 함수가 적용될 때 널을 어떻게 다루는가? 그룹핑 애트리뷰트에 널이 존재할 때는 어떻게 다루는가?
SQL에서는 참true, 거짓false, 모름unknown의 세 가지 값을 가진 논리를 사용한다. SQL에서는 애트리뷰트를 널과 비교학기 위하여 IS나 IS NOT을 사용한다. 그 이유는 SQL에서 각 널값은 모든 다른 널값과는 다르다고 간주하므로 = 형태의 비교가 적당하지 않다. 집계 함수에서 널인 투플들은 계산에 포함되지 않는다. 일반적으로 널값은 버린다. 그룹핑 애트리뷰트에 널이 존재하면 그 널값을 가진 모든 투플들을 위한 별도의 그룹을 만든다.
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:40


6.1 모델 구문과 관계 모델 구문 간의 대응에 관하여 논하라. 각 ER 모델 구문이 관계 모델로 어떻게 사상되는지를 보이고, 또 다른 사상에 관하여 논하라.

 ER 모델 관계 모델 
 엔티티 타입 엔티티 릴레이션 
 1:1 또는 1:N 관계 타입 외래키(또는 관계 릴레이션) 
 M:N 관계 타입 관계 릴레이션과 두 외래키 
 n차 관계 타입 관계 릴레이션과 n개의 외래키 
 단순 애트리뷰트 애트리뷰트 
 복합 애트리뷰트 단순 요소 애트리뷰트들의 집합 
 다치 애트리뷰트 릴레이션과 외래키 
 값의 집합 도메인 
 키 애트리뷰트 기본키(또는 보조키) 

정규 엔티티 타입의 사상
ER스키마의 각 정규 엔티티 타입 또는 강한 엔티티 타입 E에 대하여 E의 모든 단순 애트리뷰트들을 포함하는 릴레이션 R을 생성, 복합 애트리뷰트의 단순 요소 애트리뷰트들만을 포함시킨다. E의 키 애트리뷰트 하나를 선택하여 R의 기본키로 한다. 만약 E에서 선택된 키가 복합 애트리뷰트이면 그것을 구성하는 모든 단순 애트리뷰트의 모임이 R의 기본키가 된다.

약한 엔티티 타입의 사상
ER스키마에서 소유 엔티티 타입 E를 갖는 각 약한 엔티티 타입 W에 대하여 릴레이션 R을 생성하고 W의 모든 단순 애트리뷰트를 R의 애트리뷰트들로 포함시킨다. 또한 소유 엔티티 타입에 해당되는 릴레이션의 기본키를 R의 외래키로 포함시킨다. 이는 W의 관계 타입을 명시하기 위함이다. R의 기본키는 소유자 릴레이션의 기본키와 약한 엔티티 타입 W의 부분키의 조합이다.

이진 1:1 관계 타입의 사상
ER스키마의 각 이진 1:1 관계 타입 R에 대하여 R에 참여하는 엔티티 타입에 해당하는 릴레이션 S와 R을 나열한다. 가능한 접근 방식은 다음의 세 가지가 있다.
1) 외래키 접근 방식
2) 합병된 관계 접근 방식
3) 교차 참조 또는 관계 릴레이션 접근 방식
첫 번째 접근 방식이 가장 유용하다.

이진 1:N 관계 타입의 사상
모든 정규 이진 1:N 관계 타입 R에 대하여 관계 타입의 N측의 참여 엔티티 타입을 S라고 할 때, 관계 타입 R에 참여하는 다른 릴레이션 T의 기본키를 S의 외래키로 포함시킨다. 이는 관계 타입의 모든 N측 엔티티 인스턴스가 최대한 하나의 1측 엔티티 인스턴스와 관계가 있기 때문이다. 1:N 관계 타입의 모든 단순 애트리뷰트도 S의 애트리뷰트들로 포함시킨다.

이진 M:N 관계 타입의 사상
각 이진 M:N 관계 타입 R에 대하여 R을 표현하기 위한 새로운 릴레이션 S를 생성한다. 참여 엔티티 타입에 해당하는 릴레이션들의 기본키를 S에 외래키 애트리뷰트로 포함시킨다. 그들의 조합이 S의 기본키가 될 것이다. 또한 M:N 관계 타입의 모든 단순 애트리뷰트를 S의 애트리뷰트로 포함시킨다. 주의할 점은 M:N 카디날리티 비율때문에 참여 릴레이션 중에서 한 릴레이션에만 외래키 애트리뷰트를 포함시키는 것으로는 M:N 관계 타입을 표현할 수 없다는 것이다. 이 경우 반드시 별도의 관계 릴레이션S를 생성해야 한다.

다치 애트리뷰트의 사상
각 다치 애트리뷰트 A에 대하여 새로운 릴레이션 R을 생성한다. 이 릴레이션 R은 A에 대응하는 한 애트리뷰트를 포함할 것이다. 또 엔티티 타입이나 A를 애트리뷰트로 갖는 관계 타입에 해당하는 릴레이션의 기본키 애트리뷰트 K를 R의 외래키로 포함시킬 것이다. R의 기본키는 A와 K의 조합이다. 만약 다치 애트리뷰트가 복합 애트리뷰트이면 이 복합 애트리뷰트의 단순 요소 애트리뷰트들을 포함시킨다.

N차 관계 타입의 사상
각각의 n차(n>2) 관계 타입 R에 대하여 R에 대응하는 새로운 릴레이션 S를 생성한다. 모든 참여 엔티티 타입에 대응되는 릴레이션들의 기본키를 S에 외래키 애트리뷰트로 포함시킨다. 또한 n차 관계 타입의 모든 단순 애트리뷰트를 S의 애트리뷰트로 포함시킨다. 일반적으로 S의 기본키는 참여 엔티티 타입에 해당하는 릴레이션들을 참조하는 모든 외래키의 조합이다. 그러나 만약 R에 참여하는 엔티티 타입 E들 중에서 한 엔티티 타입의 카디날리티 제약조건이 1이면 S의 기본키는 E에 해당하는 릴레이션 E'을 참조하는 외래키 애트리뷰트를 포함해서는 안 된다.

6.2 ER모델을 릴레이션으로 사상하기 위한 방법에 관하여 논하라.
1.외래키 접근 방식
한 릴레이션을 선택하여 T의 기본키를 S에 외래키로 포함시킨다. S역할을 하는 릴레이션을 선택함에 있어서 R에 완전히 참여하는 엔티티 타입을 선택하는 것이 좋다. 1:1 관계 타입 R의 모든 단순 애트리뷰트를 S의 애트리뷰트들로 포함시킨다.

2.합병된 릴레이션 접근 방식
1:1 관계 타입의 또 다른 사상으로는 두 엔티티 타입과 관계 타입을 하나의 릴레이션으로 합치는 방법이 있다. 이 방법은 두 엔티티 타입이 모두 완전하게 참여할 때 적절한 방법이다.

3.교차 참조 또는 관계 릴레이션 접근 방식
엔티티 타입을 나타내는 두 릴레이션 S와 T의 기본키를 교차 참조하기 위한 세 번째 릴레이션 R을 정의하는 것이다. 이 방법은 이진 M:N릴레이션에서 주로 사용된다. 릴레이션 R의 각 투플은 S의 한 투플과 T의 한 투플을 연관시키는 관계 인스턴스를 나타내기 때문에 R을 관계 릴레이션이라 부른다.
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:40


5.1 관계 대수의 연산들과 각각의 목적을 나열하라.
셀렉트 - 릴레이션으로부터 선택 조건을 만족하는 모든 투플들을 선택.
프로젝트 - 릴레이션의 애트리뷰트들 중에서 애트리뷰트들로 이루어지는 새로운 릴레이션을 생성하고 중복 투플들을 제거한다.
세타조인 - 릴레이션1과 릴레이션2로부터 조인 조건을 만족하는 투플들의 조합을 생성한다.
동등조인 - 릴레이션1과 릴레이션2로부터 동등(=) 비교로 명시된 조인 조건을 만족하는 투플들의 조합을 생성한다.
자연조인 - 릴레이션2의 조인 애트리뷰트들이 결과 릴레이션에 포함되지 않는다는 점을 제외하면 동등조인과 같다. 조인 애트리뷰트의 이름이 같으면 지정하지 않아도 된다.
합집합 - 릴레이션1 또는 릴레이션2 또는 릴레이션1과 릴레이션2 모두에 포함되는 모든 투플의 릴레이션을 생성한다. 릴레이션1과 릴레이션2는 합집합 호환성을 가져야 한다.
교집합 - 릴레이션1과 릴레이션2 모두에 포함되는 모든 투플의 릴레이션을 생성한다. 릴레이션1과 릴레이션2는 합집합 호환성을 가져야 한다.
차집합 - 릴레이션1에는 포함되나 릴레이션2에는 포함되지 않는 모든 투플의 릴레이션을 생성한다. 릴레이션1과 릴레이션2는 합집합 호환성을 가져야 한다.
카티션프로덕트 - 릴레이션1과 릴레이션2의 애트리뷰트로 이루어진 릴레이션을 생성하고 릴레이션1과 릴레이션2의 투플들의 모든 가능한 조합의 투플들을 포함시킨다.
디비전 - R2(Y)의 모든 투플과의 조합으로 R1에 나타나는 R1(Z)의 모든 t[X] 투플을 포함하는 릴레이션 R(X)를 생성한다. 여기서 Z=X∪Y이다.

5.2 합집합 호환성이 무엇인가? 합집합, 교집합, 차집합 연산이 적용될 릴레이션들이 합집합 호환성을 가져야 하는 이유는 무엇인가?
연산들이 관계데이터베이스에 적용될 때는 위의 세 연산을 적용하고자 하는 두 릴레이션이 같은 타입의 투플들을 가져야 한다. 두 릴레이션의 애트리뷰트 수가 같고 각각의 대응되는 애트리뷰트들 간의 도메인이 같아야 한다. 그렇지 않으면 연산을 할 수가 없다.

5.3 질의를 모호하지 않게 표현하기 위하여 애트리뷰트의 이름 변경이 필요한 질의 유형을 설명하라.
자연 조인의 표준적인 정의는 두 개의 조인 애트리뷰트의 이름이 양쪽 릴레이션에서 같을 것을 요구한다. 그렇지 않은 경우는 먼저 이름이 같도록 해야 한다. 자연 조인이 명시된 두 릴레이션의 애트리뷰트의 이름이 이미 같으면 이름을 바꿀 필요가 없다.

5.4 내부 조인 연산의 여러 가지 유형을 설명하라. 왜 세타 조인이 필요한가?
세타조인 - 일반적인 조인 조건을 가진 조인 연산. 조인 애트리뷰트의 값이 널이거나 조인 조건이 거짓인 투플들은 결과에 나타나지 않는다.
동등조인 - 동등 비교 연산자만 사용한 조인.
자연조인 - 두 개의 조인 애트리뷰트의 이름이 양쪽 릴레이션에서 같을 때 비교하는 조인.

5.5 가장 흔한 형태의 의미 있는 조인 연산을 표현할 때 외래키의 개념은 어떤 역할을 하는가?
참조되는 릴레이션에 대응되는 투플을 찾는 데 중요한 역할을 한다.

5.6 FUNCTION 연산이 무엇인가? 왜 필요한가?
수치 값들의 모임에 적용되는 일반적인 함수로 SUM, AVERAGE, MAXIMUM, MINIMUM 등이 있다.
기본적인 관계 대수로 표현하지 못하는 요구가 있을 때 사용한다.

5.7 외부 조인 연산이 (내부)조인 연산과 어떻게 다른가? 외부 합집합 연산은 합집합 연산과 어떻게 다른가?
다른 릴레이션에 적합한 투플이 존재하든 존재하지 않든 R의 모든 투플 또는 S의 모든 투플 또는 R과 S의 모든 투플들을 조인 결과에 포함시키는 연산이다. 이것은 두 릴레이션에서 대응되는 투플들을 결합하면서 대응되는 값을 갖지 않는 투플들도 결과에 포함시키고 싶은 질의에 사용된다. 대응되는 투플만을 결과에 포함시키는 조인 연산을 내부 조인이라고 부른다.
외부 합집합 연산은 합집합 호환성이 없는 두 릴레이션에 대한 합집합을 수행하기 위해 제안되었다.

5.8 관계 해석과 관계 대수의 차이점과 유사점을 논하라.
관계 대수가 관계 모델을 위한 연산의 집합을 정의하지만 관계 해석은 관계 질의를 나타내기 위한, 보다 상위 레벨의 선언적 표기법을 제공한다. 관계 대수는 검색 요청을 나타내는 연산을 순차적으로 명시하는 절차적 언어이고 관계 해석은 비절차적 언어이다.

5.9 투플 관계 해석과 도메인 관계 해석의 차이점과 유사점을 논하라.
도메인 해석과 투플 해석은 사용되는 변수들의 유형이 다르다. 즉, 도메인 해석에서 변수의 범위는 투플이 아니라 애트리뷰트의 도메인에 속한 값이다.

5.10 존재 정량자(∃)와 전체 정량자(∀)의 의미를 설명하라.
존재 정량자 - 모든 것에 대하여 for every
전체 정량자 - 일부분에 대하여 for some

5.11 투플 해석과 관련된 다음 용어들을 정의하라.
투플 변수 - 데이터베이스 릴레이션을 범위로 하는 값.
범위 릴레이션 - 투플 변수 t에 대한 릴레이션 범위.
원자 - 투플들의 특정한 조합에 대해서 참이나 거짓으로 계산된다.
식(formula) - COND, 투플 관계 해석의 조건.
표현식(expression) - {t1.Ai, t2.Ak, ..., tn.Am | COND(t1, t2, ..., tn, tn+1, ..., tn+m)}

5.12 도메인 해석과 관련된 다음 용어들을 정의하라.
도메인 변수 - 어떤 질의의 결과로 차수 n인 릴레이션을 생성하기 위해서 각 애트리뷰트마다 하나씩, 총 n개의 변수가 필요하다.
범위 릴레이션 - 애트리뷰트의 도메인에 속한 값.
원자 - 투플 해석과 마찬가지로 값들의 특정 집합에 대해서 참이거나 거짓으로 계산된다.
식 - COND, 도메인 관계 해석의 조건.
연산식 - {x1, x2, ..., xn | COND(x1, x2, ..., xn, xn+1, ..., xn+m)}

5.13 관계 해석에서 안전식의 의미는 무엇인가?
유한 개의 투플을 결과로 생성하는 것이 보장된 식.

5.14 질의어가 관계적으로 완전하다는 의미는 무엇인가?
어떤 관게 질의어 L이 있을 때 관계 해석으로 표현이 가능한 어떤 질의어 L로 표현이 가능하면 L을 관계적으로 완전한 언어라고 한다.
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:39


4.1 다음 용어들을 정리하여라.
도메인 - 더 이상 나누어질 수 없는 값들의 집합. 이름, 데이터 타입, 포맷을 가진다.
애트리뷰트 - 열의 제목
n-투플 - n 개의 값의 순서 리스트.
릴레이션 스키마 - 릴레이션 이름과 애트리뷰트로 구성, 릴레이션을 표현하기 위해 사용된다.
릴레이션 상태 - n-투플의 집합.
릴레이션의 차수 - 릴레이션 스키마의 애트리뷰트 수.
관계 데이터베이스 스키마 - 릴레이션 스키마의 집합과 무결성 제약조건들의 교집합이다.
관계 데이터베이스 상태 - 무결성 제약조건을 만족하는 릴레이션 상태들의 집합.

4.2 릴레이션의 투플들에 순서가 없는 이유는 무엇인가?
릴레이션은 투플들의 집합으로 정의된다. 수학적으로 집합의 원소들 사이에는 순서가 없다. 따라서 릴레이션에서도 투플들은 특정 순서를 갖지 않는다.

4.3 릴레이션에 중복 투플들이 허용되지 않는 이유는 무엇인가?
집합의 모든 원소는 중복되지 않으므로 이 정의에 의하면 릴레이션의 모든 투플도 중복되지 않아야 한다.

4.4 키와 슈퍼키의 차이점은 무엇인가?
슈퍼키는 같은 값을 가지는 서로 다른 투플이 존재하지 않는다는 유일성 제약 조건을 명시한다. 그러므로 모든 릴레이션은 적어도 하나의 슈퍼키를 갖는다. 그러나 슈퍼키는 중복되는 애트리뷰트들을 가질 수 있으므로 이런 중복성을 갖지 않는 개념이 필요한데 그것이 키이다. 키와 슈퍼키에 적용되는 조건은 서로 다른 두 투플은 동일한 키 애트리뷰트 값을 가질 수 없다는 것이다. 키는 최소의 슈퍼키이다. 그리고 일반적으로 단일 애트리뷰트의 슈퍼키는 키이다.

4.5 릴레이션의 후보키들 중의 하나를 기본키로 지정하는 이유는 무엇인가?
중복의 애트리뷰트 값을 가지는 것을 일차적으로 배제할 수 있기 때문에 후보키들 내에서 선택한다.

4.6 릴레이션이 보통의 테이블이나 파일과 다른 특성을 설명하라.
1.릴레이션은 투플들의 순서에 영향을 받지 않는다. 투플들에는 순서가 없다.
2. 릴레이션 스키마내의 애트리뷰트들의 순서와 그에 따른 투플 내의 값들의 순서는 같다.

4.7 릴레이션에 널값이 생기는 여러 가지 이유를 설명하라.
값이 정의되지 않은 경우
값을 알 수 없는 경우
값이 현재 가능하지 않은 경우

4.8 엔티티 무결성과 참조 무결성 제약조건을 설명하고, 그것들이 중요한 이유를 기술하라.
엔티티 무결성 - 어떠한 기본키 값도 널 값이 될 수 없다. 기본키 값은 한 릴레이션 내의 각 투플을 식별하는 데 사용하는데 기본키 값이 널값이면 투플들을 식별할 수 없기 때문이다.
참조 무결성 - 두 릴레이션 사이에 명시되는 제약조건으로 한 릴레이션에 있는 투플이 다른 릴레이션에 있는 투플을 참조하려면 반드시 참조되는 투플이 그 릴레이션 내에 존재해야 한다. 한 릴레이션의 외래키의 값이 참조하는 릴레이션의 기본키 값과 일치해야 한다는 것을 의미한다. 이렇게 함으로써 두 개체들 간의 관계를 나타내는 것이다.

4.9 외래키를 정의하라. 왜 이 개념이 필요한가? 이것이 조인 연산에서 어떤 역할을 하는가?
참조 무결성 제약조건이 만족된 두 릴레이션 스키마에서 다음과 같은 조건을 만족하면 외래키라고 한다.
1. 외래키의 애트리뷰트는 참조하는 릴레이션의 기본키의 애트리뷰트와 동일한 도메인을 가진다.(이때 '외래키는 그 릴레이션을 참조한다'고 한다.)
2. 한 릴레이션의 투플의 외래키 값은 참조하는 릴레이션의 투플의 기본키 값과 일치하거나 널값을 가져야 한다.
 
4.10 트랜잭션이란 무엇인가? 갱신과 무엇이 다른가?
데이터베이스에 존재하는 값들에 대한 읽기 연산. 추가, 삭제, 갱신 연산. 데이터베이스에 대해 모든 제약조건들을 만족하는 일관된 상태로 수행을 끝마쳐야 한다. 하나의 트랜젝션은 데이터베이스로부터 값을 읽는 검색 연산들과 갱신 연산들을 여러 개 포함할 수 있다.
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:39


3.1 데이터베이스 설계 과정에서 고수준 데이터 모델의 역할을 설명하라.
데이터베이스에 대한 개념 스키마를 만든다. 개념적 설계라고 부르는데 개념 스키마는 사용자들의 데이터 요구사항들을 간단히 기술한 것으로서 데이터 타입, 관계, 제약조건들을 자세하게 설명한 것이다. 이것들은 고수준의 데이터 모델이 제공하는 개념들을 사용하여 표현된다.

3.2 널값을 사용하는 것이 적합한 경우들을 나열하라.
한 애트리뷰트에 적용할 값이 없을 때.
한 엔티티의 특정 애트리뷰트 값을 모를 때.
- 애트리뷰트 값이 존재하지만 누락되었을 때.
- 애트리뷰트 값이 존재하는지의 여부를 알지 못할 때.

3.3 다음의 용어들을 정의하라.
엔티티 - ER 모델을 나타내는 기본 객체. 실세계에서 독립적으로 존재하는 실체.
애트리뷰트 - 엔티티를 기술하는 속성.
애트리뷰트 값 - 특정 엔티티를 설명.
관계 인스턴스 - 엔티티들의 연관.
복합 애트리뷰트 - 속성을 작은 구성요소로 나누어 계층을 형성한다. 복합 애트리뷰트의 값은 계층을 구성하는 단순 애트리뷰트들의 값을 연결한 것이다.
다치 애트리뷰트 - 한 엔티티에서 애트리뷰트가 여러 값을 가지는 경우, 이런 애트리뷰트를 다치 애트리뷰트라 한다. 다치 애트리뷰트는 각 엔티티가 가질 수 있는 값의 개수를 제한하기 위해 하한과 상한의 범위를 가질 수 있다.
유도된 애트리뷰트 - 두 개 이상의 애트리뷰트 값들이 서로 연관을 가지고 있는 경우, 관련 엔티티로부터 애트리뷰트의 값이 유도될 수 있다.
복잡한 애트리뷰트 - 복합 애트리뷰트와 다치 애트리뷰트가 임의의 방식으로 중첩되어 그것을 표현할 때 이를 복잡한 애트리뷰트라고 한다.
키 애트리뷰트 - 엔티티 집합 내에서 각 엔티티마다 서로 다른 값을 가지는 하나의 애트리뷰트.
값 집합(도메인) - 각 엔티티에서 해당 애트리뷰트가 가질 수 있는 값들의 집합.

3.4 엔티티 타입과 엔티티 집합이 무엇인가? 엔티티, 엔티티 타입, 엔티티 집합의 서로 다른 점을 설명하라.
엔티티 - 실세계에서 독립적으로 존재하는 실체, 개념적으로 존재하는 객체.
엔티티 타입 - 같은 애트리뷰트를 갖는 엔티티들의 집합, 이름과 애트리뷰트들의 리스트로 기술된다.
엔티티 집합 - 임의의 시점에 데이터베이스 내의 특정 엔티티 타입과 모든 엔티티의 모임, 엔티티 집합은 엔티티 타입과 같은 이름을 사용하여 부른다.

3.5 애트리뷰트와 값 집합의 차이점을 설명하라.
애트리뷰트는 각 엔티티가 갖는 속성을 말한다.
값 집합은 각 엔티티에서 해당 애트리뷰트가 가질 수 있는 값들의 집합을 말한다.

3.6 관계 타입이 무엇인가? 관계 인스턴스, 관계 타입, 관계 집합의 차이점을 설명하라.
엔티티 타입들에 속하는 엔티티 간의 연관들의 집합을 정의, 수학적으로 관계 타입은 관계 인스턴스들의 집합이다.
관계 타입은 각각의 엔티티를 연결하는 속성을 의미한다. 즉, 서로의 관계가 어떠한가에 대한 기술이다. 예를 들어 교수, 학생, 강의 라는 엔티티들이 있다. 교수 - 강의의 관계 타입은 강의를 한다는 타입이며 학생 - 강의는 강의를 듣는다는 타입을 갖게 되는 것이다. 관계 인스턴스는 관계가 있는 두 엔티티의 요소들을 연관시키는 역할을 하는데 학생 {A, B, C, D} 와 강의 {1, 2, 3} 을 A - r1 - 1(학생 A는 1번 강의를 듣는다.), B - r2 - 2(학생 B는 2번 강의를 듣는다.), ...식으로 표현할 수 있다. 관계 집합은 이러한 관계 인스턴스의 집합을 말한다.

3.7. 참여 역할이 무엇인가? 관계 타입을 기술하는데 언제 역할 이름이 필요한가?
관계 타입에 참여하는 각 엔티티 타입은 관계 내에서 특정 한 역할을 담당한다. 역할 이름은 엔티티 타입에 속한 한 엔티티가 각 관계 인스턴스에서 가지는 역할을 강조하고 관계가 무엇을 의미하는지 설명하는 데 도움이 된다. 같은 엔티티 타입이 어떤 관계 타입에 두 번 이상 참여하는 경우에는 각 참여의 의미를 구분하기 위해 역할 이름이 필수적이다.(이러한 관계 타입을 순환적 관계라고 한다.)

3.8 관계 타입에 대한 구조적 제약조건을 명시하는 두 가지 방법을 설명하라. 또한 각각의 장단점을 논의하라.
카디날리티 비율 - 엔티티가 참여할 수 있는 최대 관계 인스턴스들의 수를 명시한다.
참여 제약조건 -  한 엔티티의 존재가 관계 타입을 통해 연관되어 있는 다른 엔티티에 의존하는지의 여부를 명시한다. 이 제약 조건은 각 엔티티가 참여할 수 있는 관계 인스턴스의 최소 수를 명시하며 최소 카디널리티 제약조건이라고도 한다.

3.9 어떤 조건하에서, 이진 관계 타입의 애트리뷰트가 참여하는 엔티티 타입들 중 한 엔티티 타입의 애트리뷰트로 옮겨질 수 있는지 설명하라.
1:1 관계 타입의 애트리뷰트들은 참여하고 있는 엔티티 타입들 중의 하나로 이동될 수 있다.

3.10 관계를 애트리뷰트들로 표현하는 경우에 이런 애트리뷰트의 값 집합은 무엇인가? 어떤 데이터 모델이 이런 개념을 사용하는가?
애트리뷰트에 대한 값 집합은 모든 엔티티들의 집합이다. 이는 고수준의 개념적 데이터 모델에서 사용한다.

3.11 순환적 관계 타입이 무엇인가? 순환적 관계 타입의 예를 몇 개 보여라.
같은 엔티티 타입이 어떤 관계 타입에 두번 이상 참여하는 경우 그 관계 타입을 순환적 관계 타입이라고 한다. 예를 들어 사원 엔티티에서 그 원소들은 사원과 상사의 역할을 가지고 있다. 이럴 때 관계는 [사원 엔티티] - [상사관계] - [사원 엔티티] 로 나타낼 수 있다.

3.12 데이터 모델링에서 약한 엔티티 개념이 필요한 경우는? 또한 다음의 용어들을 설명하라.
한 엔티티 타입이 다른 엔티티 타입과 연관되어 있을 때 이 개념이 필요하다.
소유 엔티티 타입 - 약한 엔티티 타입의 어떤 속성으로 연계된 다른 엔티티 타입.
약한 엔티티 타입 - 자신의 키 애트리뷰트가 없는 엔티티 타입.
식별 관계 타입 - 약한 엔티티 타입과 강한 엔티티 타입을 연관시키는 타입.
부분키 - 동일한 소유엔티티에 연관되는 약한 엔티티들을 서로 구분할 수 있는 애트리뷰트들의 집합.

3.13 약한 엔티티 타입의 식별 관계가 삼진 이상일 수 있는지 설명하고, 있다면 그 예들을 보여라.
삼진 식별 관계 타입을 갖는 약한 엔티티 타입도 가능한다. 이 경우, 약한 엔티티 타입은 몇 개의 소유 엔티티 타입들을 가질 수 있다.

3.14 ER 스키마를 ER 다이어그램으로 도식화하기 위해 사용하는 표기법을 설명하라.
엔티티 타입은 사각 상자로 표기한다. 관계 타입들은 다이아몬드 상자로 표기하며 이 관계에 참여하는 엔티티 타입들과는 직선으로 연결한다. 애트리뷰트들은 타원으로 표기하며 각 애트리뷰트는 해당되는 엔티티 타입 또는 관계 타입에 직선으로 연결한다. 복합 애트리뷰트의 구성 요소 애트리뷰트들은 타원형의 복합 애트리뷰트에 연결한다. 다치 애트리뷰트는 이중 타원으로 나타낸다. 키 애트리뷰트는 애트리뷰트 이름에 밑줄을 그어 표현한다. 유도된 애트리뷰트들은 점선으로 된 타원으로 표기한다. 약한 엔티티 타입은 이중 상자로 엔티티 타입을 표시하고 식별 관계를 이중 다이아몬드로 표기한다. 약한 엔티티 타입의 부분키는 점선으로 밑줄을 그어 표기한다. 이진 관계 타입의 카디날리티 비율은 참여를 표시하는 선에 1, M 또는 N을 명시함으로써 표현한다. 참여 제약조건은 부분 참여에 대해서는 단일선으로, 전체 참여에 대해서는 이중선으로 나타낸다.

3.15 ER 스키마 다이어그램에서의 이름 지정 규칙을 설명하라.
엔티티 타입의 이름은 그 엔티티 타입에 속하는 각 엔티티에 적용되기 때문에 복수 이름보다는 단수 이름을 선택한다. ER 다이어그램에서는 엔티티 타입과 관계  타입의 이름은 대문자로, 애트리뷰트의 이름은 첫 글자만 대문자로, 역할 이름은 소문자로 표기한다. ER다이어그램을 왼쪽에서 오른쪽, 위에서 아래로 읽기 쉽게 관계 이름을 선택한다.
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:38


2.1 다음 용어들을 정의하라.
데이터 모델 - 데이터베이스의 구조를 명시하기 위해 사용할 수 있는 개념들의 집합으로서 이와 같은 추상화를 달성하기 위해 필요한 수단을 제공.
데이터베이스 스키마 - 데이터베이스의 기술.
데이터베이스 상태 - 어떤 특정 시점에 데이터베이스에 들어 있는 데이터.
내부 스키마 - 데이터베이스의 물리적 저장구조, 물리적 데이터 모델을 사용하여 데이터 저장구조의 세부사항과 데이터베이스에 대한 접근경로들을 기술.
개념 스키마 - 모든 사용자들을 위한 전체 데이터베이스의 구조를 기술. 물리적 저장구조의 세부 사항을 은폐시키고 엔티티, 데이터타입, 관계, 사용자 연산, 제약조건들을 나타내는 데 중점.
외부 스키마 - 특정 사용자 그룹이 관심들 갖는 데이터베이스의 부분을 기술하고 그 사용자 그룹에게 데이터베이스의 나머지 부분을 은폐.
데이터 독립성 - 고수준의 스키마를 변경할 필요없이 데이터베이스 시스템의 어떤 단계에서 스키마를 변경할 수 있는 능력.
데이터 정의어 - 데이터베이스에서 데이터와 데이터간의 관계를 정의하여 데이터베이스 구조를 설정하는 SQL문.
데이터 조작어 - 데이터베이스 내의 데이터를 검색, 수정, 삭제, 저장할 수 있는 SQL문.
저장구조 정의어 - 내부 스키마를 지정하는데 사용된다.
뷰 정의어 - 사용자 뷰를 명시하고 개념 스키마 사이의 사상을 나타낸다.
질의어 - 고수준 데이터 조작어가 그 자체로 대화식으로 사용될 때.
호스트 언어 - 고수준이든 저수준이든 범용 프로그래밍 언어 내에 데이터 조작어 명령이 삽입된 경우의 프로그래밍 언어.
데이터 부속어 - 범용 프로그래밍 언어 내에 데이터 조작어 명령이 삽입된 경우의 데이터 조작어.
데이터베이스 유틸리티 -  데이터베이스 관리자가 데이터베이스 시스템을 관리하는 것을 도와준다.
카탈로그 - DBMS 모듈들이 필요로 하는 파일의 이름과 크기, 데이터 항목의 이름과 데이터 타입, 각 파일의 자세한 저장 형태, 스키마 사이의 사상 정보, 제약조건들에 대한 정보 등을 포함한다.
클라이언트/서버 아키텍처 - 많은 수의 PC, 워크스테이션, 파일 서버, 프린터, 데이터베이스 서버, 웹 서버, 기타 구성 요소들이 네트워크를 통해서 서로 연결되어 있는 컴퓨팅 환경을 다루기 위해 개발. 각각의 서비스를 제공하는 서버들이 네트워크로 연결되어 이와 연결된 클라이언트 컴퓨터에 그 서비스를 제공한다.
3-층 아키텍처 - 클라이언트와 데이터베이스 서버 사이에 중간 단계-응용서버 혹은 웹서버-를 하나 더 추가한 것.
n-층 아키텍처 - 사용자와 저장된 데이터 사이를 좀 더 세밀하게 나누어 층을 추가한 것.

2.2 데이터 모델들을 분류하라.
물리적 데이터 모델(저수준)
개념적 데이터 모델(고수준)
표현 데이터 모델(구현)

2.3 데이터베이스 스키마와 데이터베이스 상태의 차이점은 무엇인가?
데이터베이스 스키마는 데이터베이스의 기술을 말하는데 데이터베이스 설계 과정에서 명시하며 자주 변경되지 않는다. 데이터베이스 설계시 각각의 사용자 집단들의 요구사항들을 도출하면서 변경된다.
데이터베이스는 실제로 변경이 자주 일어난다. 데이터의 변경이 일어나면 데이터베이스의 내용도 변경된다. 이 때 특정 시점에 데이터베이스에 들어 있는 데이터를 데이터베이스 상태(스냅샷)라고 한다. 

2.4 3단계-스키마 아키텍처를 설명하라. 왜 스키마 단계들 사이에 사상이 필요한가? 어떻게 상이한 스키마 정의어들이 이 아키텍처를 지원하는가?
사용자 응용들과 물리적 데이터베이스를 분리시키는 것을 목적으로 하며 내부 스키마, 개념 스키마, 외부 스키마 이렇게 세 단계로 정의된다. 3단계-스키마 아키텍처는 사용자가 데이터베이스 시스템 내에서 스키마 단계들을 시각화하는 데 편리한 수단으로 사용되나 스키마는 단지 데이터데 대한 기술임을 주의해야 한다.
3단계-스키마 아키텍처에 기반을 둔 DBMS는 각 사용자 그룹은 단지 각자의 외부 스키마만을 참조한다. 따라서 DBMS는 외부 스키마상에서 표현된 요구를 개념 스키마에 대한 요구로 변환시키고 다시 내부 스키마에 대한 요구로 변환 시켜서 저장된 데이터베이스를 접근한다.
이 때 단계들 간의 요구와 접근 결과를 변환하는 과정을 사상이라고 한다.

2.5 논리적 데이터 독립성과 물리적 데이터 독립성의 차이점은 무엇인가? 어느 독립성을 달성하는 것이 더 어려운가? 그 이유는 무엇인가?
논리적 데이터 독립성 - 외부 스키마나 응용 프로그램들을 변경하지 않으면서 개념 스키마를 변경하는 능력. 데이터베이스의 확장, 제약조건의 갱신, 데이터베이스의 축소 등. 변경시 남아있는 데이터만 참조하는 외부 스키마들이 영향을 받아서는 안 된다. 외부/개념 스키마간의 사상에 의해 제공된다.
물리적 데이터 독립성 - 개념 스키마를 변경하지 않으면서 내부 스키마를 변경할 수 있음을 말한다. 따라서 외부 스키마도 변경할 필요가 없다. 개념/내부 스키마간의 사상에 의해 제공된다.(데이터의 물리적 저장방법과 그 구성 변경의 투명성을 제공)
논리적 데이터 독립성이 달성하기 더 어려운데 왜냐하면 데이터의 물리적 저장방법이 변경되었을 경우 데이터 표현방식의 변화로 프로그램을 수정하면 되지만 프로그래머가 생각하는 논리적 구조가 변경되면 그에 따른 프로그램의 구조가 변경되기 때문에 전체적인 수정을 필요로 하기 때문이다.

2.6 절차적 데이터 조작어와 비절차적 데이터 조작어의 차이점은 무엇인가?
절차적 데이터 조작어 - 저수준 데이터 조작어, 반드시 범용 프로그래밍 언어 내에 삽입해서 사용한다. 이 유형은 데이터베이스로부터 각 레코드 또는 객체 단위로 검색하여 처리하기 때문에 프로그래밍 언어의 반복문 등을 이용한다. 한 번에 한 레코드 데이터 조작어라고도 부른다.
비절차적 데이터 조작어 - 고수준 데이터 조작어, 복잡한 데이터베이스 연산들을 간결하게 나타내는 데 사용한다. 한 데이터 조작어 명령으로 여러 개의 레코드들을 검색할 수 있기 때문에 한 번에 레코드 집합 조작어 또는 집합지향 데이터 조작어라고 부른다.

2.7 여러 가지 편리한 사용자 인터페이스 유형들과 각 유형을 주로 사용하는 사용자의 부류에 대해서 설명하라.
브라우징을 위한 메뉴 기반 인터페이스
폼 기반 인터페이스
그래식 사용자 인터페이스
자연어 인터페이스
음성 입력과 출력
초보자를 위한 인터페이스
데이터베이스 관리자를 위한 인터페이스

2.8 DBMS는 컴퓨터 시스템 소프트웨어들과 상호 작용하는가?
DBMS는 컴파일러와 인터페이스하면서 범용 호스트 프로그래밍 언어를 지원하고 시스템 네트워크 인터페이스를 통하여 별도의 컴퓨터에서 수행되는 클라이언트 및 응용 서버와 상호 작용한다.

2.9 2-층과 3-층 클라이언트/서버 아키텍처의 차이점이 무엇인가?
2-tier 아키텍처는 소프트웨어의 구성 요소들이 클라이언트와 서버에 분산되어 있다. 사용자 인터페이스 프로그램과 응용 프로그램들은 클라이언트 쪽에서 수행되며 SQL처리와 관련된 질의와 트랜잭션 기능은 서버(데이터 서버) 측에서 수행한다.
3-tier 아키텍처는 웹의 등장으로 개발되었는데 클라이언트와 데이터베이스 서버 사이에 미들 티어를 하나 더 추가한 것이다. 클라이언트는 정보를 사용자에게 보여주고 데이터를 입력받으며 미들 티어(웹서버 또는 응용서버)에서는 데이터를 사용자에 전달하거나 DBMS에게 보내기 전에 중간의 규칙과 제약조건들을 다룬다. 데이터베이스 서버에서는 데이터 관리의 모든 서비스를 수행한다.

2.10 데이터베이스 유틸리티의 유형과 기능들에 대해서 설명하라.
적재 - 텍스트 파일이나 순차 파일과 같은 기존의 데이터 파일들을 데이터베이스에 적재하기 위해 사용하는 유틸리티.
백업 - 전체 데이터베이스를 테이프에 복사해서 데이터베이스의 백업 사본을 만든다.
파일 재조직 - 성능을 향상시키기 위하여 데이터베이스 파일들의 구조를 다른 파일 구조로 재조직하는 유틸리티.
성능 모니터링 - 데이터베이스의 사용을 모니터링해서 사용 통계를 데이터베이스 관리자에게 제공.

2.11 어떤 기능이 n-층 아키텍처에 추가되었는가(n>3)?
n-층 아키텍처에서 비즈니스 논리 층은 다수의 층으로 나누어지는데 네트워크를 통해서 프로그램과 데이터를 분산시키는 것 외에 한 개의 층이 적절한 프로세서나 운영체제에서 동작할 수 있다는 장점이 있다. ERP나 CRM 패키지 업체들은 주로 미들웨어 층을 사용한다. 미들웨어 층은 뒷단의 데이터베이스들과 통진하는 앞단의 모듈을 맡는다.

*커드의 12규칙
http://ko.wikipedia.org/wiki/%EC%BB%A4%EB%93%9C%EC%9D%98_12_%EA%B7%9C%EC%B9%99
posted by 나는너의힘
:
DATABASE 2009. 5. 6. 11:38


1.1 다음 용어들을 정의하라.
데이터 - 알려진 사실, 의미를 가지고 기록될 수 있는 것들.
데이터베이스 - 어떤 특정한 의미를 가지는 데이터의 모임.
DBMS - 데이터베이스 관리 시스템, 다양한 응용들에서 필요로 하는 데이터베이스를 정의, 생성, 조작, 공유할 수 있도록 편리한 기능을 제공하는 범용 소프트웨어 시스템.
데이터베이스 시스템 - 데이터베이스와 DBMS.
데이터베이스 카탈로그 - 데이터베이스의 정의(데이터베이스에 속하는 각 파일들의 구조, 각 데이터 항목의 타입과 저장 형식, 데이터에 대한 다양한 제약조건 등)가 저장된 것.
프로그램-데이터 독립성 - 데이터 파일의 구조가 변경되어도 응용 프로그램은 거의 변하지 않는 성질.
사용자 뷰 - 데이터베이스의 일부이거나 데이터베이스로부터 유도되는 가상 데이터, 뷰의 데이터는 실제로 데이터베이스에 저장되지 않는다.
데이터베이스 관리자 - DBA, 데이터베이스나 DBMS, 관련 소프트웨어를 관리하고 감독. 데이터베이스에 대한 접근을 감독하며 자원의 사용을 모니터링하고 조정한다. 필요한 경우에 소프트웨어나 하드웨어 자원을 구입, 데이터베이스의 보안이나 시스템의 성능 문제를 책임진다.
최종 사용자 - 데이터베이스에 대하여 질의하고, 변경하고, 보고서를 작성하는 사람. 캐주얼 사용자, 초보 사용자, 전문 사용자, 독자적인 사용자로 분류.
미리 작성된 트랜잭션 - 초보 사용자가 데이터베이스에 제한적으로 접근하게 하기 위해 사용.
연역 데이터베이스 시스템 - 데이터베이스에 저장되어 있는 사실로부터 새로운 정보를 추론하는 연역적 규칙을 정의할 수 있는 기능을 가진 시스템.
지속성 객체 - 데이터베이스에 저장된 객체, 프로그램의 수행이 끝난 후에도 데이터베이스에 영구적으로 남아 필요하면 언제든지 다른 프로그램들에 접근이 가능.
메타데이터 - 카탈로그에 저장된 정보, 기본 데이터베이스의 구조를 기술.
트랜잭션 처리 응용 - 동시에 수행되는 트랜잭션들이 상호 방해를 받지 않고 효율적으로 수행되도록 보장.

1.2 데이터베이스를 사용하는 데 수반되는 중요한 세 가지 작업은 무엇인가? 각각을 간단하게 설명하라.
데이터베이스 정의 - 데이터베이스에 저장되는 데이터에 대한 데이터 타입, 구조, 제약조건들을 명세하는 과정.
데이터베이스 구축 - DBMS가 관리하는 기억 장치에 데이터를 저장하는 과정.
데이터베이스 조작 - 특정한 데이터를 검색하기 위한 질의, 데이터베이스의 갱신, 데이터로부터 리포트를 생성하는 기능.

1.3 데이터베이스의 방식의 중요한 특징을 설명하고, 기존의 파일처리 시스템을 사용하는 경우에 비하여 다른 점을 논의하라.
파일처리 방식에서는 소프트웨어 응용을 프로그래밍하는 작업의 일환으로 사용자가 특정한 소프트웨어 응용을 위하여 필요한 파일들을 별도로 정의하고 구현한다. 각각의 응용 프로그램들은 자유롭게 데이터 항목들을 독립적으로 명명할 수 있다.
데이터베이스 방식에서는, 데이터는 한 번만 저장되며 여러 사용자가 공유하게 된다. 데이터의 이름은 한 번만 정의되고, 정의와 트랜잭션 및 응용프로그램에서 반복해서 사용된다. 중요한 특징은 다음과 같다.
- 데이터베이스 시스템의 자기 기술성
- 프로그램과 데이터의 격리 및 데이터 추상화
- 데이터에 대한 다중 뷰의 제공
- 데이터의 공유와 다수 사용자 트랜잭션 처리

1.4 데이터베이스 관리자와 데이터베이스 설계자의 역할을 무엇인가?
데이터베이스 관리자는 데이터베이스나 DBMS, 관련 소프트웨어를 관리하고 감독한다. 즉, 데이터베이스에 대한 접근을 감독하며 자원의 사용을 모니터링하고 조정한다. 데이터베이스의 보안이나 시스템의 성능 문제를 책임지며 소프트웨어나 하드웨어 자원을 구입한다.
데이터베이스 설계자는 데이터베이스에 저장될 데이터를 선정하고 데이터를 나타내고 저장하는 구조를 정의하는 역할을 담당한다. 사용자 그룹들과 만나서 요구사항들을 도출하고 그것을 만족하는 데이터베이스 뷰를 개발한다.

1.5 데이터베이스의 최종 사용자들을 분류하고 각자의 주요 업무를 논하라.
캐주얼 사용자 - 데이터베이스에 가끔 접근하지만 매전 다른 정보를 찾는다. 정교한 데이터베이스 질의어를 사용하여 데이터를 요구한다. 중상급의 관리자.
초보 사용자 - 미리 잘 프로그램되고 테스트된 기작성 트랜잭션들을 사용하여 데이터베이스를 검색하고 변경하는 사용자.
전문 사용자 - 복잡한 요구사항을 가진 엔지니어, 과학자, 비즈니스 분석가 등.
독자적인 사용자 - 메뉴나 그래픽 사용자 인터페이스를 제공하는, 편리한 패키지를 사용하여 개인 데이터베이스를 유지하는 사용자.

1.6 DBMS가 제공해야 할 기능들을 설명하라.
중복성의 제어
권한이 없는 접근의 통제
프로그램 객체를 위한 지속성 기억 공간 제공
효율적인 질의처리를 위한 저장 구조 제공
백업과 회복 제공
다수의 사용자 인터페이스 제공
데이터 간의 복잡한 관계의 표현
무결성 제약조건의 시행
규칙을 사용한 추론과 수행
표준 강화
응용 개발 시간의 단축
융통성
최신 정보의 가용성
규모의 경제성

1.7 데이터베이스 시스템과 정보 검색 시스템 사이의 차이점을 논하라.
정보 검색 시스템 - 데이터베이스 시스템을 사용하는 한 분야. 키워드를 사용하여 데이터를 색인하고 카탈로그화 한다. 이러한 키워드에 기반하여 문서들을 찾는 것을 다루며 문서처리와 자유로운 비정형 텍스트 처리를 다룬다.
데이터베이스 시스템- 사용자의 질의를 처리, 수행하는 과정과 데이터베이스의 저장, 조작 등에 관한 모든 처리를 다룬다.
posted by 나는너의힘
: