Tài liệu Các khái niệm cơ bản của DB2: Giới thiệu về các kiểu dữ liệu có cấu trúc và các bảng được định kiểu pot - Pdf 10

Các khái niệm cơ bản của DB2: Giới thiệu về các
kiểu dữ liệu có cấu trúc và các bảng được định kiểu
Cơ sở dữ liệu vạn năng DB2 của IBM (DB2 Universal Database - DB2 UDB) cho các hệ điều
hành Linux, UNIX và Windows cho phép dùng các kiểu dữ liệu có cấu trúc. Kiểu dữ liệu có cấu
trúc là dạng dữ liệu do người dùng định nghĩa có chứa một chuỗi các thuộc tính, mỗi thuộc tính
trong các thuộc tính đó có một kiểu dữ liệu. Mỗi thuộc tính là đặc tính giúp mô tả thể hiện của
kiểu. Ví dụ: Nếu chúng ta định nghĩa một kiểu có cấu trúc có tên là address_t, thì thành phố có
thể là một trong những thuộc tính của kiểu dữ liệu có cấu trúc. Các kiểu dữ liệu có cấu trúc giúp
dễ sử dụng dữ liệu, chẳng hạn như địa chỉ, hoặc là một đơn vị dữ liệu đơn, hoặc là các mục dữ
liệu riêng biệt, mà không cần phải lưu giữ mỗi dữ liệu của các dữ liệu (hoặc các thuộc tính) này
trong một cột riêng biệt.
Thường xảy ra nhất là các kiểu dữ liệu có cấu trúc được lưu trữ trong cơ sở dữ liệu:
 Như là các giá trị trong một hoặc nhiều cột, được định nghĩa bằng cách sử dụng các kiểu
dữ liệu có cấu trúc như là các kiểu dữ liệu của chúng. (Xem Liệt kê 1 và Liệt kê 2.)
 Như là các hàng trong một bảng (bảng được định kiểu) có các cột được định nghĩa bởi
các thuộc tính của các kiểu dữ liệu có cấu trúc. Trong trường hợp này, bảng được tạo ra
bằng kiểu dữ liệu có cấu trúc, và bạn không xác định riêng cho cột trong định nghĩa bảng.
(Xem Liệt kê 3.)
Các kiểu dữ liệu có cấu trúc
Kiểu dữ liệu có cấu trúc có thể được sử dụng như là kiểu cho một cột trong bảng thông thường
(Liệt kê 1 và 2), kiểu cho toàn bộ bảng (hoặc khung nhìn), hoặc như là thuộc tính của một kiểu
dữ liệu có cấu trúc khác (Liệt kê 3). Khi được sử dụng làm kiểu cho bảng, thì bảng được biết như
là bảng được định kiểu (Liệt kê 3).
Bạn có thể tạo một bảng với các cột có kiểu dữ liệu cấu trúc với cùng cách mà bạn sẽ tạo ra bảng
bằng cách sử dụng các kiểu dữ liệu đã có sẵn trong DB2. Trong cả hai trường hợp, bạn phải chỉ
định kiểu dữ liệu cho mỗi cột trong bảng. Nếu cột này là cột của kiểu dữ liệu có cấu trúc, thì bạn
xác định tên của kiểu dữ liệu cấu trúc làm kiểu dữ liệu của nó (Liệt kê 1).
Các kiểu dữ liệu có cấu trúc có hành vi gọi là tính kế thừa. Một kiểu dữ liệu có cấu trúc có thể có
các kiểu dữ liệu con, là các kiểu dữ liệu có cấu trúc khác sử dụng lại tất cả các thuộc tính của nó
và chứa các thuộc tính cụ thể của nó. Kiểu dữ liệu mà kiểu dữ liệu con thừa kế các thuộc tính
được gọi là siêu kiểu của nó. Một phân cấp kiểu là tập các kiểu dữ liệu con dựa trên cùng một

