Download presentation
Presentation is loading. Please wait.
1
II. XML과 Database 연동 [Beginning XML, 제13장]
멀티미디어 데이터베이스 ( ~11.1)
2
목차 1. 관계형 Database 예제 2. 기존의 Database 사용하기 3. XML을 Database에 통합하기
[교재] Beginning XML, David Hunter 외 5인 공저, 정보문화사, 2001. 제13장 XML과 데이터베이스, pp 1. 관계형 Database 예제 2. 기존의 Database 사용하기 3. XML을 Database에 통합하기 4. Database 제작사와 XML 1) Microsoft SQL Server 2) Oracle XDK
3
1. 관계형 Database 예제 RDB의 특징 예제 테이블을 사용하여 데이터를 구조화 : Field, Record
초점은 Application이 아니라 데이터 그 자체 예제 Parts table, – Customer table Order table item description E16-25A 책상 E25-25A 소파 account_no name home_phone work_phone 125692 홍길동 02) 02) 125693 고소영 02) 02) 125694 이몽룡 043) 02) order_no account_no item quantity date 123587 125692 E16-25A 16 2001/9/1 123588 1 2001/10/1 123589 125694 20 123590 125693 E25-25A 5
4
SQL (Structured Query Language)
SELECT name FROM Customer WHERE account_no = ‘125692’ 결과 : SELECT Order.order_no, Order.account_no, Customer.name, Order.item, Parts.description, Order.quantity, Order.date FROM Order, Customer, Parts WHERE Order.order_no = ‘123587’ AND Customer.account_no = Order.account_no AND Parts.item = Order.item Recordset : ADO(Active Data Objects) 기능 Uniqueness (Database Integrity) : Primary key name 홍길동 order_no account_no item quantity date 123587 125692 E16-25A 16 2001/9/1 name 홍길동 description 책상
5
SQL Join Normalization
SELECT o.order_no, o.account_no, c.name, o.item, p.description, o.quantity, o.date FROM Parts p INNER JOIN Order o ON p.item = o.item INNER JOIN Customer c ON o.account_no = c.account_no WHERE o.order_no = ‘123587’ Normalization Database Integrity, easy to application, but speed (need to join) vs. Denormalization o.order_no o.account_no c.name o.item p.description o.quantity o.date 123587 125692 홍길동 E16-25A 책상 16 2001/9/1
6
2. 기존의 Database 사용하기 N-계층 구조 N-계층 구조의 장점 N-계층 구조에 XML 적용 => 어느 계층?
(경우에 따라stored procedure 사용) Database와 Business Objects가 서로 통신 (예, ADO Recordset) application 논리에 따라 presentation과 data층 통신 사용자와 의사소통 N-계층 구조의 장점 개발자 역할이 단순화 : 각 계층 별로 변경이 용이하고, 재사용성 증가 분산 시스템의 확장성 및 보안이 좋다. N-계층 구조에 XML 적용 => 어느 계층? Data services Data Objects Business Objects Presentation
7
이기종 분산 환경의 예 XML을 사용한 분산 환경 구축 BizTalk, SOAP, XML-RPC 등 DB2 SQL server
Oracle SQL COM 표준 인터페이스 (Component Object Model) 예, ADO VB, JDBC DB2 data object SQL server data object Oracle data object XML 언어 사용 저장 - 서버에 독립적, - HTTP 프로토콜 통신 Business Object Business Object . . . 서버 독립적 XML 표현 ASP, CGI, VB, Java => XML, HTML, etc. Presentation Presentation
8
예제 코드 Data Object로부터 XML 결과 받기 예제 코드
Data Object 생성하고, 결과 XML문서를 작성하는 VB 코드 Database 에 접속하기 위하여 ADO(ActiveX Data Object) 객체 사용 MSXML 파서를 사용하여 XML 문서 생성 예제 코드 ADO의 Connection 객체 사용하여 DB에 접속 DB를 작동하기 위한 SQL 구문 준비 => SQL 실행 & 결과 XML 문서 생성 Dim cnnDatabaseConnection AS ADODB.Connection Set cnnDatabaseConnection = New ADODB.Connection … Dim strSQL As String strSQL = “SELECT name FROM Customer WHERE account_no = ‘125692’ ”
9
Connection 객체의 Execute() 메소드가 SQL 구문 호출 결과는 ADO의 Recordset 객체로
문서 생성 : MSMXL의 DOM 객체 사용 결과 Dim rsResults AS ADODB.Recordset Set rsResults = cnnDatabaseConnection.Execute(strSQL) Dim objXML As MSXML.DOMDocument Set objXML = New MSXML.DOMDocument objXML.loadXML “<root> <name/> </root>” ‘ 초기 문서 생성 objXML.selectSingleNode(“/root/name”).Text = rsResults(“name”).Value ‘ SQL 결과를 XML 문서에 추가 <root> <name /> </root> <root> <name> 홍길동 </name> </root>
10
3. XML을 Database에 통합하기 비정규화 방법으로 저장하기
XML문서 그대로 저장, primary key는 별도로 저장 예제) Order table SELECT order_xml FROM Order WHERE order_no = ‘123587’ order_no account_no order_xml 123587 125692 <?xml version=“1.0”?> <Order number=“123587”> <Account number=“125692”> <Name>홍길동</Name> <Homephone>02) </ Homephone> <Workphone>02) </ Workphone> </Account> <Item number=“E16-25A”> <Description>책상</Description> <Quantity>16</Quantity> </Item> <Date>2001/9/1</Date> </Order> . . .
11
Staging Database XML 형식의 데이터 Front-end : 비정규화 데이터를 임시 저장 장소에 보관
Back-end : 정규화된 RDB에 저장 application 사용 시 편리 : join 필요 없음, 간단한 SQL Staging DB에 임시로 보관, 일정 기간 후 삭제 => 공간 문제 해결 제약점 : 데이터를 가공하여 사용할 때 추가 작업 필요 예) 폼기반 웹 응용 : 폼 입력시 최종 submit에만 DB에 전송 XML 형식의 데이터 Data Object에서 XML 문서를 SELECT 혹은 INSERT하는 SQL명령 Data Object에서 수행 작업이 감소 => 더 많은 응용 가능 Front-end 응용에서는 XML의 모든 장점 적용 가능 XML문서를 분할하여 저장하는 것도 가능 => 여러 기법 적용
12
예제 간단한 Data Object 처리 Dim cnnDatabaseConnection AS ADODB.Connection
Set cnnDatabaseConnection = New ADODB.Connection Dim strSQL As String strSQL = “SELECT order_xml FROM Order WHERE order_no = ‘123587’ ” Dim rsResults AS ADODB.Recordset Set rsResults = cnnDatabaseConnection.Execute(strSQL) ‘ 여기까지는 동일 Dim strResult As String strResult = rsResults(“order_xml”).Value ‘ DOM 필요 없음 : ‘ objXML = New MSXML.DOMDocument, loadXML, selectSingleNode( ) ‘ 이미 XML 문서 형태로 되어 있음
13
4. Database 제작사와 XML XML과 Database는 서로 보완 관계 XML 통합기술
Data Object 제작시 쉽게 작업하도록 XML 지원 기능제공 Microsoft IE : MSXML 내장 Microsoft SQL Server Oracle XDK (XML Developer’s Kit) XML SQL Utility eXcelon : 전문 XML Database
14
Microsoft SQL Server SQL Server 2000 ISAPI filter 사용 템플리트 파일 사용
SQL 예제 : SELECT name FROM Customer ISAPI filter 사용 템플리트 파일 사용 결과 <root> <sql:query xmlns:sql=“urn:schemas-microsoft-com:xml-sql”> SELECT name FROM Customer FOR XML RAW </sql:query> </root> <?xml version=“1.0” ?> <root> <row name =“홍길동” /> <row name =“고소영” /> <row name =“이몽룡” /> </root>
15
템플리트 파일 사용 예제2 http://서버명/DB명/order.xml <?xml version=“1.0” ?>
=> 원하는 order_no 를 골라서 선택하려면 <?xml version=“1.0” ?> <root> <sql:query xmlns:sql=“urn:schemas-microsoft-com:xml-sql”> <! [CDATA [ SELECT Order.order_no, Order.account_no, Customer.name, Order.item, Parts.description, Order.quantity, Order.date FROM Order, Customer, Parts WHERE Order.order_no = ‘123587’ AND Customer.account_no = Order.account_no AND Parts.item = Order.item FOR XML RAW ] ] > </sql:query> </root>
16
템플리트 파라메터 사용 IE 출력 : 스타일 시트 선언 포함
IE 출력 : 스타일 시트 선언 포함 <?xml version=“1.0” ?> <?xml-stylesheet ?> <root> <sql:query ordnum=‘ ’ xmlns:sql=“urn:schemas-microsoft-com:xml-sql”> <! [CDATA [ SELECT Order.order_no, Order.account_no, Customer.name, Order.item, Parts.description, Order.quantity, Order.date FROM Order, Customer, Parts WHERE Order.order_no = ? AND Customer.account_no = Order.account_no AND Parts.item = Order.item FOR XML RAW ] ] > </sql:query> </root>
17
Oracle XDK 자바용 XML SQL Utility Java XSQL sublet 작성
SQL 예제 : SELECT name FROM Customer 결과 Java XSQL sublet 작성 <?xml version=“1.0” ?> <ROWSET> <ROW id=“1”> <name>홍길동</name> </ROW> <ROW id=“2”> <name>고소영</name> </ROW> <ROW id=“3”> <name>이몽룡</name> </ROW> </ROWSET> <?xml version=“1.0” ?> <?xml-stylesheet ?> <query find=“%” sort=“ENAME” > SELECT * FROM EMP WHERE ENAME LIKE ORDER BY </query>
18
XSQL 템플리트 파라메터 사용 예제 http://서버명/DB명/order.xsql?ordnum=‘123587’
<?xml version=“1.0” ?> <?xml-stylesheet ?> <query ordnum=‘ ’ > <! [CDATA [ SELECT Order.order_no, Order.account_no, Customer.name, Order.item, Parts.description, Order.quantity, Order.date FROM Order, Customer, Parts WHERE Order.order_no = AND Customer.account_no = Order.account_no AND Parts.item = Order.item ] ] > </query>
Similar presentations