Ban chỉ ĐẠo công nghệ thông tin của cơ quan đẢng giáo trình thiết kế, XÂy dựng và quản trị CƠ SỞ DỮ liệu hà NỘI, 2004



tải về 1.04 Mb.
trang18/29
Chuyển đổi dữ liệu07.07.2016
Kích1.04 Mb.
1   ...   14   15   16   17   18   19   20   21   ...   29

I.GIỚI THIỆU SQL


Về mặt lý thuyết, ngôn ngữ CSDL phải cho phép chúng ta tạo ra các cấu trúc CSDL và bảng; nó phải cho phép chúng ta thực hiện các công việc quản lý dữ liệu cơ bản (bổ sung, xoá, và sửa dữ liệu); đồng thời nó phải cho phép chúng ta thực hiện các câu vấn tin phức tạp được thiết kế để biến đổi dữ liệu thoo thành thông tin hữu dụng. Hơn nữa, nó phải thực hiện các chức năng cơ bản như vậy với một nỗ lực tối thiểu của người dùng, đồng thời cấu trúc lệnh và cú pháp của nó phải dễ học. Cuối cùng, nó phải dễ chuyển đổi; nghĩa là, nó phải tuân theo một chuẩn nào đó để chúng ta không phải học lại quá nhiều khi chúng ta chuyển từ một RDBMS này sang RDBMS khác.

SQL đáp ứng tốt các yêu cầu ngôn ngữ CSDL lý tưởng này. Trước hết, năng lực của SQL đáp ứng được cả ba loại:



Định nghĩa dữ liệu tạo ra cấu trúc CSDL và cấu trúc bảng của nó.

Quản lý dữ liệu dùng một tập các lệnh nhập, sửa, xoá và cập nhật dữ liệu trong bảng CSDL.

Vấn tin dữ liệu dùng một tập các lệnh khảo sát nội dung CSDL và cho phép người dùng chuyển dữ liệu thô thành thông tin hữu ích.

Thứ hai, SQL tương đối dễ học: nó thực các chức năng CSDL cần thiết bởi một tập khoảng ba mươi lệnh cơ bản. Hơn nữa, SQL là ngôn ngữ phi thủ tục: Bạn chỉ phải cần yêu cầu cái phải làm, bạn không phải bận tâm về cách nó làm như thế nào.

Cuối cùng, Viện Tiêu chuẩn Quốc gia Mỹ ANSI (American National Standards Institute) quy định chặt chẽ một chuẩn SQL. Không hẩn là chuẩn ANSI đã chặt chẽ đến mức tất cả các sản phẩm SQL thương mại không thể tuân theo nó. Trên thực tế, một số nhà cung cấp đã tiếp nhận ngay chuẩn ANSI SQL 2, được cài đặt năm 1993. Do đó, hiếm khi chuyển một ứng dụng từ một RDBMS này sang một RDBMS khác mà không phải tạo ra một vài thay đổi. Tuy nhiên, các phiên bản SQL khác nhau dùng chung cùng một tập lệnh và cấu trúc cơ bản, từ đó cho phép chúng ta kết luận rằng có một chuẩn khả dùng.

Chúng ta sẽ dùng chuẩn này như một nền tảng cho trình bày của chúng ta. Tuy nhiên chúng ta cũng sẽ trình bày một số cải tiến SQL, đặc biệt là khi các cải tiến đó cùng được sử dụng rộng rãi giữa nhiều nhà cung cấp RDBMS.

Đừng vội thất vọng vì sự tồn tại của một số phiên bản SQL đặc thù. Do sự khác biệt giữa các phiên bản SQL đặc thù không lớn lắm, bạn chỉ phải thay đổi một chút để điều chỉnh các yêu cầu phần mềm của bạn. Cho dù bạn sử dụng XDB, ORACLE, dBASE IV, DB2, R:BASE trên DOS, OS/2 DataBase Manager của IBM, hoặc bất cứ một phần mềm RDBMS được thiết lập đúng đắn nào khác, kinh nghiệm của chúng tôi là chỉ cần vài giờ với một quyến sổ tay phần mềm là đủ để bạn tăng tốc độ SQL nếu bạn biết các nội dung được trình bày trong chương này. Tóm lại, kiến thức bạn nhận được trong chương này là khả dùng.

Có một số lý do chính đáng để nghiên cứu những vấn đề cơ bản của SQL:

