Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
II. XML과 Database 연동 [Beginning XML, 제13장] 멀티미디어 데이터베이스 (2001.10.23~11.1) 임순범 숙명여대 정보과학부 멀티미디어학과 1 목차 [교재] Beginning XML, David Hunter 외 5인 공저, 정보문화사, 2001. 제13장 XML과 데이터베이스, pp.625-654. 1. 관계형 Database 예제 2. 기존의 Database 사용하기 3. XML을 Database에 통합하기 4. Database 제작사와 XML 1) Microsoft SQL Server 2) Oracle XDK 2 1. 관계형 Database 예제 • RDB의 특징 – 테이블을 사용하여 데이터를 구조화 : Field, Record – 초점은 Application이 아니라 데이터 그 자체 • 예제 – Parts table, – Customer table item description account_no name home_phone work_phone E16-25A 책상 125692 홍길동 02)555-1212 02)555-2121 E25-25A 소파 125693 고소영 02)555-1111 02)555-1112 125694 이몽룡 043)854-9919 02)555-1010 – Order table order_no account_no item quantity date 123587 125692 E16-25A 16 2001/9/1 123588 125692 E16-25A 1 2001/10/1 123589 125694 E16-25A 20 2001/10/1 123590 125693 E25-25A 5 2001/10/1 3 • SQL (Structured Query Language) SELECT name FROM Customer WHERE account_no = ‘125692’ • 결과 : name 홍길동 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 order_no account_no 123587 125692 item quantity date name description E16-25A 16 2001/9/1 홍길동 책상 – Recordset : ADO(Active Data Objects) 기능 – Uniqueness (Database Integrity) : Primary key 4 • SQL Join – 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’ o.order_no o.account_no c.name 123587 125692 o.item 홍길동 E16-25A p.description o.quantity 책상 16 o.date 2001/9/1 • Normalization – Database Integrity, easy to application, but speed (need to join) – vs. Denormalization 5 2. 기존의 Database 사용하기 • N-계층 구조 Data services 모든 데이터 저장, 보통 경우는 Database (경우에 따라stored procedure 사용) Data Objects Database와 Business Objects가 서로 통신 (예, ADO Recordset) Business Objects Presentation application 논리에 따라 presentation과 data층 통신 사용자와 의사소통 • N-계층 구조의 장점 – 개발자 역할이 단순화 : 각 계층 별로 – 변경이 용이하고, 재사용성 증가 – 분산 시스템의 확장성 및 보안이 좋다. • N-계층 구조에 XML 적용 => 어느 계층? 6 • 이기종 분산 환경의 예 DB2 SQL server Oracle DB2 data object SQL server data object Oracle data object Business Object Presentation Business Object ... Presentation • XML을 사용한 분산 환경 구축 SQL COM 표준 인터페이스 (Component Object Model) 예, ADO VB, JDBC XML 언어 사용 저장 - 서버에 독립적, - HTTP 프로토콜 통신 서버 독립적 XML 표현 ASP, CGI, VB, Java => XML, HTML, etc. – BizTalk, SOAP, XML-RPC 등 7 예제 코드 • Data Object로부터 XML 결과 받기 – Data Object 생성하고, 결과 XML문서를 작성하는 VB 코드 – Database 에 접속하기 위하여 ADO(ActiveX Data Object) 객체 사용 – MSXML 파서를 사용하여 XML 문서 생성 • 예제 코드 – ADO의 Connection 객체 사용하여 DB에 접속 – DB를 작동하기 위한 SQL 구문 준비 Dim cnnDatabaseConnection AS ADODB.Connection Set cnnDatabaseConnection = New ADODB.Connection … Dim strSQL As String strSQL = “SELECT name FROM Customer WHERE account_no = ‘125692’ ” => SQL 실행 & 결과 XML 문서 생성 8 – Connection 객체의 Execute() 메소드가 SQL 구문 호출 – 결과는 ADO의 Recordset 객체로 Dim rsResults AS ADODB.Recordset Set rsResults = cnnDatabaseConnection.Execute(strSQL) – 문서 생성 : MSMXL의 DOM 객체 사용 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> 9 3. XML을 Database에 통합하기 • 비정규화 방법으로 저장하기 – XML문서 그대로 저장, primary key는 별도로 저장 – 예제) Order table order_no account_no order_xml 123587 125692 <?xml version=“1.0”?> <Order number=“123587”> <Account number=“125692”> <Name>홍길동</Name> <Homephone>02)555-1212</ Homephone> <Workphone>02)555-2121</ Workphone> </Account> <Item number=“E16-25A”> <Description>책상</Description> <Quantity>16</Quantity> </Item> <Date>2001/9/1</Date> </Order> ... – SELECT order_xml FROM Order WHERE order_no = ‘123587’ 10 • Staging Database – – – – – – 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문서를 분할하여 저장하는 것도 가능 => 여러 기법 적용 11 예제 • 간단한 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 문서 형태로 되어 있음 12 4. Database 제작사와 XML • XML과 Database는 서로 보완 관계 – XML의 강정과 유연성을 활용하는 방향 – 데이터 검색 후 XML로 변경, 더 나아가 XML형태로 저장 • XML 통합기술 – Data Object 제작시 쉽게 작업하도록 XML 지원 기능제공 – Microsoft • IE : MSXML 내장 • Microsoft SQL Server – Oracle • XDK (XML Developer’s Kit) • XML SQL Utility – eXcelon : 전문 XML Database 13 Microsoft SQL Server • SQL Server 2000 – SQL 예제 : SELECT name FROM Customer • ISAPI filter 사용 http://서버명/DB명?sql=SELECT+name+FROM+Customer+FOR+XML+RAW • 템플리트 파일 사용 http://서버명/DB명/name.xml <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> 14 • 템플리트 파일 사용 예제2 http://서버명/DB명/order.xml <?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> => 원하는 order_no 를 골라서 선택하려면 15 • 템플리트 파라메터 사용 http://서버명/DB명/order.xml?ordnum=‘123587’ <?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> – IE 출력 : 스타일 시트 선언 포함 16 Oracle XDK • 자바용 XML SQL Utility – SQL 예제 : SELECT name FROM Customer – 결과 <?xml version=“1.0” ?> <ROWSET> <ROW id=“1”> <name>홍길동</name> </ROW> <ROW id=“2”> <name>고소영</name> </ROW> <ROW id=“3”> <name>이몽룡</name> </ROW> </ROWSET> • Java XSQL sublet 작성 <?xml version=“1.0” ?> <?xml-stylesheet . . . ?> <query find=“%” sort=“ENAME” > SELECT * FROM EMP WHERE ENAME LIKE ‘%{@find}%’ ORDER BY {@sort} </query> – http://서버명/DB명/emp.xsql?find=T&sort=EMPNO 17 • 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 = {@ordnum} AND Customer.account_no = Order.account_no AND Parts.item = Order.item ]]> </query> 18