Back to Home

DataBase System

Lesson123456791011121315

Lesson 14 : Object-Oriented Database



Lesson Plan
Section No.
Section 1
Section 2
Test
PDF file
PPT File


<<Prev pageCourse MapNext page>>

Print content of this page
Save content of this page

 

ภาษาเชิงวัตถุ

1. Object-Oriented Languages

ในการแสดงให้เห็นถึงแนวทางเชิงวัตถุ หลักการต่าง ๆ จะถูกนำไปใช้ในการเขียนโปรแกรมซึ่งสามารถทำได้วิธีใดวิธีหนึ่งในนี้

  1. นำหลักการเชิงวัตถุไปใช้เป็นเครื่องมือในการออกแบบ เพื่อดำเนินการในขั้นต่อไป ตัวอย่างเช่นการออกแบบฐานข้อมูลเชิงสัมพันธ์ เริ่มจากการออกแบบ E-R ไดอะแกรม จากนั้นก็แปลงไปเป็นรีเลชัน
  2. หลักการเชิงวัตถุถูกนำไปรวมในภาษาใดภาษาหนึ่ง เพื่อใช้ในการจัดการฐานข้อมูล ด้วยวิธีการนี้ก็มีอยู่หลาย ภาษาที่สามารถรวมหลักการเชิงวัตถุได้ ดังนี้
  • เพิ่มความสามารถเชิงวัตถุเข้าไปใน ภาษา SQL เพื่อให้สามารถจัดการกับชนิดข้อมูลที่ซับซ้อนได้ ซึ่งจะเรียกว่า Object-relational system
  • นำภาษาโปรแกรมที่มีลักษณะเชิงวัตถุอยู่แล้วมาเพิ่มความสามารถทางด้านฐานข้อมูลเข้าไป ซึ่งจะถูกเรียกว่า persistent programming languages

2. Persistent Programming Languages

Persistent data: คือข้อมูลที่ยังคงอยู่แม้ว่าโปรแกรมที่สร้างข้อมูลนั้นขึ้นมาได้ถูกปิดไปแล้วก็ตาม

Persistent programming language คือโปรแกรมภาษาที่เพิ่มส่วนสำหรับจัดการ persistent data ซึ่งแตกต่างจากภาษาที่รวม(embedded)เอา SQL เข้าไว้ในตัวภาษาอย่าน้อย 2 อย่างคือ

1. ในภาษาแบบ embedded ชนิดข้อมูลของ host language จะแตกต่างชนิดข้อมูลของภาษาจัดการข้อมูล ดังนั้นจึงเป็นหน้าที่ของนักเขียนโปรแกรมที่จะทำการแปลงชนิดข้อมูลระหว่าง host language และภาษาจัดการข้อมูล ซึ่งมีอุปสรรคหลายอย่างคือ

  • โปรแกรมที่ใช้ในการแปลงระหว่างอ๊อปเจ็กและทูเปิล จะไม่ได้มีการดำเนินการในเชิงวัตถุ ซึ่งอาจจะก่อให้เกิดความผิดพลาดขึ้นได้
  • การแปลงข้อมูลระหว่างข้อมูลที่อยู่ในรูปแบบเชิงวัตถุกับข้อมูลที่อยู่ในรูปแบบเชิงสัมพันธ์ จะต้องเขียนโปรแกรมเป็นจำนวนมาก

ในทางกลับกัน persistent programming language และภาษาสืบค้นข้อมูลถูกรวมเข้าด้วยกัน กับ host language และทั้งสองภาษาต่างก็มีการใช้งานชนิดข้อมูลชนิดเดียวกัน ดังนั้นอ๊อปเจ็กสามารถถูกสร้างและถูกจัดเก็บในฐานข้อมูล โดยไม่ต้องมีการเปลี่ยนแปลงรูปแบบใด ๆ ทั้งสิ้น

2. นักเขียนโปรแกรมใช้งานลักษณะ embedded SQL เพื่อไปดึงข้อมูลจากฐานข้อมูลเข้าสู่หน่วยความจำ ถ้ามีการปรับปรุงข้อมูลก็จะเขียนคำสั่งเพื่อสั่งให้นำข้อมูลบันทึกกลับลงไปสู่ฐานข้อมูล

