Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다. 데이터저장에는 Berkeley DB를이용한다. 1. 요구사항 프로젝트 1-1 및프로젝트 1-2에서구현한프로그램을이용하여야한다. 2장에나열된모든 DML 구문을처리할수있어야한다. 테이블데이터를파일 ( 단일파일혹은여러개의파일 ) 에저장하여야한다. DBMS 콘솔을종료한후다시실행하더라도데이터가남아있어야한다. 테이블데이터저장에는 Berkeley DB를이용한다. 2 장에는실행예시와기본가정및각상황별로출력해야하는메시지의종류가나열되어있다. 메시지의내 용은메시지정의파일을참조한다. 2. SQL 2.1 INSERT DB_2015-12345> insert into account values(9732, 'Perryridge'); DB_2015-12345> The row is inserted 튜플 (tuple) 삽입에성공한다면, 테이블에값을삽입하고 InsertResult에해당하는메시지를출력한다. 테이블이존재하지않을경우, NoSuchTable에해당하는메시지출력 타입이맞지않는다면, InsertTypeMismatchError에해당하는메시지출력 null 값을가질수없는컬럼에 null 값을삽입하려고할경우,
InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, InsertDuplicatePrimaryKeyError 에해당 하는메시지출력 실행결과가 foreign key 제약에위배된다면, InsertReferentialIntegrityError 에해 당하는메시지출력 튜플을삽입할때에는다음과같은가정을따른다. 2.2 DELETE char 컬럼타입에명시된최대길이보다긴문자열을삽입하려할때는, 에러를발생하지않고 길이에맞게자른 (truncate) 문자열을삽입한다. 테이블의컬럼이름은중복되지않는다. DB_2015-12345> delete from account where branch_name = 'Perryridge'; DB_2015-12345> 5 row(s) are deleted 입력한쿼리가올바르다면, 조건에해당되는튜플을삭제하고 DeleteResult(#count) 에해당하는메시지를출력한다. 실행결과, referential integrity 때문에일부튜플은삭제할수없었다면 DeleteReferentialIntegrityPassed(#count) 에해당하는메시지를추가로출력 DeleteResult(#count) 와 DeleteReferentialIntegrityPassed(#count) 모두출력하여야한다. Referential interegrity와관련된자세한사항은 About Referential Integrity Constraints 문서를참조 테이블이존재하지않을경우, NoSuchTable에해당하는메시지출력 where 절에서비교연산자 (>, <, =,!=, >=, <=) 로비교할수없는값들을서로비교할경우, WhereIncomparableError에해당하는메시지출력 where 절에서명시되지않은테이블을참조할경우, WhereTableNotSpecified에해당하는메시지출력 예 : 실행예시의 where 절에서 account 테이블이아닌다른테이블을참조할경우 where 절에서존재하지않는컬럼을참조할경우, WhereColumnNotExist에해당하는메시지출력
where 절에서참조가모호한경우, WhereAmbiguousReference 에해당하는메시지출력 다른테이블이참조하고있는테이블을삭제하려고할경우, DropReferencedTableError(#tableName) 에해당하는메시지출력 튜플을삭제할때에는다음과같은가정을따른다. 2.3 INSERT 아래경우에해당될때에만두값을비교할수있다. char 타입의값은길이와상관없이다른 char 타입의값과비교할수있다. int 타입의값은다른 int 타입의값과비교할수있다. date 타입의값은다른 date 타입의값과비교할수있다. null 값은다른모든타입의값과비교할수있다. null 값과다른값을비교할경우, 비교결과는 true, false, unknown 중하나이다. 자세한사항은교재및슬라이드를따른다. where 절이없다면모든튜플을삭제한다. DB_2015-12345> select * from account; ACCOUNT_NUMBER BRANCH_NAME BALANCE A-101 Downtown 500 A-102 Perryridge 400 A-201 Brighton 900 A-215 Mianus 700 A-217 Brighton 750 A-222 Redwood 700 A-305 Round Hill 350 DB_2015-12345> select customer_name, borrower.loan_number, amount from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = 'Perryridge'; CUSTOMER_NAME LOAN_NUMBER AMOUNT Adams L-16 1300 Hayes L-15 1500 입력한쿼리가올바르다면, 결과를예시와같은형식으로출력한다. from 절에있는테이블중존재하지않는테이블이있다면, SelectTableExistenceError(#tabName) 에해당하는메시지를출력
select 뒤에나오는컬럼이름을해석하는데에문제가있다면, SelectColumnResolveError(#colName) 에해당하는메시지를출력 컬럼이존재하지않거나컬럼이름이모호한경우 select 쿼리를처리할때에는다음과같은가정을따른다. where 절에대한조건은 delete 쿼리와같다. where 절이없다면모든튜플을출력한다. 3. 개발환경 Java Eclipse Oracle Berkeley DB API 4. 제출 1. Runnable jar 파일 파일명 : PRJ1-3_ 학번.jar ( 예 : PRJ1-3_2015-12345.jar) jar 파일생성방법은강의홈페이지의공지사항을참조 2. Eclipse 프로젝트 소스파일은반드시적절한주석을포함하여야함 3. 리포트 파일명 : PRJ1-3_ 학번.pdf ( 예 : PRJ1-3_2015-12345.pdf) 반드시 pdf 포맷으로제출 포함되어야하는내용 핵심모듈과알고리즘에대한설명 구현한내용에대한간략한설명 ( 제시된요구사항중구현하지못한부분이있다면 ) 구현하지못한내용 가정한것들 컴파일과실행방법 프로젝트를하면서느낀점
위의 3가지파일을압축하여 lecture@europa.snu.ac.kr로제출 파일명 : PRJ1-3_ 학번.zip ( 예 : PRJ1-3_2015-12345.zip) 메일제목 : [DB Project1-3] 학번, 이름 ( 예 : [DB Project1-3] 2015-12345, 박정혁 ) 리포트의 hard copy는 11월 12일오후 6시까지 301동 420호로제출 Hard copy와 soft copy를모두제출하여야함 5. 성적관련사항 제출기한이후 24시간이내제출시 10% 감점 제출기한이후 24시간이후 48시간이내제출시 20% 감점 제출기한 48시간이후에는점수없음 부정행위는 0점처리 다른사람의코드를참조하는행위 이전에수강한사람의코드를참조하는행위 6. References Oracle Berkeley DB http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html 프로젝트관련질문은 etl 게시판을이용!