Biều đồ 3.3 So sánh thời gian thực hiện truy vấn 3
3.1. Giới thiệu về DB4O
DB4O là một hệ quản trị CSDL đối tƣợng đƣợc phát triển và phân phối bởi Versant Corporation, là một sản phẩm nguồn mở dựa trên 2 giấy phép GPL và DOCL. Phiên bản ổn định mới nhất: 8.0 (.NET & Java) [29].
Hệ quản trị cơ sở dữ liệu hƣớng đối tƣợng DB4O có mã nguồn mở, đƣợc ngƣời sử dụng đánh giá là tốc độ nhanh, yêu cầu bộ nhớ nhỏ, dễ sử dụng. Bên cạnh đó, với những bài toán đƣợc phân tích theo hƣớng đối tƣợng thì việc sử dụng cơ sở dữ liệu hƣớng đối tƣợng sẽ đảm bảo tính nhất quán và dễ cài đặt.
3.1.1. Tạo lập và kết nối CSDL trong DB4O
Mỗi CSDL DB4O chỉ gồm 1 file duy nhất, phần mở rộng thƣờng là .yap hoặc
.db4o. Ở chế độ chạy cục bộ, cơ sở dữ liệu không cần phải đƣợc tạo trƣớc, và có thể đƣợc tạo ra ngay trong quá trình truy cập (accessing) tới CSDL. Khác với chế độ client/ server, chế độ cục bộ của DB4O không cần phải kết nối tới CSDL với Username, Password, và việc truy cập cũng rất đơn giản [29].
using (IObjectContainer db = Db4oEmbedded.OpenFile([filename])) { // một số thao tác với db4o }
Cách tạo lớp đối tƣợng
Các đối tƣợng trong DB4O đƣợc lƣu trữ dựa trên cấu trúc của lớp đối tƣợng định nghĩa trên ngôn ngữ của ứng dụng mà không cần phải có cấu trúc lớp đối tƣợng riêng dành cho CSDL. Dƣới đây là cú pháp tạo lớp đối tƣợng trong C#:
[bổ_từ_truy_xuất] class <định_danh_lớp> [:lớp_cơ_sở] {
<Phần thân của lớp: bao gồm định nghĩa các thuộc tính và phương thức hành động> }
Trong đó:
+ [bổ_từ_truy_xuất] gồm private, public, protected, internal, rotected internal, + <định_danh_lớp> là tên của lớp
+ [:lớp_cơ_sở ] đây là lớp đƣợc kế thừa
Ví dụ: Tạo lớp đối tƣợng NhanVien trong DB4O
publicclassNhanVien
{ string _hoten; string _gioitinh;
DateTime _ngaysinh; string _diachi;
public NhanVien(string hoten, string gioitinh, DateTime ngaysinh,
string diachi) // phƣơng thức xây dựng
{ _hoten = hoten; _gioitinh = gioitinh; _ngaysinh = ngaysinh; _diachi = diachi; }
publicstring Name // phƣơng thức khác
{
get { return _hoten; } set { _hoten = value; } }
}
Liên kết giữa các đối tƣợng
Liên kết giữa các đối tƣợng đƣợc định nghĩa trong C# hoàn toàn khác so với cách định nghĩa của ODL. Trong C#, nó đƣợc định nghĩa rất đơn giản: mỗi lớp có 1 thuộc tính mà thuộc tính đó là một object reference.
publicclassPiLot
{ string _name; int _age; Car _car;
//các phƣơng thức của lớp Pilot
public PiLot() { } }
publicclassCar
{ string _numberplate; PiLot _ower;
//các phƣơng thức của lớp Car
public Car() { } }
Lƣu trữ các đối tƣợng
Để lƣu trữ một đối tƣợng, ta gọi phƣơng thức Store()
using (IObjectContainer db = Db4oEmbedded.OpenFile("AppLuanVan.yap")) {
NhanVien nv = new NhanVien(“Hoa”);
db.Store(nv); }
Cập nhật các đối tƣợng
Đầu tiên, truy vấn dữ liệu cần cập nhật. Sau đó, thay đổi đối tƣợng và lƣu trữ lại lần nữa vào CSDL
using (IObjectContainer db = Db4oEmbedded.OpenFile("AppLuanVan.yap")) {
var query = (From NhanVien p in db
where p.hoten == “Hoa” select p).First();
NhanVien.hoten = "New Name"; db.Store(query);
}
Xóa các đối tƣợng
Các đối tƣợng đƣợc xóa từ CSDL bằng cách sử dụng phƣơng thức Delete() using (IObjectContainer db = Db4oEmbedded.OpenFile("AppLuanVan.yap"))
{
varnv = (fromNhanVien p in db
where p.Name == “Hoa”
select p).First(); db.Delete(nv);
}
3.1.2. Truy vấn dữ liệu trong DB4O
Truy vấn là khả năng then chốt trong bất kỳ cơ sở dữ liệu nào, và đối với DB4O cũng vậy. Trong DB4O ta có các phƣơng thức truy vấn: QBE (Query-By-Example), NQ (Native Queries), SODA, LINQ.
QBE (Query-By-Example): Là phƣơng thức đặc biệt, tìm kiếm dựa trên các đối tƣợng mẫu. Nhƣng QBE có một số hạn chế: Không thể thực hiện các biểu thức truy vấn nâng cao. (AND, OR, NOT,…), Không thể truy vấn trên các giá trị 0, rỗng. Và đối với những truy vấn phức tạp thì khó đọc và biết đƣợc đang truy vấn cái gì
NQ (Native Queries): Đƣợc hiểu là truy vấn “bản địa” hay truy vấn theo ngôn ngữ của ứng dụng. Kiểu truy vấn này giúp ngƣời lập trình không mắc phải các lỗi nhƣ sai tên hay kiểu lớp, tên trƣờng,…bạn cũng sẽ tránh khỏi đƣợc các lỗi phát sinh khi chạy, do đó đây là cách tạo ra những câu truy vấn an toàn. Hạn chế của NQ là phải khởi tạo mọi đối tƣợng của lớp đang truy vấn lên CSDL và chạy biểu thức truy vấn lên chúng, điều này sẽ làm chậm câu truy vấn đi rất nhiều
SODA API : Là mức thấp nhất của API truy vấn, cho phép truy cập trực tiếp đến các nút của đồ thị truy vấn, là cơ chế truy vấn nền tảng trong DB4O, các kiểu truy vấn còn lại đều đƣợc dịch về SODA.
LINQ: Là kiểu truy vấn đơn giản, hỗ trợ .NET để truy vấn các đối tƣợng trong DB4O. DB4O có hỗ trợ giao diện .NET IQueryable. Điều này rất hữu ích khi xây
dựng các lớp trừu tƣợng để tích hợp DB4O với các Framework khác. Để sử dụng LINQ, bạn phải thêm LINQ-namespace vào project :
using System.Linq;
using Db4objects.Db4o.Linq;
Cú pháp của LINQ gần giống nhƣ SQL, tuy nhiên nó hỗ trợ sửa lỗi cú pháp ngay tại bƣớc phiên dịch. Ví dụ truy vấn đơn giản:
var query = fromNhanVien nv in container select nv;