ส่วนใน persistent programming language นั้น นักเขียนโปรแกรมสามารถจัดการกับ persistent data ได้โดยไม้ต้องมีการเขียนโปรแกรมเพื่อดึงข้อมูลหรือบันทึกข้อมูลกลับลงไปในฐานข้อมูล 

2.1 Persistence of Objects

  • ภาษาโปรแกรมเชิงวัตถุ สนับสนุนหลักการของอ๊อปเจ็กทั้งการนิยามอ๊อปเจ็ก การสร้างอ๊อปเจ็ก แต่อย่างไรก็ตามอ๊อปเจ็กเหล่านี้ก็เกิดขึ้นเพียงชั่วคราวเท่านั้น เมื่อปิดโปรแกรม อ๊อปเจ็กเหล่านั้นก็จะหายไป ดังนั้นขั้นตอนแรกคือต้องหาวิธีทำให้อ๊อปเจ็กยังคงอยู่ ไม่หายไปเมื่อปิดโปรแกรม ซึ่งก็มีอยู่หลายวิธีคือ
  • Persistence by class เป็นวิธีที่ง่ายที่สุดแต่ไม่เหมาะที่จะนำมาใช้งาน วิธีการนี้เป็นการประกาศว่าคลาสสร้างสร้างขึ้นเป็นแบบ persistent นั่นคืออ๊อปเจ็กทุกอ๊อปเจ็กของคลาสจะเป็น persistent อ๊อปเจ็กไปโดยปริยาย ซึ่งวิธีการนี้ไม่มีความยืดหยุ่น เนื่องจากมันถูกใช้ทั้งแบบชั่วคราวและ persistent ในคลาสเพียงคลาสเดียว ในระบบจัดการฐานข้อมูลเชิงวัตถุ การประกาศคลาสให้เป็นแบบ persistent จะถูกมองว่าเป็นคลาสที่สามารถทำให้ persist ได้ แทนที่จะมองว่าเป็นคลาสที่ persist
  • Persistence by creation วิธีการนี้เป็นการกำหนดรูปแบบในการสร้าง persistent อ๊อปเจ็ก โดยการเพิ่มรูปแบบสำหรับสร้างอ๊อปเจ็กชั่วคราว ดังนั้นอ๊อปเจ็กที่ถูกสร้างขึ้นจะเป็นแบบ persist หรือแบบชั่วคราว ก็ขึ้นอยู่กับตอนที่สร้างอ๊อปเจ็ก ว่าจะสร้างอย่างไร
  • Persistence by marking วิธีนี้จะทำการกำหนดให้อ๊อปเจ็กเป็น persistent หลังจากที่ได้ถูกสร้างขึ้นมา ทุก ๆ อ๊อปเจ็กถูกสร้างขึ้นมาแบบชั่วคราว แต่ถ้าอ๊อปเจ็กไหนต้องการที่จะให้คงอยู่หลังจากจบโปรแกรม ก็จะทำการกำหนดก่อนที่จะจบโปรแกรม
  • Persistence by reference อ๊อปเจ็กหนึ่งหรือหลาย ๆ อ๊อปเจ็กจะถูกกำหนดให้ persist ในลักษณะเป็น root ของอ๊อปเจ็ก ดังนั้นอ๊อปเจ็กทุกตัวที่ถูกอ้างถึงจาก root ก็จะเป็นแบบ persistent

2.2 Object Identity and Pointers

เมื่อ persistent object ถูกสร้าง มันจะถูกกำหนด persistent object identifier

แนวคิดของ object identifier มีลักษณะคล้าย กับ pointer แนวทางง่าย ๆ ในการสร้าง build-in identity คือ ใช้ pointer ชี้ไปที่ ตำแหน่งทางกายภาพของแหล่งเก็บข้อมูล โดยเฉพาะภาษาเชิงวัตถุอย่าง C++ มีการสร้าง

