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

