Programming -

[웹글] Lecture Note:Introduction to Database System and Applications (2)

글쓴이 : 유광희 날짜 : 2007-09-04 (화) 15:26 조회 : 13029
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
  <title>데이터베이스를 사랑하는 사람들의 모임 데이터베이스 사랑넷</title>
  <link rel="stylesheet" type="text/css" href="/main.css" />
  <script type="text/javascript" src='js/common.js'></script>
<script type="text/javascript">
function checktopic(){
    if(self.document.searchform.criteria.options[self.document.searchform.criteria.selectedIndex].value == ""){
<table border='0' cellpadding='0' cellspacing='0' width='100%' id='mainhead'>
<tr><td style='font-size: 18pt;font-family: arial;color: navy;background-color: #d0d0d0'><a href='/?inc=front&criteria=dbms'><img src='/images/dsn_logo.gif' style='border:0px;margin:0px;padding:0px' width='290' height='27' alt='' /></a></td>
<td valign='bottom' align='right' style='background-color: #d0d0d0'>
<form action='/' id='searchform' name='searchform'>
<select name='criteria' style='font-family: Arial;font-size: 10pt'>
<option value='' >토픽을 선택하세요</option>
<option value='dbms' selected>DBMS</option>
<option value='mysql' >MySQL</option>
<option value='pgsql' >PostgreSQL</option>
<option value='firebird' >Firebird</option>
<option value='oracle' >Oracle</option>
<option value='informix' >Informix</option>
<option value='sybase' >Sybase</option>
<option value='mssql' >MS-SQL</option>
<option value='db2' >DB2</option>
<option value='cache' >Cache</option>
<option value='unisql' >CUBRID</option>
<option value='ldap' >LDAP</option>
<option value='mmdbms' >MMDBMS</option>
<option value='notice' >공지사항</option>
<option value='free' >자유게시판</option>
<option value='jobs' >구인|구직</option>
<option value='admin' >운영게시판</option>
<input name='keyword' onfocus='checktopic()' value="" maxlength='200' size='30' accesskey="z" />
<input type='submit' value='찾기' />
<table border='0' cellpadding='0' cellspacing='0' class='maintable'>
<tr><td valign='top' align='center' style='background-color:#F7F7FC;width: 130px;font-size: 10pt'>
<form id='loginform' action='login.php' method='post'>
<input type='hidden' name='ret_url' value='/index.php?inc=read&aid=616&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1&PHPSESSID=a0b5ca2956d39dc50f8ede4a492b7320' />
<table border='0' cellspacing='0' cellpadding='0'>
<td align='center'>UserID</td>
<td><input class='textinput' name='id' size='8' value="" maxlength='80' style='width: 70; height: 20' /></td>
<td align='center'>Passwd</td>
<td><input class='textinput' type='password' name='passwd' size='8' maxlength='20' style='width: 70; height: 20' /></td>
<tr><td colspan='2' align='center'>
<input type='submit' value='Login' class='imagebutton' style='width: 60px' />
<input type='button' value='회원가입' class='imagebutton' onclick='openaccount(false)' style='width: 60px' />
<div  style='margin-top: 10px;width:126px;padding-top: 2px;font-weight:bold;background-color: #80BFFF; border-top: 1px solid #BBD7FC; border-bottom: 1px solid #377DC5'>Database</div>
<div style='text-align: left;padding-left: 1px;background-color: #ffffee'><a href='/?criteria=dbms' style='color:brown; font-weight: bold'><nobr>ㆍDBMS</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=mysql' style='color:navy'><nobr>MySQL</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=pgsql' style='color:navy'><nobr>PostgreSQL</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=firebird' style='color:navy'><nobr>Firebird</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=oracle' style='color:navy'><nobr>Oracle</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=informix' style='color:navy'><nobr>Informix</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=sybase' style='color:navy'><nobr>Sybase</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=mssql' style='color:navy'><nobr>MS-SQL</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=db2' style='color:navy'><nobr>DB2</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=cache' style='color:navy'><nobr>Cache</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=unisql' style='color:navy'><nobr>CUBRID</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=ldap' style='color:navy'><nobr>LDAP</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=mmdbms' style='color:navy'><nobr>MMDBMS</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href=/database/database.phtml target=_blank style='color:navy'><nobr>DB 문서들</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href=/study/study.phtml target=_blank style='color:navy'><nobr>스터디</nobr></a></div>
<div  style='margin-top: 10px;width:126px;padding-top: 2px;font-weight:bold;background-color: #7FBFC0; border-top: 1px solid #A5D8DD; border-bottom: 1px solid #377DC5'>Community</div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=notice' style='color:navy'><nobr>공지사항</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=free' style='color:navy'><nobr>자유게시판</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=jobs' style='color:navy'><nobr>구인|구직</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href=/gallery style='color:navy'><nobr>DSN 갤러리</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=thanks' style='color:navy'><nobr>도움주신분들</nobr></a></div>
<div  style='margin-top: 10px;width:126px;padding-top: 2px;font-weight:bold;background-color: #EF9F3F; border-top: 1px solid #F8D6AE; border-bottom: 1px solid #377DC5'>Admin</div>
<div style='text-align: left;padding-left: 15px'><a href='/?criteria=admin' style='color:navy'><nobr>운영게시판</nobr></a></div>
<div style='text-align: left;padding-left: 15px'><a href=/recent.php style='color:navy'><nobr>최근게시물</nobr></a></div>
<td valign='top'>
<script type="text/javascript">
function rmattach(num){
    if(confirm("선택한 첨부파일을 정말 삭제 하시겠습니까?")){
        self.location.href = "/?inc=rmattach&num=" + num;
function getpasswd(inc, cid){
        if((navigator.userAgent.indexOf("MSIE") > 0) && (navigator.userAgent.indexOf("Windows") > 0)){
                var passwd = showModalDialog('html/getpasswd.php', '', 'help:no; dialogWidth:300px; dialogHeight:100px; status:no; scroll: no;');
               = inc;
                        commandform.passwd.value = passwd;
                        commandform.cid.value = cid;
        else {
                var myleft = (screen.width - 300) / 2;
                var mytop = (screen.height - 110) / 2;
                var passwdwin = open('html/getpasswd.php?criteria=dbms&subcrit=qna&aid=616&inc=' + inc + "&cid=" + cid, 'passwdwin', 'Width=300, height=100, left=' + myleft + ', top=' + mytop);
function doReply(url){
        var myleft = (screen.width - 600) / 2;
        var mytop = (screen.height - 500) / 2;
        if(url) var replywin = open(url, 'replywin', 'scrollbars=yes, width=600, height=510, left=' + myleft + ', top=' + mytop);
        else var replywin = open('?inc=write&iscomment=1&pid=616&criteria=dbms&subcrit=qna&page=1', 'replywin', 'width=600, height=510, left=' + myleft + ', top=' + mytop);
<form id='commandform' action='' method='post' name='commandform'>
<div style='height: 28px;padding-top: 4px;background-color:#f0f0f0; text-align:center'>
<input type='hidden' name='inc' value='' />
<input type='hidden' name='criteria' value='dbms' />
<input type='hidden' name='subcrit' value='qna' />
<input type='hidden' name='aid' value='616' />
<input type='hidden' name='id' value='' />
<input type='hidden' name='limit' value='20' />
<input type='hidden' name='keyword' value="" />
<input type='hidden' name='cid' value='' />
<input type='hidden' name='page' value='1' />
<input type='hidden' name='passwd' value='' />
<table width='95%' border='0' style='font-size: 11pt'>
        <td style='color: navy; font-weight: bold;text-align:left'>DBMS Columns 616 게시물 읽기</td>
        <td><div style='text-align: right;white-space: nowrap;'> <a href='?criteria=dbms&subcrit=news'>News</a> | <b style='color: #A52A2A'>Q&A</b> | <a href='?criteria=dbms&subcrit=columns'>Columns</a> | <a href='?criteria=dbms&subcrit=tutorials'>Tutorials</a> | <a href='?criteria=dbms&subcrit=devel'>Devel</a> | <a href='?criteria=dbms&subcrit=files'>Files</a> | <a href='?criteria=dbms&subcrit=links'>Links</a></div></td>
<table width='100%' border='0'><tr><td valign='top'>
<table border='0' cellpadding='0' cellspacing='0' width='95%' style='margin-top: 5px;margin-bottom: 5px'>
        <td style='text-align: left'>
        <input class='imagebutton' type='button' value='새글' onclick='self.document.location.href="?inc=write&criteria=dbms&subcrit=columns"' />
        <input class='imagebutton' type='button' value='댓글(R)' onclick='doReply()' accesskey="r" />
        <input class='imagebutton' type='button' value='수정' onclick='alert("이 글을 수정 하려면 먼저 로그인 해주십시오.")' />
        <input class='imagebutton' type='button' value='삭제' onclick='alert("이 글을 삭제 하려면 먼저 로그인 해주십시오.")' />
        <input accesskey="l" type='button' class='imagebutton' value='목록(L)' onclick='self.document.location.href="?criteria=dbms&subcrit=qna&isback=&id=&limit=20&keyword=&page=1"' title='게시물의 목록을 봅니다' />
        <td align='right' valign='bottom' style='font-size:8pt;padding-right: 10px'>No. 616</td>
<table class='infotable' border='0' cellspacing='0' cellpadding='3' style='text-align: left'>
        <td class='rowtitle' colspan='6'>Lecture Note:Introduction to Database System and Applications (2)</td>
        <th class='infotable_th'><div style='white-space: nowrap;'>작성자</div></th><td class='rowmisc'><div style='white-space: nowrap;'>정재익(advance)</div></td>
        <th class='infotable_th'><div style='white-space: nowrap;'>작성일</div></th><td class='rowmisc'><div style='white-space: nowrap;'>2002-10-24 15:41:09</div></td>
        <th class='infotable_th'><div style='white-space: nowrap;'>조회수</div></th><td align='right' class='rowmisc'><div style='white-space: nowrap;'>1,862</div></td>
<table class='viewtable' style='text-align: left'>
        <td class='rowbody'>
<div style='background-color: #ffffdd; border: 1px solid #d0d0d0;padding: 5px'>첨부파일: <a href=''></a> (14,924bytes)</div>

<p><b><font color=BLUE>Class #03: 데이타 모델링 (1) </font></b></p>
<p> </p>
<p>in place March 16, 2002, lasted modified March 22, 2002, Working... </p>
<p> </p>
<p><b><font color=BLUE>데이타 모델 Data Model </font></b></p>
<p> </p>
<p><b>데이타 모델의 개요</b></p>
데이타 모델과 모델링의 정의
  데이타 모델 - 데이타베이스를 구현하기 위하여 서류상으로 만든 개념적인 모형
  데이타 모델링 -데이타 모델을 만드는 설계작업
데이타 모델링의 목적
  데이타베이스 구현시 지침
  발주자, 설계자, 프로그램어 사이의 의사소통
  구현 후의 유지 보수
  소요 자원 산출 (일정, HW/SW)
데이타 모델링의 순서
  개념적 설계
  논리적 설계
  물리적 설계 - Index
데이타 모델의 내용
  개체 - Entity
  속성 - Attributes
  객체간의 관계 - Relationship
  제약조건 - Integrity Constraints
<p> </p>
<p><b>개체와 관계 </b></p>
개체 Entity
  객체 (Object) - 관심을 가지고 있는 유형 무형의 대상 - 예) 자동차, 성적, 온도
  클래스 (Class) - 같은 속성을 가진 객체의 집합
  인스턴스 (Instance) - 속성에 특정한 값을 가지는 하나 하나의 객체
속성 Attributes
  개체를 구성하는 요소
  속성은 속성이름 (Attribut Name) 과 도메인(Domain)으로 구성되어 있  다.
  도메인은 속성이 가질수 있는 자료 값들의 집합
  속성의 종류는
      - 단일 속성 - 하나의 값만 가지는 속성
      - 복합 속성 - 두개 이상의 속성으로 구성된 속성 - 이름은 성과 이름이 라는 속성의 구성으로 이루어짐.
      - 유도 속성 - 다른 속성에서 유도될 수 있는 속성 - 생년월일로 부터 나이를 유도할 수 있음.
식별자와 키 Identifier and Key
  자료 검색을 위해 각 자료가 서로 구별되어야 함
  개체의 속성중에 각각의 인스탄스를 구별할 수 있도록 식별자(Identifer)를 선택한다.
  식별자로 활용될 수 있는 속성(Attribute)를 키(Key)라 함.
  키의 종류는
      - 후보 키(Candidate Key) - 개체들을 고유하게 식별할 수 있는 속성
      -기본 키(Primary Key) - 후보 키중에 대표로 선정된 키
      - 복합 키( Composite Key)- 두개 이상의 속성으로 구성된 키
      - 외부 키 - 다른 테이블의 기본 키로 사용되는 속성
      - 보조 키 - 복수개의 개체들을 식별할 수 있는 속성
관계와 사상 Relationship and Mapping
  각 개체 사이의 관계는 다음과 같은 종류가 있다 (Cardianlity) - 관계가 없는 개체도 고려
  일대 일 관계
  일대 다 관계
  다대 일 관계
  다대 다 관계
<p><b>데이타 모델 </b></p>
<p> </p>
<p>  데이타 모델의 개념 </p>
<p> </p>
<p>관심이 대상이 되는 현실세계의 대상과 대상의 변화를 컴퓨터(데이타베이스)에 표현하기 위한 방법 </p>
<p>자료구조, 자료간의 관계, 의미, 제약조건 등으로 구성 </p>
<p>데이타 모델의 3요소 </p>
<p>- 구조 (Data Structure) </p>
<p>- 연산 (Operations) </p>
<p>- 제약조건 (Integrity Constraints) </p>
<p>추상 자료형 (Abstract Data Type) - 자료구조와 관련 연산 및 제약조건 </p>
<p>개체-관계 데이타 모델 Entity-Relationship Model </p>
<p>목적에 부합되는 현실의 자료와 구성을 표현하는 모델 </p>
<p>1976 Peter Chen에 의해 제안 </p>
<p>개체-관계 도표 (Entity-Relationship Diagram)은 개체-관계 모델을 표현한 그림 </p>
<p>주로 정적인 자료 구조를 표현하며 시간에 따른 변화를 표현하는데 어려움이 있다. </p>
<p>자료 구조에 대한 연산을 표현하기 어렵다. </p>
<p>차수 (Degree) - 관계에 참여한 개체의 수 </p>
<p>관계에 의하여 생성된 개체 </p>
<p> </p>
<p> <img src=''>
<p>그림 3-1. 학생진로관리를 위한 ERD</p>
<p> </p>
<p><b>데이타 모델 </b></p>
<p>컴퓨터(데이타베이스)에서의 업무처리를 위한 모델 </p>
<p>개체-관계 모델을 다시 데이타 모델로 바꿈 </p>
<p>각 DBMS가 지원하는 데이타 모델에 의해 DBMS의 종류를 나눔 </p>
<p>ORACLE - 관계형 데이타베이스, Orion - 객체지향적 데이타베이스 </p>
<p> </p>
<p>데이타 모델의 종류 </p>
<p>관계 데이타 모델 (Relational Data Model) </p>
<p>- 개체를 Table을 이용하여 표현하고 개체간의 관계를 공통속성을 이용하여 표현 </p>
<p>- 개체와 개체은 포인터와 같이 직접적으로 연결되지 않고 독립적으로 존재하는 모델 </p>
<p>- 개체와 개체의 관계는 공통속성의 값을 이용하여 연결하며 연결에 방향성이 없다. </p>
<p>- 일반적으로 자료구조가 단순한 은행 업무등에 사용하며 현재 가장 많이 사용되는 모델이다. </p>
<p> </p>
<p> </p>
<p>그림 3-2. 학생진로관리를 위한 관계형 데이타 모델</p>
<p> </p>
<p>객체 지향적 데이타 모델 (Object-Oriented Data Model) </p>
<p>- 객체지향적 개념(Object Oriented Concept): 클래스, 객체, 객체 ID, 상속관계, 구성관계, 메쏘드, Encapsulation, Polymorphism을 지원하는 모델 </p>
<p>- 객체 ID라는 시스템 포인터를 사용한다. </p>
<p>- 사용자 정의 자료형(User Defined Data Type)이 가능한다 - Class Composition Relationship </p>
<p>- 메쏘드(혹은 Member Function)의 정의가 가능하다 - Abstract Data Type) </p>
<p>- 자료 구조와 Method의 Inheritance 가 가능하다 - Polymorphism </p>
<p> </p>
<p> </p>
<p>그림 3-3. 학생진로관리를 위한 객체지향적 데이타 모델</p>
<p> </p>
<p><b><font color=BLUE>References: </font></b></p>
<p> </p>
<p>introduction to Object-Oriented Concept (</p>
<p>- Object, classe, (class/instance) method, interface, message passing, class hierarchy, class composition, encapsulation and polymorphism </p>
<p>- See chapter 3.1, and we will discuss the "polymorphism" . </p>
<p>introduction to Object-Oriented Concept (2) (</p>
<p>- See chapter 4.1. </p>
<p>introduction to Object-Oriented Databases (</p>
<p>- See chapter 3.2. </p>
<p>introduction to Active Object-Oriented Databases (</p>
<p>- Event, Condition and Action Rules and TRIGGER and CONSTRAINTS </p>
<p>- See chapter 4.3 and 4.4. </p>
<p>An Example of Object-Oriented Database (Data Definition and Manipulation) (</p>
<p>- See chapter 4.1. </p>
<p>Comparison between Object Oriented and Relational Databases (</p>
<p>- Difference between Relational databases and object-oriented databases in data definition and manipulation. See the comparison example (</p>
<p>- See the figure 10 and the SOL specification in chapter 4.2.2. </p>
<p>- We will discuss the "reference" concept in chapter 4.1 again.</p>
<div style='text-align: right;width: 95%'>[<a href='#mainhead'>Top</a>]</div>
<table border='0' cellspacing='0' cellpadding='3' class='listtable'>
<col align='right' /><col style='text-align: left' /><col /><col /><col align='right' />
        <tr><th class='listtable_th'><div style='white-space: nowrap;'>No.</div></th>
        <th class='listtable_th'><div style='white-space: nowrap;'>제목</div></th>
        <th class='listtable_th'><div style='white-space: nowrap;'>작성자</div></th>
        <th class='listtable_th'><div style='white-space: nowrap;'>작성일</div></th>
        <th class='listtable_th'><div style='white-space: nowrap;'>조회</div></th>
<tr><td>775</td><td style='text-align: left'><a href='/?inc=read&aid=775&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>최고성능 DB 실체 밝힌다</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2003-06-19</div></td><td><div style='white-space: nowrap;'>3744</div></td></tr>
<tr><td>631</td><td style='text-align: left'><a href='/?inc=read&aid=631&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>JDBC Data Access API</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-11-05</div></td><td><div style='white-space: nowrap;'>1623</div></td></tr>
<tr><td>617</td><td style='text-align: left'><a href='/?inc=read&aid=617&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>Lecture Note:Introduction to Database System and Applications (3)</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-10-24</div></td><td><div style='white-space: nowrap;'>2171</div></td></tr>
<tr style='background-color: #aaaccb'><td>616</td><td style='text-align: left'><a href='/?inc=read&aid=616&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>Lecture Note:Introduction to Database System and Applications (2)</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-10-24</div></td><td><div style='white-space: nowrap;'>1862</div></td></tr>
<tr><td>615</td><td style='text-align: left'><a href='/?inc=read&aid=615&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>Lecture Note:Introduction to Database System and Applications (1)</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-10-24</div></td><td><div style='white-space: nowrap;'>2243</div></td></tr>
<tr><td>605</td><td style='text-align: left'><a href='/?inc=read&aid=605&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>IBM e-비즈니스 전략 : 타협속의 경쟁</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-10-16</div></td><td><div style='white-space: nowrap;'>1012</div></td></tr>
<tr><td>604</td><td style='text-align: left'><a href='/?inc=read&aid=604&criteria=dbms&subcrit=&id=&limit=20&keyword=&page=1'>KCG(Knowledge Capital Group) CRM Report</a></td><td><div style='white-space: nowrap;'>정재익</div></td><td><div style='white-space: nowrap;'>2002-10-16</div></td><td><div style='white-space: nowrap;'>1037</div></td></tr>
<td valign='bottom' width='190' style='border: 1px solid #d0d0d0'>
<div style='text-align: right;width: 95%;margin-top: 15px'>
<a href='' onclick=' = "_blank";'><img src='' alt='Valid XHTML 1.0!' height='31' width='88' style='border:0px' /></a>
<script type='text/javascript'>
self.document.title = "DBMS Columns 616 게시물 읽기 - DSN";
// -->
<div style='text-align:center;padding-top: 15px'>
<div style='width: 80%;border-top: 1px solid navy'>
All about the DATABASE... Copyleft 1999-2003 DSN, All rights reserved.
<div style='text-align:center'> 작업시간: 0.124초 </div>