890 likes | 1.07k Views
BỘ MÔN: CƠ SỞ DỮ LIỆU NÂNG CAO. SEMINAR. SELECT Ten, MSSV, hinhAnh. FROM SINHVIEN sv JOIN PHANCONGSEMINAR pc ON sv.MSSV = pc.MSSV. WHERE pc.nhomTruong = ‘ 0912469 ’. CAD/CAM. Floats. Fixed collection. Complex kind of data. ?. Small. Integers. Relational Database. GIS.
E N D
BỘ MÔN: CƠ SỞ DỮ LIỆU NÂNG CAO SEMINAR SELECT Ten, MSSV, hinhAnh FROM SINHVIEN sv JOIN PHANCONGSEMINAR pc ON sv.MSSV = pc.MSSV WHERE pc.nhomTruong = ‘0912469’
CAD/CAM Floats Fixed collection Complex kind of data ? Small Integers Relational Database GIS Dates Boolean Document management Multimedia Repositories Strings
Hỗ trợ nhiều loại dữ liệu phức tạp Với hai hướng phát triển chính • Object-Oriented Database Systems • Nơi mà các đối tượng phức tạp đóng vai trò là trung tâm • Bị ảnh hưởng nhiều bởi ngôn ngữ lập trình HĐT • Thêm các hàm vào DBMS như một môi trường lập trình • Object Data Model & Object Query Language được phát triển • Object-Relational Database Systems • Hỗ trợ một lớp rộng lớn của các ứng dụng Object-Database • Là cầu nối giữa mô hình quan hệ và hướng đối tượng • Các nhà cung cấp RDBMS đang thêm các chức năng ORDBMS Database Management System, Raghu Ramakrishnan & Johanes Gehrke
Vituoso Universal Server FirstSQL/J SQL:1999 GibaBase Object-Database DB2 Oracle EnterpriseDB Daffodil DB Cache Nguồn: Wikipedia
LOẠI NÀO TỐT HƠN? Không thể trả lời chính xác loại nào tốt hơn loại nào được Tùy vào trường hợp sử dụng
Compare Extend New data ODL, OQL Object-Database Identity Challenge Inheritance Design
Một số từ viết tắt • RDBMS: Relational Database Management System • OODBMS: Object-Oriented Database Management System • ORDBMS: Object-Relational Database Management System
THIẾT KẾ CSDL? Hệ quản trị phải hỗ trợ các loại dữ liệu phong phú hơn những loại hiện có
CÁC TÍNH NĂNG KHÔNG CÓ SẴN TRONG MÔ HÌNH QUAN HỆ RDBMS CÓ GIẢI QUYẾT ĐƯỢC? Binary Large Object (BLOB) Chỉ một dòng dài byte
Do người dùng định nghĩa Dữ liệu của Dinky Entertainment Hình ảnh, giọng nói, video… Phải được lưu trữ trong cơ sở dữ liệu Phải có những phương thức đặc biệt
Một số kiểu phổ biến được hỗ trợ: • ROW(n1 t1, …, nn tn): Là kiểu dữ liệu dùng để thể hiện cho một dòng, một bộ của n cột dữ liệu với n1,…,nn thuộc loại t1,…,tn tương ứng. • VD: SinhVien(mssv int, ten text, lop text) • ARRAY(base): Tương tự như mảng bên lập trình. • VD: DaySo(int) • VD: DSSV(ROW(mssv int, ten text, lop text)) • Listof(base): Là kiểu dữ liệu thể hiện các phẩn tử có thứ tự. Với 2 phần tử đặc biệt và head và tail. Và phương thức append, prepend. • Setof(base): Là kiểu thể hiện mà các phẩn tử nằm trong tập nằm không trùng nhau. Và có các phương thức của tập hợp: , , • Bagof(base): Là kiểu thể hiện mà các phần tử có thể là các Set hoặc multiset
CREATE TABLE KhungHinh (soKhung integer,hinhAnh jpeg_image, theLoai integer) CREATE TABLE TheLoai (maTheLoai integer, tenTheLoai text, giaChoThue float , ghiChu text) CREATE TYPE kieu_RapPhim ROW(maRap integer, tenRap text, diaChi text, soDienThoai text) CREATE TABLE DanhSachRap OF kieu_RapPhim CREATE TABLE DangChieu (phim integer, rap ref(kieu_RapPhim) with scope DanhSachRap , batDau date, ketThuc date) CREATE TABLE DanhSachPhim (maPhim integer, tuaPhim text , nhanVat setof(text), daoDien text, chiPhi float) CREATE TABLE QuocGia (ten text, ranhGioi daGiac, danSo int, ngonNgutext)
Thách thức đầu tiên: • Công ty sản xuất ngủ cốc Nestlé có chi nhánh ở Singapore • Thuê một hình ảnh Gấu Xanh ở phía trước mặt trời mọc • Thiết kế hợp ngủ cốc Alete SELECT K.soKhung, banThuNho(K.hinhAnh), T.giaChoThue FROM KhungHinh K, TheLoai T WHERE K.theLoai = T.maTheLoai AND co_MatTroi(K.hinhAnh) AND la_GauXanh(K.hinhAnh)
Thách thức thứ hai: • Đến từ giám đốc điều hành Dinky • Biết rằng Alete rất phổ ở quốc gia Singapore • Muốn đảm bảo là có một số phim Gấu Xanh đang được chiếu ở Singapore khi mà Alete được trưng bày. SELECT D.rap->tenRap, N.rap->diaChi, P.tuaPhim SELECT K.soKhung, banThuNho(K.hinhAnh), T.giaChoThue FROM DangChieu D, Phim P, QuocGia Q FROM KhungHinh K, TheLoai T WHERE D.phim = P.maPhim AND namTren(Q.ranhGioi, banKinh(N.rap->diaChi, 100) AND Q.ten = ‘Singapore’ AND ‘Gấu Xanh’ ϵ F. nhatVat) WHERE K.theLoai = T.maTheLoai AND co_MatTroi(K.hinhAnh) AND la_GauXanh(K.hinhAnh)
CREATE TABLE KhungAnh (soKhung integer,hinhAnh jpeg_image, theLoai integer) • Dùng để lưu trữ hình ảnh cho khung hình trong một bộ phim • Kiểu dữ liệu jpeg_image không nằm trong nhân DBMS • jpeg_image được xây dựng bởi người dùng để lưu trữ hình ảnh theo tiêu chuẩn JPEG. CREATE TABLE QuocGia (ten text, ranhGioi daGiac, danSo int, ngonNgu text)
Định nghĩa kiểu dữ liệu mới tùy ý Là tính năng quan trọng của ORDBMS Cho phép lưu trữ và truy xuất đối tượng loại jpeg_images nhưng mọi đối tượng khác (ví dụ: kiểu int) Cần phải có các phương thức được định bởi người tạo ra chúng Ví dụ kiểu jpeg_images sẽ có các phương thức: nén, xoay, thuNhỏ, cắt… Sự kết hợp của kiểu dữ liệu (atomic) và các phương thức liên quan được gọi là Abtract Data Type (ADT) SQL truyền thống cũng đã xây dựng các ADTs, chẳng hạn như kiểu int và các toán tử liên quan (+, -, >, = …) hoặc string (LIKE). ORDBMS cũng cho phép người dùng định nghĩa kiểu riêng của mình
Nhãn ‘abtract’ được áp cho các kiểu dữ liệu Bởi vì hệ thống CSDL không cần biết dữ liệu được lưu trữ cũng như phương thức của nó làm việc như thế vào. Đơn thuần chỉ cần biết input và output cho các phương thức Các phương thức được tích hợp vào ADT được gọi là tinh đóng gói. Ngay cả các kiểu int, string … cũng là ADT với tính đóng gói. CREATE ABTRACT DATA TYPE jpeg_image (internallength = VARIABLE,input jpeg_in, output jpeg_out) CREATE ABTRACT DATA TYPE polygon (internallength = VARIABLE,input poly_in, output poly_out)
Đối với một kiểu dữ liệu mới được định nghĩa: • Xác định phương pháp cho phép các DBMS có thể đọc và xuất ra các đối tượng của kiểu dữ liệu này • Tính toán dung lượng cần thiết để lưu trữ đối tượng • Vậy người dùng phải khai báo tối thiếu các phương thức sau với DBMS: • Size • Import • Export
Làm thế nào để khai báo cáo phương thức này? • Người dùng phải viết code cho các phương thức. • Thông báo cho DBMS biết về phương thức này. • Ngôn ngữ dùng để viết các phương thức này phụ thuộc vào ngôn ngữ được hỗ trợ bởi DBMS • Ví dự ORDBMS có thể xử lý ngôn ngữ Java chạy trên Linux CREATE FUNCTION coMatTroi(jpeg_image) RETURNS boolean AS EXTERNAL NAME ‘a/b/c/dinky.class’ LANGUAGE ‘java’ CREATE FUNCTION thuNho(jpeg_image) RETURNSjpeg_image AS EXTERNAL NAME ‘a/b/c/dinky.class’ LANGUAGE ‘java’ …
Compare Extend New data ODL, OQL Object-Database objects Challenge Inheritance Design
objects • Object identifier - oid • Kháiniêmvềđẳngthức • Dereferencing Reference Type
Object identifier - oid • cácđốitượngđượcgán 1 giátrịoidtrong object-database systems. • cógiátrịduynhấttrongcsdlsuốtthờigiantồntại • DBMS chịutráchnhiệmtạo, vàtựđộngquảnlý • Thườnggiátrịkiểunguyên 32 hoặc 64 bit • oidcủa 1 đốitượngcóthểđượcdùngđểtrỏđếnđốitượngđódùvịtrịlưucủađốitượngđó ở bấtkỳđâu. Oid
Object identifier - oid kiểu REF: làkiểumàgiátrịcủanólàcácđịnhdanhduynhấthoặciod Hàmdựng: REF(base) Vídụlệnhtrong sql:1999 CREATE TYPE kieu_RapPhim ROW(maRapinteger, tenRaptext, diaChitext, soDienThoaitext) CREATE TABLE DanhSachRap OF kieu_RapPhim CREATE TABLE DangChieu (phiminteger, rap ref(kieu_RapPhim) with scope DanhSachRap, batDaudate, ketThucdate)
Sựkhácbiệtgiữaoidvà URL Oid URL
Kháiniệmđẳngthức deep equal : đốitượngcócùngkiểuđượcxemlà deep equal khivàchỉkhi:
Kháiniệmđẳngthức 2 đốitượngthoả shallow equal thìthoả deep equal. Trườnghợpngươclạikhôngthoả shallow equal : Nếucácđốitượnglànguyêntốhoặckiểucấutrúcthìkháiniêmgiống deep equal. Nếucácđốitượnglàkiểuthamchiếuthìgiá 2 đốitượngthamchiếuđóphảicùngtrỏđến 1 đốitượngduynhất.
Kháiniệmđẳngthức Kieu_RapPhim BẢNG DanhSachRap1 ROW1 ( 13, ‘Galaxy’, ‘TânBình’, ‘01254747740’) BẢNG DanhSachRap2 ROW2 ( 13, ‘Galaxy’, ‘TânBình’, ‘01254747740’) BảngDangChieu ROW1( 1, 13, 12/12/2011, 21/03/2011) ROW2(1, 21, 12/12/2011, 21/03/2011) x Shallow equal Deep equal
Dereferencing reference types Tạoragiátrịthamchiếu REF có type constructor REF(base). Lấygiátrịcủacácthuộctínhcủađốitượngmà REF thamchiếu?? deref() Vídụ: DangChieu.deref(rap).tenRap HoặcDangChieu.raptenRap
KẾ THỪA • Địnhnghĩakiểuvớikếthừa • Cơchế binding củaphươngthức • Tậpphâncấp, phạm vi kiểuvàtruyvấn Inheritance
Địnhnghĩakiểuvớikếthừa Kieu_RapPhim tno integer Name text address text phone integer Kieu_rapPhimdichVu Menu text tno integer Name text address text phone integer supertype subtype CREATE TYPE Kieu_RapPhim UNDER Kieu_rapPhimDichVu(menu text) Minh hoạ:
Cơchế binding củaphươngthức IMAGE_T Display() JPEG_IMAGE_T Display() supertype subtype CREATE FUNCTION display (jpeg_image) RETURNS jpeg_image AS EXTERNAL NAME ‘/a/jpeg.class’ LANGUAGE ‘java’; overloading
Cơchế binding củaphươngthức Cơchế? binding • Early binding: quátrình binding đượcthựchiện • khikhiphântíchbiểuthức. • Late binding: quátrình binding thựchiêntronglúc • chaychuongtrinh
Tậpphâncấp, phạm vi kiểuvàtruyvấn CREATE TYPEkieu_RapPhim ROW(maRapinteger, tenRaptext, diaChitext, soDienThoaitext) CREATE TYPE Kieu_RapPhimUNDER Kieu_rapPhimDichVu(menu text) CREATE TABLEDanhSachRap OF kieu_RapPhim CREATE TABLE ds_rapPhimDichVuOF TYPE kieu_rapPhimDichVu Thựchiên query trêncácbộcủabảngDanhSachRapcókiểuKieu_rapPhim???
Tậpphâncấp, phạm vi kiểuvàtruyvấn CREATE TABLE ds_rapPhimDichVu OF TYPE Kieu_RapPhimDichVu UNDER DanhSachRap cáctruyvấntrênbảngDanhSachBangcũngsẽđượctruyvấntrênbảngds_rapPhimDichVu!!!
Tậpphâncấp, phạm vi kiểuvàtruyvấn Tậpphâncấp: dựavàomệnhđề under đểtạoracácphâncấptrongcsdl, khiđócsdlsẽtạo 1 câycácbảngcóquanhệcấpbậcvớinhau. Miềnkiểu: bảngchứacácthamchiếuđếncácđốitượngcùngkiểu (cóthểnằm ở cácbảngkhácnhau) trongcsdl dễthựcthitruyvấntrêntổngthểcácđốitượngcùngloại ở vịtríkhácbảng.
Compare Extend New data ODL, OQL Object-Database Identity Challenge Inheritance Design
Location (latitude, longitude) Probe Time Video stream
Probe (pid: integer, time: timestamp, latitude: real, longitude: real, camera: string, video: BLOB) Phụthuộchàm • PTLN CV • P CV
Probes_Loc(pid: integer, time: timestamp, latitude: real, longitude: real) Probes_Video(pid: integer, camera: string:, video: BLOB) • “Với probe 10, hiểnthịđoạn video đượcthutừ 1:10pm đến 1:15pm vàongày 10, 1996” • Thông tin liêntiếpbịphântán qua cácbộ • Thông tin video và location bịphântáchra
Probes_AllInfo(pid: integer, locseq: location_seq, camera: string, video: mpeg_stream) SELECTdisplay (P.video, 1:10pm, May 10 1996, 1:15pm, May 10 1996) FROMProbes_Allinfo P WHERE P.id = 10
Địnhdanh • đốitượng • (Oid) • Khóangoại • (Foreign key)