Giáo trình Cơ sở dữ liệu hướng đối tượng
1. Lịch sử phát triển của Cơ sở dữ liệu hướng đối tượng
Các loại cấu trúc cơ sở dữ liệu và mối liên hệ giữa chúng đóng vai trò rất lớn
trong việc xác định tính hiệu quả của hệ quản trị cơ sở dữ liệu. Vì vậy, thiết kế
cơ sở dữ liệu trở thành hoạt động chính trong môi trường cơ sở dữ liệu.
Việc thiết kế cơ sở dữ liệu được thực hiện đơn giản hơn nhiều khi ta sử dụng
các mô hình. Các mô hình là sự trừu tượng đơn giản của các sự kiện trong thế
giới thực. Các trừu tượng như vậy cho phép ta khảo sát các đặc điểm của các
thực thể và các mối liên hệ được tạo ra giữa các thực thể đó. Việc thiết kế các
mô hình tốt sẽ đưa ra các cơ sở dữ liệu tốt và trên cơ sở đó sẽ có các ứng dụng
tốt. Ngược lại, mô hình không tốt sẽ đưa đến thiết kế cơ sở dữ liệu tồi và dẫn
đến các ứng dụng không đúng.
Một mô hình cơ sở dữ liệu là một tập hợp các khái niệm dùng để biểu diễn
các cấu trúc của cơ sở dữ liệu. Cấu trúc của một cơ sở dữ liệu là các kiểu dữ
liệu, các mối liên kết và các ràng buộc phải tuân theo trên các dữ liệu. Nhiều mô
hình còn có thêm một tập hợp các phép toán cơ bản để đặc tả các thao tác trên
cơ sở dữ liệu.
Các loại mô hình cơ sở dữ liệu:
- Các mô hình dữ liệu bậc cao hoặc mô hình dữ liệu mức quan niệm cung
cấp các khái niệm gắn liền với cách cảm nhận dữ liệu của nhiều người sử
dụng.
- Các mô hình dữ liệu bậc thấp hoặc các mô hình dữ liệu vật lý cung cấp
các khái niệm mô tả chi tiết về việc dữ liệu được lưu trữ trong máy tính
như thế nào.
- Các mô hình dữ liệu thể hiện (mô hình dữ liệu mức logic), chúng cung
cấp những khái niệm mà người sử dụng có thể hiểu được và không xa với
cách tổ chức dữ liệu bên trong máy tính.2
Trong một mô hình dữ liệu cần phải phân biệt rõ giữa mô tả của cơ sở dữ liệu
và bản thân cơ sở dữ liệu.
Sau đây, chúng ta sẽ điểm qua lịch sử phát triển của các mô hình cơ sở dữ
liệu:
- Vào những năm sáu mươi, thế hệ đầu tiên của cơ sở dữ liệu ra đời dưới
dạng mô hình thực thể kết hợp (Entity Relationship Model), mô hình
mạng (Network Model) và mô hình phân cấp (Hierachical Model).
- Vào những năm bảy mươi, thế hệ thứ hai của cơ sở dữ liệu ra đời. Đó là
mô hình dữ liệu quan hệ (Relational Data Model) do EF. Codd phát minh.
Mô hình này có cấu trúc logic chặt chẽ. Đây là mô hình đã và đang được
sử dụng rộng khắp trong công tác quản lý trên phạm vi toàn cầu. Việc
nghiên cứu mô hình dữ liệu quan hệ nhằm vào lý thuyết chuẩn hoá các
quan hệ và là một công cụ quan trọng trong việc phân tích thiết kế các hệ
cơ sở dữ liệu hiện nay. Mục đích của nghiên cứu này nhằm bỏ đi các phần
tử không bình thường của quan hệ khi thực hiện các phép cập nhật, loại
bỏ các phần tử dư thừa.
- Sang thập kỷ tám mươi, mô hình cơ sở dữ liệu thứ ba ra đời, đó là mô
hình cơ sở dữ liệu hướng đối tượng (Object Oriented Data Model), mô
hình cơ sở dữ liệu phân tán, mô hình cơ sở dữ liệu suy diễn,
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Cơ sở dữ liệu hướng đối tượng
replicate, Objects delete (incl. cascaded) Messaging TCP/IP Transparency - Primitive types - Strings Language - Arrays constructs - Multi-dimensional arrays - Inner classes - Java/C# collections 31 - Classes without public constructors - .NET structs - Blobs (stored outside of DB file) - Without deriving from a specific base class. - Without implementing a specific interface. Non-Intrusive - Without modifications to source code. - Without implementing Serializable. Private Fields Storable File I/O Pluggable - Pluggable Reflector - Generic Aliases Class aliasing for class-to-class mappings Query Languages / APIs - Native Queries (NQ) Object oriented - Query By Example (QbE) - S.O.D.A. SQL Via replication to many relational databases XML With Third-Party products (e.g., Xstream) Modes / Concurrency Operation - Local Modes - Client/Server Threads Multiple 32 Transactions Multiple, parallel Semaphores Available Read-Only Available Mode Scalability and Performance Performance benchmark Up to 55x faster than Hibernate/MySQL - Stores 200,000 objects/second Examples of Scalability - Stores 300,000 objects on a PDA In Memory Mode Available Client-side Single-process execution available Server-side Server-side query execution available DB-aware Collections Available Object Caching Available Pagination erver-side cursors (lazy queries) - BTree field indexes Indexing - BTree query processor 3.2. Các loại lớp trong hệ thống đối tượng của DB4o Class Types :Một hệ thống hướng đối tượng được xây dựng từ những lớp có ảnh hưởng và tương tác với nhau. Một số thực thể class trong hệ thống mà bao gồm các thực thể trừu tượng hóa trong thế giới thực và những lớp khác thì đảm nhiệm vai trò khác trong hệ thống. Các loại class được chia thành : Entity classes: Đây là mô hình thực thể hay dữ liệu trong hệ thống. 33 Boundary classes : Đây thực chất cung cấp các giao diện để tương tác giữa hệ thống với môi trường bên ngoài, thông thường là giao diện người dùng, giao diện có thể là các GUI Component hay web page. Control classes : Lớp điều khiển những luồng trong hệ thống, điển hình là đưa đầu vào từ giao diện người dùng và sử dụng những lớp thực thể để thực hiện ‘business logic’ và lần lượt cung cấp giao diện với kết quả mà người dùng sử dụng trả lại. 3.3. Object Indentity Trong cơ sở dữ liệu đối tượng và quan hệ đưa nhưng cách tiếp cận khác về ý tưởng indentity. Indentity xác định những thực thể được phân biệt với một thực thể khác. Trong cơ sở dữ liệu quan hệ, thì thực thể được indentity bởi khóa chính và khóa ngoại của dữ liệu. Những mối quan hệ được sử dụng trong những câu truy vấn như yêu cầu join giữa hai table với nhau. Indentity phụ thuộc vào giá trị của trường khóa. Trong sư tương phản thì một OODBMS lưu trữ một định danh đối tượng OID bên trong mỗi đối tượng. OID xác định một đối tượng duy nhất trong OODBMS và cũng được dùng để chỉ tham chiếu tới một đối tượng khác tham chiếu tới đối tượng đó.OID thông thường là một số và không được hiển thị đối với người sử dụng và cơ sở dữ liệu. Hình 4.2 mô tả hai đối tượng được lưu trữ trong cơ sở dữ liệu db4o, dùng công cụ objectManager để duyệt dưới dạng đồ thị. Cả hai đối tượng là những thể hiện của một lớp person đã được gán OIDs 306 và 1877 tương ứng. OID này được gán bởi chương trình cơ sở dữ liệu khi đối tượng đó được lưu vào cơ sở dữ liệu. Trong db4o thì OID là một con trỏ vật lý trỏ tới database file. Ở đây ta có một nhận định rằng, OID không liên quan tới bất kỳ một thuộc tính nào của đối tượng hay tới class của đối tượng. Có hai vấn đề liên quan tới nó: Hai đối tượng có thể phân biệt hoàn toàn dù rằng tất cả các thuộc tính của nó đều giống nhau nhưng chúng có OID hoàn toàn khác nhau, dễ dàng tạo 34 ra được hai đối tượng với các thuộc tính đồng nhất. Với db4o ta không thể định nghĩa key để đảm bảo tính duy nhất trong hệ thống, cái này thì ứng dụng sẽ quản lý. Một đối tượng được duy trì cùng với đối tượng thậm chí khi trạng thái của nó nhận giá trị mới hoàn toàn. Hình 4.2: Db4o database với hai objects, được view bởi ObjectManager Hình 4.3: Ví dụ databse db4o với tất cả các thuộc tính thay đổi 35 Hình 4.4. Hai đối tượng person với các thuộc tính 3.4. Lược đồ cơ sở dữ liệu trong db4o (database schema) Bây giờ ta có thể nhìn thấy nội dung của một cơ sở dữ liệu đối tượng lưu trữ một đối tượng person rất đơn giản. Để làm được điều này một thì một database schema được định nghĩa hỗ trợ việc lưu trữ dữ liệu. Database schema là một cấu trúc của một hệ thống cơ sở dữ liệu. Phần này sẽ mô tả những object trong database schema và một số khía cạnh khác nữa. Properties và Relationships: Trong cơ sở dữ liệu quan hệ thì schema được định nghĩa là các table và quan hệ giữa các table. Trong cơ sở dữ liệu hướng đối tượng thì schema được định nghĩa bởi các classes và các thuộc tính của class và quan hệ giữa các đối tượng. Database schema dùng để định nghĩa ngôn ngữ dữ liệu (DDL). Trong cơ sở dữ liệu quan hệ thì việc sử dụng DDL như cú pháp tạo table như CREATE TABLE để định nghĩa cấu trúc của table . Cũng giống như vậy cơ sở dữ liệu đối tượng sử dụng ngôn ngữ định nghĩa đối tượng (ODL) để mô tả cấu trúc của đối tượng, nó là một phần trong tiêu chuẩn của ODMG. Ví dụ một databas schema sử dụng ODL định nghĩa như sau : class Person { attribute string name; 36 attribute string dob; attribute string phoneNumber; } Chú ý rằng mặc dù định nghĩa lớp này trông hơi tương tự như định nghĩa một lớp trong java hay C#, nó không thực sự chỉ ra là của bất kỳ ngôn ngữ lập trình hướng đối tượng nào cả. Nó đơn giản là dùng để định nghĩa một database schema. Để truy cập cơ sở dữ liệu từ một ứng dụng thì cần phải sử dụng một ngôn ngữ lập trình hướng đối tượng để binding mà cơ sở dữ liệu maps vào các class của ngôn ngữ java hay C# và cho phép thực hiện các thao tác và query. 3.5. Object Relationships Mô hình dữ liệu đối tượng về cơ bản thì cũng như object model, vì thế các mối quan hệ của đối tượng được duy trì. Storing OIDs to Represent Relationships những mối quan hệ giữa các đối tượng được lưu vào bộ nhớ memory và được duy trì bởi các đối tượng tham chiếu tới nhau. Một đối tượng được lưu trữ và cơ sở dữ liệu hướng đối tượng thì đối tượng tượng đó luôn được tham chiếu sẵn, vì thế những đối tượng này được duy trì những mối quan hệ bằng cách lưu trữ OID của bất kỳ đối tượng nào liên quan hay tham chiếu tới đối tượng đó. Trong hình 3.x mô tả một đối tượng được lưu trữ, nó được minh họa dưới dạng đồ thị đối tượng (object graph). Có ba đối tượng person và hai đối tượng address ,hình 3.x cho thấy một cơ sở dữ liệu db4o chứa năm đối tượng này.Phạm vi của class person là ba đối tượng còn phạm vi của class address chỉ có hai đối tượng. Đối tượng person ở đây lưu trữ thêm một thuộc tính bổ sung đó là thuộc tính address,thuộc tính này sẽ tham chiếu đến đối tượng có trong cơ sở dữ liệu và hơn nữa nó là một ký tự giống như các thuộc tính khác 37 Hình 4.5: Một số object graph của objects Hình 4.6: Các đối tượng trong database db4o Inverse Relationships : Nếu ta nhìn vào đối tượng address thì làm sao ta có thể biết được person nào sống ở đó, điều đó là không thể, vì những đối tượng address không cất giữ OID tham chiếu đến đối tượng person . Mặt khác nếu ta 38 tìm địa chỉ của một person nào đó thì hoàn toàn có thể xác định được là do đối tượng person lưu trữ OID của đối tượn address Hình 4.7: Các đối tượng liên quan trong quan hệ ngược Hình 4.8: Object graph của objects trong quan hệ ngược 39 Defining the Relationships : Ta có thể dùng ODL để định nghĩa những mối quan hệ bên trong một mô hình cơ sở dữ liệu ODMG. ODL định nghĩa mối quan hệ ngược lại để giám sát việc thi hành sự toàn vẹn mối quan hệ. Hình 3.x định nghĩa class person và address. class Person { attribute string name; attribute string dob; attribute string phoneNumber; relationship Address address inverse Address :: person; } class Address { attribute string street; attribute string city; attribute string country; relationship Person person inverse Person :: address; } Hình 4.9: Định nghĩa class Person và Address trong ODL Có nghĩa là đối tượng person có quan hệ tới đối tượng address và quan hệ giữa hai đối tượng này có tên là address, và mối quan hệ ngược address tới person Integrity : như chúng ta đã thấy ODL yêu cầu những mối quan hệ ngược để giúp đỡ đảm bảo sự toàn vẹn mối quan hệ, tương tự đối với cơ sở dữ liệu quan hệ là việc tạo khóa ngoại để tham chiếu tới các entity khác, ràng buộc toàn vẹn ở đây là có thể một person không thể không có address 3.6. Các kiểu quan hệ của đối tượng Trong phần này sẽ trình bày đến mối quan hệ của đối tượng trong ODB đó là quan hệ one-to-many và many-to-many hay aggregation và inheritance. 40 Quan hệ one-to-many : khi lưu trữ một đối tượng thì vấn đề thường liên quan tới tập hợp các đối tượng các đối tượng, chẳng hạn như một manager có nhiều employee. Trong ODL thì định nghĩa mối quan hệ một nhiều được mô tả như hình dưới đây. Class Manager{ attribute string name; attribute string department; relationship set employees inverse Employee :: manager; } class Employee { attribute string name; attribute string dob; attribute string phoneNumber; relationship Manager manager inverse Manager :: employees; } Hình 4.10: Định nghĩa clas Manager và Employee trong ODL Với db4o, những định nghĩa lớp trong lược đồ ODB có thể có hay không các mối quan hệ ngược lại. 41 Hình 4.11: Quan hệ One-to-many Hình 4.12: Object graph trong quan hệ one-to-many Quan hệ many-to-many :Một mối quan hệ many-to-many được sinh ra nếu như employee có thể có nhiều project và ngược lại trong project có thể có nhiều employee khi đó quan hệ many-to-many được sinh ra. Kiểu mối quan hệ này chỉ 42 khả dĩ trong một cơ sở dữ liệu quan hệ nếu như hai bảng join với nhau, và được thẳng thắn hơn trong cơ sở dữ liệu hướng đối tượng. Mỗi một đối tượng đơn đều được cất giữ bởi một OID để xác định cho các đối tượng liên quan. Trong OQL mối quan hệ many-to-many được mô tả như hình sau : class Project { attribute string name; attribute string costCode; relationship set employees inverse Employee :: projects; } class Employee { attribute string name; attribute string dob; attribute string phoneNumber; relationship set projects inverse Project :: employees; } Hình 4.13: Định nghĩa class Project và Employee trong ODL Với db4o thì những định nghĩa lớp là thành phần cấu tạo lên lược đồ ODB. Trong trường hợp này mối quan hệ ngược lại trở nên rất hữu ích, nhưng đó là sự chính xác không cần thiết. Với ví dụ này nếu như ta cần tìm employee trong project và không một project nào có employee thì khi đó không cần đối tượng employee lưu trữ OID để tham chiếu tới đối tượng project. Vì vậy trong quan hệ many-to-many thì đối tượng project cần lưu trữ OID để tham chiếu tới đối tượng employee và đối tượng employee cũng vậy. 43 Hình 4.14: Minh họa object graph với quan hệ many-to-many 44 Hình 4.15: Quan hệ Many-to-many sử dụng mối quan hệ ngược 4. Truy vấn dữ liệu đối tượng trực tiếp bằng tool hoặc dos Có thể truy vấn dữ liệu đối tượng trực tiếp bằng tool hoặc thông qua lệnh DOS 45 BÀI 5: TÍCH HỢP DỮ LIỆU HƯỚNG ĐỐI TƯỢNG TRÊN MÔI TRƯỜNG PHÁT TRIỂN ỨNG DỤNG .NET 1. Cài đặt tích hợp môi trường Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất lập trình, Microsoft đã phát triển giải pháp tích hợp dữ liệu cho .NET Framework có tên gọi là LINQ (Language Integrated Query), đây là thư viện mở rộng cho các ngôn ngữ lập trình C# và Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) cung cấp khả năng truy vấn trực tiếp dữ liệu Object, cơ sở dữ liệu và XML. Điểm mạnh của LINQ là “viết truy vấn cho rất nhiều các đối tượng dữ liệu”, từ cơ sở dữ liệu, XML, Data Object thậm chí là viết truy vấn cho một biến mảng đã tạo ra trước đó. Vì thế ta có các khái niệm như là LinQ to SQL, LinQ to XML,. Các thành phần của LINQ Hình 5.1: Kiến trúc của LINQ trong .NET Framework 3.5 46 LINQ to Objects “LINQ to Objects” ở đây có nghĩa là nói đến cách sử dụng LINQ đối với các đối tượng Collection mà đã được thực thi giao diện IEnumerable hoặc IEnumerable tức những Collection có thể “liệt kê” ra được. Đây là trường hợp sử dụng đơn giản nhất của LINQ khi làm việc với dữ liệu. LINQ to SQL LINQ to SQL là một phiên bản hiện thực hóa của O/RM (object relational mapping) có bên trong .NET Framework 3.5, nó cho phép bạn mô hình hóa một cơ sở dữ liệu dùng các lớp .NET. Sau đó bạn có thể truy vấn cơ sở dữ liệu dùng LINQ, cũng như cập nhật/thêm/xóa dữ liệu từ đó. LINQ to SQL hỗ trợ đầy đủ transaction, view và các stored procedure (SP). Nó cũng cung cấp một cách dễ dàng để thêm khả năng kiểm tra tính hợp lệ của dữ liệu và các quy tắc vào trong mô hình dữ liệu của bạn. LINQ to XML Sử dụng LINQ với mục đích truy vấn file XML và tiện lợi truy vấn hơn nhiều so với việc dùng XmlDocument, Xpath và Xquery như trước kia. LINQ to Datasets DataSet trong ADO.NET là một bước phát triển lớn trong việc phát triển ứng dụng cơ sở dữ liệu đa hệ. Khi lấy và chỉnh sửa dữ liệu, duy trì liên tục kết nối tới Data Source trong khi chờ user (người dùng) yêu cầu thì rõ ràng là tốn tài nguyên máy rất nhiều. DataSet giúp ích ở đây rất lớn. Vì DataSet cho phép lưu trữ dữ liệu và chỉnh sửa tại ‘local cache’, hay gọi là offline mode. Có thể xem xét và xử lý thông tin trong khi ngắt kết nối. Sau khi chỉnh sửa và xem xong thì tạo một kết nối và update dữ liệu từ local vào Data Source. Dữ liệu trong DataSet được lưu trữ dưới dạng một Collection các Tables và bạn cần phải xử lý thông qua các lớp DataTable (DataRow và DataColumn). 47 Hình 5.2: Kiến trúc DataSet LINQ to DataSet cho phép người lập trình sử dụng DataSets như một nguồn dữ liệu bình thường bằng các cú pháp truy vấn căn bản của LINQ 2. Cài đặt mô hình dữ liệu hướng đối tượng bằng ngôn ngữ .Net (Visual, C#) Kết nối đến CSDL - View -> Server Explorer - Kích phải chuột lên DataConnection -> Add Connection Hình 5.3: Kết nối đến cơ sở dữ liệu 48 Tạo ra mô hình dữ liệu LINQ TO SQL Hình 5.4: Tạo mô hình LinQ to SQL 49 3. Biên dịch lược đồ (diagram) Mô hình ánh xạ Hình 5.5: Mô hình ánh xạ LinQ to SQL 4. Xây dựng ứng dụng cho phép truy xuất dữ liệu đối tượng Hiệu chỉnh đường kết nối trong file web.config: 50 Các thành phần của lớp DataContext: 51 Các truy vấn: 52
File đính kèm:
- giao_trinh_co_so_du_lieu_huong_doi_tuong.pdf