Kiểu dữ liệu vô hướng

Một phần của tài liệu KIẾN TRÚC và QUẢN TRỊ cơ sở dữ LIỆU ORACLE (Trang 162 - 166)

CHƯƠNG 14. QUẢN LÝ CÁC TABLES

14.2. CÁC KIỂU DỮ LIỆU TRONG TABLE

14.2.1. Kiểu dữ liệu vô hướng

Dữ liệu kớ tự cú thể lưu trữ theo kiểu chuỗi cú ủộ dài khụng ủổi (fixed length) hoặc cú ủộ dài thay ủổi ủược (variable length) trong database.

Kiểu kớ tự cú ủộ dài khụng thay ủổi như là CHAR, NCHAR ủược lưu trữ gắn thờm cỏc khoảng trống (blanks). NCHAR là kiểu dữ liệu NLS (kiểu dữ liệu cú hỗ trợ ủặc tớnh ngụn ngữ của từng quốc gia) cho phộp lưu trữ cỏc tập kớ tự cú ủộ rộng khụng thay ủổi hay cú ủộ rộng thay ủổi (fixed width, variable width). Kớch thước cực ủại ủược quyết ủịnh bởi số bytes dựng ủể lưu trữ một kí tự, với một giới hạn trên là 2000 bytes cho một row.

Kiểu dữ liệu CHAR phù hợp với việc lưu trữ xâu ký tự thuộc bảng mã ASCII. Trong khi kiểu dữ liệu NCHAR phù hợp với việc lưu trữ xâu ký tự thuộc bảng mã phức tạp hơn, bảng mã unicode chẳng hạn. Khi này, mỗi ký tự lưu trữ có thể có kích thước lớn hơn một byte (Ví dụ:

ký tự chữ Trung Quốc, Nhật Bản,..).

Lưu trữ dữ liệu bằng kiểu CHAR, NCHAR nhiều khi gây ra hiện tượng tốn kém bộ nhớ một cỏch khụng cần thiết. Kiểu dữ liệu chuẩn VARCHAR và NVARCHAR cú thể khắc phục ủược nhược ủiểm này. Với việc sử dụng cỏc kiểu dữ liệu VARCHAR và NVARCHAR ủể lưu trữ dữ

liệu, nếu nội dung của dữ liệu lưu trữ ít hơn kích thước khai báo thì hệ thống sẽ chỉ cấp vừa ủủ bộ nhớ ủể lưu trữ xõu ký tự mà thụi.

Ví dụ minh hoạ việc lưu trữ dữ liệu xâu chữ giữa các kiểu dữ liệu khác nhau Dữ

liệu

Bảng

mã Kiểu dữ liệu Lưu trữ dữ liệu Test 8 bits CHAR(10) 10 bytes T e s t

Test 16 bits NCHAR(5) 10 bytes T e s t

Test 8 bits VARCHAR(10) 4 bytes T e s t

Test 16 bits NVARCHAR(5) 8 bytes T e s t

VARCHAR và NVARCHAR là hai kiểu dữ liệu chuẩn ủược Oracle hỗ trợ từ cỏc phiờn bản ủầu.

Với các phiên bản sau của Oracle, có hỗ trợ thêm kiểu dữ liệu VARCHAR2 và NVARCHAR2.

Hai kiểu dữ liệu này cũng tương tự như VARRCHAR và NVARCHAR, tuy nhiên hai kiểu dữ liệu này ủược hỗ trợ xử lý tốt hơn và cũn ủược tiếp tục hỗ trợ trong cỏc phiờn bản tiếp theo của Oracle. Oracle khuyến cáo người sử dụng nên dùng kiểu dữ liệu VARCHAR2 và NVARCHAR2 thay cho kiểu các dữ liệu cũ là VARCHAR và NVARCHAR.