lệnh DROP để xóa bảng được định kiểu. Một bảng được định kiểu đang bị xóa không thể có bất kỳ
bảng con nào. Bạn cũng có thể xóa toàn bộ hệ thống phân cấp bảng bằng cách chỉ định các từ
khoá HIERARCHY trong câu lệnh DROP (DROP TABLE HIERARCHY <root-table-name>).
Về đầu trang
Ví dụ chi tiết
Đối với ví dụ này, ta sẽ sử dụng cơ sở dữ liệu SAMPLE đi kèm với DB2 UDB. Ví dụ của chúng
tôi yêu cầu kết nối cơ sở dữ liệu để bắt đầu, và chỉ vậy, và đối với ví dụ này, cơ sở dữ liệu
SAMPLE sẽ làm việc khá tốt.
Chúng ta sẽ tạo ra bảng có tên là CLIENTS với bốn cột. CLIENT_ID là cột định tên do hệ thống
tạo ra; CLIENT_LNAME và CLIENT_FNAME chứa tương ứng họ và tên mới của khách; và
ADDRESS là cột của kiểu dữ liệu có cấu trúc của kiểu Address_t. (qui ước thường dùng là đặt
tên cho kiểu dữ liệu cấu trúc với hậu tố '_t ' để định tên của chúng như kiểu dữ liệu có cấu trúc
một cách rõ ràng.) Chúng ta sẽ cần phải tạo kiểu dữ liệu có cấu trúc trước khi chúng ta tạo ra
bảng CLIENTS (Liệt kê 1). Chúng ta sẽ sử dụng hình thức đơn giản nhất của câu lệnh CREATE
TYPE, bằng cách chỉ xác định bốn thuộc tính (đường, thành phố, tỉnh và mã bưu điện -
postal_code) và câu MODE DB2_SQL yêu cầu.
Để lấy ra dữ liệu có cấu trúc từ một bảng, phải có một số cách để chuyển đổi kiểu thành một giá
trị vô hướng đơn mà kiểu của nó, bản thân kiểu dựa trên một trong những dữ liệu DB2 được xây
dựng sẵn. Để thực hiện việc chuyển đổi này, trước tiên chúng ta phải tạo hàm biến đổi FROM
SQL và sau đó kết hợp hàm biến đổi này với một nhóm biến đổi.
Trước tiên, chúng ta sẽ tạo ra một hàm biến đổi vô hướng có tên là ADDRESS_TRANSFORM,
bằng cách sử dụng câu lệnh CREATE FUNCTION (SQL vô hướng, bảng hay dòng). Trong ví dụ
này, chúng ta xác định tham số đầu vào có tên là addr của kiểu Address_t. Chúng ta cũng xác
định hàm này sẽ trả về VARCHAR (42), đủ lớn để chứa các thuộc tính địa chỉ được nối vào
nhau. Thân của hàm SQL bao gồm câu lệnh RETURN, trong đó các thuộc tính địa chỉ đối với
một thể hiện của kiểu dữ liệu có cấu trúc Address_t tìm được thông qua các phương thức quan
sát của chúng (được xác định bởi toán tử ' ') và được nối với nhau (bởi toán tử '||' ) thành một
chuỗi đơn để hình thành một địa chỉ gửi thư.
Trước khi có thể sử dụng hàm biến đổi này, chúng ta phải sử dụng câu lệnh CREATE
TRANSFORM để kết hợp các hàm biến đổi ADDRESS_TRANSFORM với tên nhóm và kiểu

create
table
clients (client_id integer generated always as identity,
client_lname varchar(12), client_fname varchar(12), address address_t)

create
function
address_transform (addr address_t) returns varchar(42) language sql
return addr street || ', ' || addr city || ', ' || addr province ||
' ' || addr postal_code

create
transform for address_t
db2_program (from sql with function address_transform)

insert into
clients (client_lname, client_fname, address) values ('Nicholson',
'James',
address_t() street('20 Indian Rd') city('Toronto') province('Ontario')
postal_code('M6T2R1'))