ความสัมพันธ์ระหว่างอ๊อปเจ็กกับตำแหน่งทางกายภาพในแหล่งเก็บข้อมูล อาจมีการเปลี่ยนแปลงได้ตลอดเวลา อย่างไรก็ตาม ได้มีการแบ่งระดับความความถาวรไว้ดังนี้

  • intraprocedure: Identity จะคงอยู่ในขณะที่กำลังทำคำสั่งของหนึ่งกระบวนความ(procedure)เช่น ตัวแปรชนิด local ภายในกระบวนความ
  • intraprogram: Identity จะคงอยู่ในขณะที่กำลังทำคำสั่งของหนึ่งโปรแกรมหรือคิวรี เช่นตัวแปรชนิด global
  • interprogram: Identity จะคงอยู่จากโปรแกรมหนึ่งไปสู่อีกโปรแกรมหนึ่ง เช่น pointers ไปยังข้อมูลในแฟ้มบนดิสก์ แต่มันสามารถเปลี่ยนแปลงได้ขึ้นอยู่กับวิธีการจัดเก็บข้อมูลในแฟ้มถ้ามีการเปลี่ยนแปลงระบบแฟ้ม
  • persistent: Identity จะคงอยู่ไม่เฉพาะตอนที่โปรแกรมกำลังทำงานเท่านั้น แต่จะเกี่ยวข้องกับกรปรับเปลี่ยนโครงสร้างของข้อมูลด้วย ซึ่งการคงอยู่ในลักษณะนี้จะถูกใช้ในระบบเชิงวัตถุ

2.3 Storage and Access of Persistent Objects

อ๊อปเจ็กถูกจัดเก็บในฐานข้อมูลอย่างไร ข้อมูลของแต่ละอ๊อปเจ็กก็จะถูกจัดเก็บแยกเฉพาะไปแต่ละอ๊อปเจ็ก และส่วนของโปรแกรมที่ใช้เขียนเมธอดก็ควรถูกจัดเก็บไว้ในส่วนของ database schema รวมไปถึงการกำหนดชนิดข้อมูลต่าง ๆ ของคลาส อย่างไรก็ตามส่วนมากจะมีการจัดเก็บไว้ในไฟล์แยกออกมาจากฐานข้อมูล

การค้นหาอ๊อปเจ็กในฐานข้อมูลทำได้หลายวิธีคือ

  1. บอกชื่อของอ๊อปเจ็ก เหมาะกับจำนวนอ๊อปเจ็กน้อย ๆ
  2. ใช้ object identifiers หรือ persistent pointers ไปที่อ๊อปเจ็ก ซึ่งสามารถถูกจัดเก็บไว้ภายนอกได้ ไม่เหมือนกับการบอกชื่อ ตัวชี้เหล่านี้ไม่ต้องมีการทำอะไรอีก มันสามารถที่จะชี้ไปยังตำแหน่งที่เก็บข้อมูลในฐานข้อมูลได้ทันที
  3. เก็บคอลเลกชันของอ๊อปเจ็ก และยอมให้โปรแกรมทำการค้นหาอ๊อปเจ็กที่ต้องการในคอลเลกชันได้ คอลเลกชันของอ๊อปเจ็กสามารถมองเป็น collection type ได้ ประกอบไปด้วย sets multiset list และอื่น ๆ และมีคลาสพิเศษที่เรียกว่า class extent ซึ่งเป็นคอลเลกชันของอ๊อปเจ็กทุกตัวของคลาส ซึ่งเมื่อไรก็ตามที่อ๊อปเจ็กถูกสร้าง อ๊อปเจ็กนั้นก็จะถูกเพิ่มเข้าไปใน class extent ทันที และ เมื่อไรที่อ๊อปเจ็กถูกลบ อ๊อปเจ็กนั้นก็จะถูกลบออกจาก class extent เช่นกัน

ระบบฐานข้อมูลเชิงวัตถุแทบทุกระบบสนับสนุนการเข้าถึง persistent objects ทั้งสามวิธี โดยที่อ๊อปเจ็กทุกตัวต้องมี object identifiers การกำหนดชื่อให้กับ class และ คอลเลกชันของอ๊อปเจ็กอื่น ๆ แต่อ๊อปเจ็กเกือบทั้งหมดไม่ได้ถูกกำหนดชื่อ ดังนั้นเราจะใช้ class extents เพื่อจัดการกับคลาสทุกคลาสที่มี persistent objects

 

 

Last Updated: 12/13/2001 11:29:03 AM
© โครงการเครือข่ายสารสนเทศเพื่อพัฒนาการศึกษา ทบวงมหาวิทยาลัย