Kiểu dữ liệu kớ tự cú ủộ dài thay ủổi sẽ chỉ sử dụng một số bytes cần thiết ủể lưu trữ giỏ trị thực sự của cột và cú thể thay ủổi kớch thước cho mỗi hàng. VARCHAR2 và NVARCHAR2 là vớ dụ của kiểu dữ liệu kớ tự cú ủộ dài thay ủổi.

Hình vẽ 69. Các kiểu dữ liệu trong Oracle

Dữ liệu kiểu số (numeric)

Dữ liệu kiểu số trong Oracle Database luụn ủược lưu trữ với kiểu dữ liệu cú ủộ dài thay ủổi.

Chỳng cú thể lưu trữ ủược những con số lờn tới 38 chữ số.

Dữ liệu kiểu số có:

Một byte ủể lưu phần mũ

Một byte ủể lưu hai con số phần ủịnh trị.

Một byte ủể lưu số õm.

Kiểu dữ liệu ngày tháng (date)

Oracle server lưu dữ liệu kiểu date trong một trường cú ủộ dài khụng thay ủổi là 7 bytes. Dữ liệu kiểu date của Oracle bao giờ cũng bao gồm thời gian ủẩy ủủ: thế kỷ, năm, thỏng, ngày, giờ, phút, giây và phần trăm của giây.

Kiểu dữ liệu thô (raw)

Kiểu dữ liệu này cho phép lưu trữ các dữ liệu nhị phân nhỏ. Oracle server không thực hiện chuyển ủổi tập kớ tự mỗi khi dữ liệu kiểu raw ủược chuyển qua lại giữa cỏc mỏy trong mạng (khi dữ liệu kiểu raw ủược dịch chuyển từ database này sang database khỏc sử dụng cụng cụ của Oracle).

Kiểu dữ liệu lưu trữ ủối tượng lớn (LOB)

LONG, LONG RAW LOB

Một cột cho một bảng Nhiều cột cho một bảng Kích thước có thể tới 2GB Có thể lên tới 4GB SELECT trả về dữ liệu SELECT trả về locator Dữ liệu in-line (có thể lưu trữ trong một

dòng của table)

Dữ liệu có thể là in-line hay out-of-line (dữ liệu khụng lưu trữ ủược trong bảng mà phải lưu riêng trong một tablespace, có sử dụng LOB locator ủể xỏc ủịnh dữ liệu LOB)

Không hỗ trợ Object type Hỗ trợ kiểu object

Truy nhập tuần tự các bó (chunk) Truy xuất chunk không tuần tự Ngoài ra, Oracle cung cấp 6 kiểu dữ liệu cho việc lưu trữ cỏc ủối tượng lớn:

CLOB và LONG ủể dữ liệu kớ tự cú ủộ rộng khụng ủổi.

NCLOB ủể lưu dữ liệu kớ tự NLS cú ủộ rộng khụng ủổi.

BLOB và LONG RAW cho các dữ liệu phi cấu trúc .

BFILE ủể lưu trữ cỏc dữ liệu phi cấu trỳc trong hệ ủiều hành.

LONG và LONG RAW, trước ủõy, thường ủược sử dụng ủể lưu trữ dữ liệu phi cấu trỳc như image, document hay cỏc thụng tin vật lý. Ở cỏc phiờn bản gần ủõy, Oracle 8i, kiểu dữ liệu này ủược thay thế bằng kiểu dữ liệu LOB. Kiểu dữ liệu LOB khỏc với dữ liệu LONG và LONG RAW cho nên chúng không thể dùng lẫn với nhau. LOB không hỗ trợ cho các chương trình viết với LONG và ngược lại.

Kiểu dữ liệu RowID

RowID là toỏn tử giả cú thể ủược sử dụng trong cõu lệnh truy vấn cựng với cỏc cột dữ liệu cú trong bảng. RowID cú một số ủặc tớnh sau:

RowID là ủịnh danh duy nhất cho một row trong database.

RowID không lưu trữ rõ ràng như các cột giá trị.

Mặc dự RowID khụng phải là ủịa chỉ vật lý của một row nhưng nú vẫn cú thể sử dụng ủể xỏc ủịnh vị trớ của một row.