Nỗ lực chuẩn hoá ANSI đã đưa đến một chuẩn vấn tin thực tế cho CSDL quan hệ. Trên thực tế, nhiều chuyên gia CSDL quan hệ đã thiên về khẳng định rằng “Không có SQL không phải là quan hệ”.

SQL đã trở thành cơ sở cho những nỗ lực hợp nhất DBMS hiện nay và trong tương lai gần, cho phép chúng ta liên kết các CSDL quan hệ, mạng và phân cấp.

SQL đã trở thành chất xúc tác trong quá trình phát triển CSDL phân tán và các kiến trúc CSDL khách/chủ. Chúng ta sẽ khảo sát quá trình phát triển này trong chương 10.

II.CÁC LỆNH ĐỊNH NGHĨA DỮ LIỆU


Các lệnh định nghĩa dữ liệu được dùng để tạo cấu trúc CSDL và các bảng trong CSDL. Trước hết là một tin không vui: Tạo cấu trúc CSDL chính là một đặc điểm giúp phân biệt rõ các RDBMS với nhau. Tin vui là tương đối dễ dàng tạo ra các cấu trúc CSDL rất phức tạp với bất kì RDBMS nào bạn dùng.

1.Tạo cấu trúc CSDL


Nếu RDBMS của bạn sử dụng cài đặt SQL chuẩn ANSI, tạo cấu trúc CSDL lôgic (lược đồ) được hoàn thành bởi dòng lệnh

CREATE SCHEMA AUTHORIZATION

Do đó nếu người tạo là JONES, dùng lệnh

CREATE SCHEMA AUTHORIZATION JONES

Đa số các RDBMS, bao gồm DB2, XDB, và dBASE IV, sử dụng phiên bản

CREATE DATABASE

hơi khác so với phiên bản CREATE SCHEMA được thừa nhận trong SQL chuẩn ANSI nguyên gốc.

Bạn không phải bận tâm khi thấy rằng, trừ quá trình tạo CSDL, phần lớn các thủ tục và lệnh SQL có xu hướng khác một chút so với trong SQL chuẩn. Tuy nhiên, đôi khi bạn có thể gặp một số sai khác cú pháp nhỏ, và chúng tôi sẽ chỉ cho bạn khuôn dạng của chúng bằng cách sử dụng các hộp chú giải như dưới đây:


2.Tạo cấu trúc bảng


Sau khi đã tạo ra cấu trúc CSDL, chúng ta có thể tạo cấu trúc bảng cho các bảng thuộc CSDL. Để trình bày cách thực hiện chúng ta tạo cấu trúc cho hai bảng với tên INVENTRY và VENDOR tương ứng.
(1)Bảng 3.1 Nội dung của bảng INVENTRY

P_CODE

P_DESCRIPT

STOCK_DATE

ON_HAND

MIN_QUANT

PRICE

V_CODE

13-Q2/P2
ZW-23116
2QQ23DRT
54778-2T
23114-AA
89-WRE-Q
2232/QWE
1546-QQ2
WWE/D324
2232/QTY

7.25in, power saw blade
2.5in, wood screw, 100
PVC pipe, 3.5in, 8ft
Rat-tail file, 1/8in fine
Sledge hammer, 12lb
Houselite chain saw, 16in
B&D jigsaw, 8in, blade
Hardware cloth,1/4in,50ft
Claw hammer
B&D jigsaw, 12in, blade

08/12/91
06/25/91
07/02/91
12/03/90
02/15/91
08/11/91
11/26/90
08/14/91
08/12/91
11/26/90

32
237
188
43
8
11
6
15
23
8

15
100
75
20
5
5
3
5
10
3

14.99
8.45
5.87
4.99
14.40
256.99
99.87
39.95
5.95
109.92

21344
21231
21344
21344
21231
24288
24288
23119
21225
24288

Bảng INVENTRY, chỉ ra trên bảng 3.1, sẽ được cấu trúc để chứa bảy thuộc tính, với tên tương ứng là P_CODE, P_DESCRIPT, STOCK_DATE, ON_HAND, MIN_QUANT, PRICE, và V_CODE. Lưu ý các đặc điểm thuộc tính của bảng INVENTRY. Chẳng hạn, P_CODE là một xâu hỗn hợp các kí tự chữ và số, đồng thời chiếm tối đa tám vị trí. Vì P_CODE chứa các kí tự nên nó phải thuộc kiểu trường kí tự. Tương tự, thuộc tính P_DESCRIPT là trường kí tự có thể gồm tới hai nhăm kí tự. Mặt khác, thuộc tính STOCK_DATE chứa dữ liệu ngày, trong khi các thuộc tính ON_HAND, MIN_QUANT và PRICE chứa dữ liệu số. Cuối cùng, chúng ta phải xem xét V_CODE:

Nếu chúng ta định cho phép máy tính tạo ra các mã nhà cung cấp mới bằng cách cộng 1 vào mã nhà cung cấp đã ghi lớn nhất, chúng ta phải xem V_CODE là thuộc tính số. (Bạn không thể thực hiện các thủ tục toán trên dữ liệu kí tự!)

Nếu chúng ta không dự định thực hiện các thủ tục toán trên V_CODE, chúng ta có thể gán cho nó thuộc kiểu kí tự ngay cả khi chúng gồm toàn các kí tự số. Bạn sẽ thấy rằng dữ liệu kí tự cho phép vấn tin nhanh hơn. Do đó, nếu không cần thực hiện các thủ tục toán (cộng, trừ, nhân, chia...) trên thuộc tính, nên lưu nó theo kiểu kí tự.

Chúng ta sẽ sử dụng lựa chọn (1) để trình bày các thủ tục SQL trong chương này.

Phần lớn các cài đặt SQL hiện nay cho phép phân loại các đặc điểm thuộc tính như bảng 3.2; một số còn gồm các kiểu dữ liệu bổ sung như kiểu tiền, kiểu kí tự với độ dài thay đổi, kiểu kí tự với độ dài cố định và một số kiểu khác.

Bảng 3.2 Phân loại thuộc tính

Kiểu

Mô tả

smallint

Giá trị nguyên nhỏ. Giá trị smallint không chứa dấu chấm thập phân và chứa sáu (hoặc ít hơn) chữ số. Số smallint âm dành một vị trí cho dấu. Do đó, giá trị smallint thay đổi từ –99999 đến 999999.

integer

Giá trị nguyên. Giá trị integer chứa tới mười một chữ số. Như vậy giá trị integer thay đổi từ –9999999999 đến 99999999999.

decimal

Giá trị thập phân. Giá trị decimal có thể chứa các vị trí thập phân. Thuộc tính thuộc kiểu decimal cần mô tả tổng số chữ số (gồm cả dấu chấm thập phân) và số dành cho các vị trí thập phân. Chẳng hạn, mô tả decimal(6, 2) đưa ra khoảng giá trị có thể có –99.99 tới 999.99

numeric

Số thập phân có thể chứa tới hai mưới chữ số, gồm dấu chấm thập phân và các vị trí thập phân. Như vậy, các giá trị như 34256450967.85453567 là phù hợp.

float

Số thập phân dấu chấm động có thể chứa tới mười chín chữ số.

date

Dạng ngày Julian cho phép dùng các phép toán số học ngày.

char

Kiểu (xâu) kí tự cho phép dùng dữ liệu xâu trong khoảng từ 1 đến 254 kí tự.

logical

Có thể nhận các mục dữ liệu true (T) hoặc false (F)

SQL chuẩn không hỗ trợ kiểu dữ liệu lôgic (logical)ngày (date). Tuy nhiên, nhiều RDBMS hỗ trợ dữ liệu lôgic, và tất cả RDBMS hiện nay đều hỗ trợ kiểu ngày dựa vào biến đổi toán học, tự động chuyển dạng ngày chuẩn như 11/24/92 thành dạng ngày Julian để cho phép chúng ta thực hiện tính toán số học Julian. Đúng như tên của nó, số học ngày là quá trình cho phép chúng ta cộng hoặc trừ ngày. Chẳng hạn, phép trừ

12/01/92 – 08/12/90

hoàn toàn hợp lệ trong môi trường ngày Julian và đưa ra số ngày giữa 12/01/92 và 08/12/90. Tương tự, ngày sáu mươi kể từ ngày 06/15/92 có thể được tính toán bằng cách

06/15/92 + 60

hoặc ngày 90 kể từ ngày hiện hành trong hệ thống máy tính

SYSDATE + 90

Số học ngày hoàn toàn tiện lợi trong môi trường kinh doanh, đặc biệt khi chúng ta muốn tính lãi trên tất cả các hoá đơn còn nợ cũ trong khoảng thời gian nhiều hơn ba mươi ngày kể từ ngày ghi trong hoá đơn, hoặc khi chúng ta muốn tính số ngày trung bình một sản phẩm nằm trong kho.