select client_id, client_fname, client_lname, address from
clients

CLIENT_ID CLIENT_FNAME CLIENT_LNAME ADDRESS 21 James Nicholson 20 Indian Rd, Toronto, Ontario M6T2R1

1 record(s) selected.

select client_id, client_lname, address city as city from
clients

CLIENT_ID CLIENT_LNAME CITY

21 Nicholson Oakville

1 record(s) selected.

connect reset

Để minh họa hệ thống phân cấp bảng định kiểu đơn giản và thuộc tính kế thừa, chúng ta hãy tạo
ra ba kiểu dữ liệu cấu trúc mới (Liệt kê 3): Emp_t, Salesperson_t, và Engineer_t. Emp_t là kiểu
dữ liệu gốc, và định nghĩa của nó bao gồm các kiểu dữ liệu cấu trúc Address_t mà chúng ta đã
tạo trước đây. Mệnh đề REF USING INTEGER xác định rằng kiểu dữ liệu INTEGER sẽ được sử
dụng để biểu diễn kiểu REFERENCE của kiểu dữ liệu cấu trúc này và tất cả các nhóm con của
nó. Bản thân REFERENCE là kiểu hệ thống, tức là kiểu dữ liệu của cột định danh đối tượng của
bất kỳ bảng được định kiểu nào. (Bởi vì các bảng được định kiểu chứa các đối tượng có thể được
tham chiếu bởi các đối tượng khác, mỗi bảng được định kiểu phải có một cột định tên đối tượng
làm cột đầu tiên của nó.)
Salesperson_t và Engineer_t là kiểu dữ liệu con, được tạo ra theo Emp_t, là siêu kiểu của chúng.
Các định nghĩa cho các dữ liệu con này bao gồm các thuộc tính bổ sung mà không phải là một
phần của dữ liệu kiểu Emp_t, nhưng nó làm cho các dữ liệu con này khác với siêu kiểu của
chúng; tuy nhiên, các thuộc tính là một phần của định nghĩa siêu kiểu, được kế thừa bởi các kiểu
dữ liệu con của chúng.
Sau khi tạo ra các kiểu dữ liệu có cấu trúc cần thiết, chúng ta có thể tạo các bảng được định kiểu
dựa trên các kiểu dữ liệu này (Liệt kê 3). Siêu bảng trong hệ thống phân cấp bảng nhỏ này được
đặt tên là EMP. Tiếp tục sáng tạo theo trí tưởng tượng, chúng ta đặt tên cho cột trình định tên đối
tượng là OID và chỉ rõ rằng giá trị của nó sẽ được người dùng tạo. Sau khi giá trị của cột OID
được chèn vào, nó không thể sửa đổi được. Mệnh đề INHERIT SELECT PRIVILEGES quy định

engineer_t under
emp_t as (perf_bonus decimal(7,2),
recog_award decimal(7,2)) mode db2sql
create
table emp of emp_t (ref is oid user generated)

create table salesperson of
salesperson_t under emp inherit select privileges

create table engineer of engineer_t
under emp inherit select privileges
insert into
engineer (oid, empno, lname, fname, deptno, salary,
perf_bonus, recog_award, address) values (engineer_t(1), 42, 'Kidman',
'Jennifer',
'Z004', 65000.00, 4000.00, 2000.00, address_t() street('7 Dorval Rd')
city('Markham') province('Ontario') postal_code('L6G2R1'))

insert
into
salesperson (oid, empno, lname, fname, deptno, salary, commission,
address)
values (salesperson_t(2), 69, 'Theron', 'Maggie', 'C012', 49000.00,
15000.00,

7 Dorva

1 record(s) selected. select oid, empno, lname, deptno, salary, commission, address from
salesperson

OID EMPNO LNAME DEPTNO SALARY COMMISSION ADDRESS 2 69 Theron C012 49000.00 15000.00 7 River St,
Ottawa,

1 record(s) selected.

connect reset


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status