Sử dụng RowID cho phép truy xuất nhanh chóng các rows của một table.

RowID cũn ủược lưu trữ trong Index ủể chỉ ủịnh rừ từng rows tương ứng với từng giỏ trị khoá (key values).

ðịnh dạng của RowID

Cần 10 bytes ủể lưu trữ một giỏ trị RowID trờn ủĩa và hiển thị nú bởi 18 kớ tự. ðịnh dạng của một RowID bao gốm các thành phần:

Data object number: ủược gỏn cho mỗi data object, vớ dụ như: table hay index. Khi cỏc Objects này ủược tạo lập, giỏ trị data object number tương ứng sẽ ủược khởi tạo và ủược quy ủịnh duy nhất trong database.

Relative file number: là số hiệu duy nhất ứng với mỗi file trong một tablespace.

Block number: dựng xỏc ủịnh vị trớ của Block chứa dũng dữ liệu trong file.

Row number: ủể xỏc ủịnh vị trớ của từng row trong danh mục cỏc rows thuộc block header.

Hình vẽ 70. ðịnh dạng của một RowID

Trong ủú, data object number cần 32 bits, relative file number cần 10 bits, block number cần 22 bits và row number cần 16 bits tổng số bits dựng ủể lưu thụng tin về RowID là 80 bits hay 10 bytes.

Khi hiển thị một RowID theo bộ mã 64, ta cần tới 6 vị trí cho data object number, 3 vị trí cho relative file number, 6 vị trí tiếp theo cho block number và 3 vị trí cuối cùng cho row number.

Bộ mã 64 sử dụng các kí tự “ A-Z”, “a-z”,”0-9”,”+ / ” tổng cộng là 64 kí tự.

Ví dụ:

SVRMGR> SELECT deptno, ROWID 2> FROM scott.dept;

DEPTNO ROWID

--- --- 10 AAAArsAADAAAAUaAAA 20 AAAArsAADAAAAUaAAB 30 AAAArsAADAAAAUaAAC 40 AAAArsAADAAAAUaAAD 4 rows selected.

Trong ủú :

AAAArs là giá trị của Data object number AAD là giá trị của Relative file number AAAAUa là giá trị của Block number AAA là giá trị của Row number

Xỏc ủịnh vị trớ của row nhờ giỏ trị của RowID

Vì một segment chỉ có thể nằm trong một tablespace nên ta có thể sử dụng Data Object Number ủể xỏc ủịnh tablespace chứa row. Giỏ trị Relative File Number trong tablespace dựng ủể xỏc ủịnh file. Giỏ trị Block Number dựng ủể xỏc ủịnh Block chứa row và giỏ trị Row Number xỏc ủịnh chớnh xỏc row trong danh mục cỏc rows.

RowID bị giới hạn (Restricted RowID)

Hình vẽ 71. Giới hạn của RowID

Phiờn bản trước ủõy của Oracle cú sử dụng ủịnh dạng Restricted RowID. Một Restricted RowID sử dụng 6 bytes và không chứa giá trị Data Object Number. ðịnh dạng này sử dụng trong Oracle 7 và cỏc phiờn bản trước ủú. Do File Number là duy nhất trong database nờn tại các phiên bản trước của Oracle không cho phép có nhiếu hơn 1024 data file.

Mặc dự Oracle 8 ủó khắc phục giới hạn trờn bằng cỏch sử dụng Tablespace_Relative nhưng File Number trong mỗi Restricted RowID vẫn ủược sử dụng trong một Objects (Vớ dụ như nonpartitioned indexes). Khi này, cỏc Index tham chiếu ủến cỏc rows cũng nằm trờn cựng một segment chứa các rows.

Một phần của tài liệu KIẾN TRÚC và QUẢN TRỊ cơ sở dữ LIỆU ORACLE (Trang 162 - 166)

Tải bản đầy đủ (PDF)

(266 trang)