áp dụng các kiểu trong bảng 3.2 cho nội dung bảng INVENTRY trong bảng 3.1, chúng ta có thể định kiểu các thuộc tính như trong bảng 3.3. Dùng kiểu thuộc tính trong bảng 3.3, bây giờ chúng ta có thể tạo ra cấu trúc bảng. Để có một định nghĩa bảng dễ đọc, chúng ta đặt mỗi thuộc tính trên một hàng riêng biệt:

CREATE TABLE INVENTRY ( P_CODE CHAR(8) NOT NULL,


P_DESCRIPT CHAR(25) NOT NULL,
STOCK_DATE DATE,
ON_HAND SMALLINT NOT NULL,
MIN_QUANT SMALLINT,
PRICE DECIMAL(7,2),
V_CODE SMALLINT);
Bảng 3.3 Các đặc điểm thuộc tính bảng INVENTRY

Cột (thuộc tính)

Đặc điểm

Yêu cầu đặc biệt

Chú thích

P_CODE

char(8)

Not null

Tối đa 8 kí tự

P_DESCRIPT

char(25)

Not null

Tối đa 25 kí tự

STOCK_DATE

date




Ngày Julian

ON_HAND

smallint

Not null

Giá trị nguyên nằm trong khoảng 0 – 1000

MIN_QUANT

smallint




Giá trị nguyên nằm trong khoảng 0 – 1000

PRICE

decimal(7,2)




Đơn vị USD, giá trị trong khoảng 0.00 - 9999.99

V_CODE

smallint




Mã nhà cung cấp, giá trị nằm trong khoảng 1-1000

Nhớ rằng chúng ta đã dùng mô tả NOT NULL để khẳng định rằng khóa chính của bảng không thể nhận “giá trị” null, theo đó đảm bảo tính toàn vẹn thực thể. Nếu mô tả NOT NULL không được dùng, về sau bảng sẽ chấp nhận mục dữ liệu null, và bạn sẽ phải chấp nhận thiếu tính toàn vẹn thực thể hoặc phải viết chương trình để duy trì toàn vẹn thực thể.

Khi khảo sát lệnh bảng được dùng để tạo cấu trúc bảng INVENTRY, bạn lưu ý các đặc điểm sau đây:

Các mô tả thuộc tính được đặt trong cặp dấu ngoặc tròn.

Các mô tả thuộc tính tách nhau bởi dấu phảy.

Dãy lệnh chấm dứt với dấu chấm phảy trong ví dụ này. (Nhưng nhớ rằng, RDBMS của bạn có thể yêu cầu bạn bỏ đi dấu chấm phảy.)

Bảng 3.4 Nội dung của bảng VENDOR

V_CODE

V_COMPANY

C_LNAME

C_FNAME

C_I

V_PHONE

21231
24288
21344
23119
21225

J.I. Supplies, Inc
Harding Super Wholesale
Q&D Building Supplies
Charlie’s Wholesale
Rather’s Building, Inc.

Fielding
Smith
Cavazos
Smithson
Smith

Anne
Stanley
Maria
Ronald
Sally

K.
G.
D.
W.
K.

666-233-1281
800-213-9999
800-333-9011
212-667-0090
800-234-1200



V_ADDRESS

V_CITY

V_STATE

V_ZIP

1233 Industrial Blvd. W
855 Temco Plaza
1452 West End. Suite 23B
125-C contract Circle
1117 Industrial Plaza

Indianapolis
Rockford
Dallas
Murfreesboro
Champaign

IN
IL
TX
TN
IL

21456
27122
31126
37129
22134

Bảng thứ hai của CSDL, VENDOR, chứa dữ liệu như trong bảng 3.4. Cấu trúc bảng VENDOR được tạo ra bởi lệnh sau:

CREATE TABLE VENDOR ( V_CODE SMALLINT NOT NULL,


V_COMPANY CHAR(25),
C_LNAME CHAR(12),
C_FNAME CHAR(10),
C_I CHAR(2),
V_PHONE CHAR(12),
V_ADDRESS CHAR(30),
V_CITY CHAR(20),
V_STATE CHAR(2),
V_ZIP CHAR(5));
1   ...   14   15   16   17   18   19   20   21   ...   29


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương