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

 

การสืบค้นข้อมูลชนิดที่ซับซ้อน

ในหัวข้อนี้จะแสดงให้เห็นถึงการใช้คำสั่ง SQL เพื่อสืบค้นข้อมูลที่มีชนิดข้อมูลที่ซับซ้อนในลักษณะต่างๆ

    1. Relation-Valued Attributes

    2. จากรีเลชัน employee ถ้าต้องการค้นหาชื่อของพนักงานที่มีบุตรชื่อ Jane เราสามารถเขียนเป็นคำสั่ง select ได้ดังนี้

      select name

      from employee

      where “Jane” in childname

      เราเรียกแอตทริบิวต์ childname ว่า relation-valued attribute ซึ่งจะปรากฎอยู่ในส่วนของ where ในคำสั่ง Select หรือ จงแสดงชื่อของพนักงาน และชื่อของบุตร พนักงานแต่ละคน สามารถเขียนคำสั่ง select ได้ดังนี้

      select E.name, C.childname

      from employee as E, E.childname as C

      เนื่องจากแอตทริบิวต์ childname ของรีเลชัน employee เป็นฟิลด์ประเภท set-valued ดังนั้นจึงสามารถใช้ในส่วนของ fromได้

      เราสามารถใช้ aggregate ฟังก์ชันเพื่อดำเนินการกับกลุ่มข้อมูลได้ เช่นจงแสดงชื่อพนักงาน และจำนวนบุตรของพนักงานแต่ละคน สามารถเขียนเป็นคำสั่ง select ได้ดังนี้

      select name, count(childname)

      from employee

    3. Path Expression

    4. เราใช้สัญลักษณ์จุด (.) เพื่อการอ้างอิงแอตทริบิวต์ที่ประกอบกันเป็นแอตทริบิวต์ผสมได้ เช่น สมมุติเรามีรีเลชันที่เก็บข้อมูล phd-student และรีเลชัน person โดยกำหนดนิยามของรีเลชันดังนี้

      create table phd-students

      ( advisor ref(person))

      under person

      ดังนั้นถ้าเราต้องการค้นหาข้อมูลชื่อของ advisor ของนักเรียนปริญญาเอกทั้งหมด สามารถเขียนเป็นคำสั่ง ได้ดังนี้

      select phd-students.advisor.name

      from phd-students

      เนื่องจาก phd-students.advisor มีการอ้างถึงแอตทริบิวต์ name ในตาราง people ซึ่งการอ้างอิงนี้ใช้เพื่อซ่อนการ join ระหว่างรีเลชัน จากตัวอย่างข้างต้น ถ้าเราไม่ได้ใช้วิธีการอ้างอิง ฟิลด์ advisor ของรีเลชัน phd-student จะต้องเป็น foreign ไปที่รีเลชัน person จากนั้นก็จะทำการ join ระหว่างรีเลชัน phd-student กับ person ด้วย foreign key โดยเราจะเรียกนิพจน์ phd-students.advisor.name นี้ว่า path expression

    5. Nesting and Unnesting

การทำ unnesting คือการแปลงความสัมพันธ์เชิงกลุ่มให้อยู่ในรูปแบบ 1 NF พิจารณารีเลชัน employee มีแอตทริบิวต์ childname และ training ที่เป็นความสัมพันธ์เชิงกลุ่ม สมมุติว่าเราต้องการแปลงรีเลชัน employee ให้อยู่ในรูปแบบที่ไม่มีรีเลชันเชิงกลุ่ม สามารถทำได้โดย

select empno, name, C as childname, T.tno as tno, T.tdate as tdate

from employee As E, E.childname As C, E.training As T

โดยที่ตัวแปร E ในประโยค from เป็นการประกาศขอบเขตของรีเลชัน employee ตัวแปร C กำหนดขอบเขตแอตทริบิวต์ childname และตัวแปร T ก็จะกำหนดขอบเขตแอตทริบิวต์ training

ในทางกลับกันถ้าทำการแปลงจากรีเลชันที่อยู่ในรูป 1 NF ไปเป็นรีเลชันเชิงกลุ่มจะเรียกว่าการทำ nesting ในการทำ nesting จะใช้วิธีการจัดกลุ่ม ซึ่งเมื่อทำการจัดกลุ่มแล้ว จะเหมือนกับมีการสร้าง multiset รีเลชันของแต่ละกลุ่มขึ้นมา และทำการส่ง multiset กลับคืนมาแทนที่จะใช้ฟังก์ชัน aggregate ตัวอย่างเช่น จากรูปที่ 3 เป็นรีเลชันที่อยู่ในรูป 1 NF เราต้องการแปลงให้อยู่ในรูปของ ความสัมพันธ์เชิงกลุ่ม สามารถเขียนเป็นคำสั่ง ได้ดังนี้

select empno, empname, set(childname) as childname-list, set(training) as training-list

from employee

group by empno, empname

 

 

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