Hàm tương tù nh thủ tục, ngoại trừ khi gọi, nó sẽ trả về giá trị gán cho biến. Dạng thức chung của phần đầu là:
FUNCTION <function name>(<parameter1 name><mode><data type>, parameter1 name><mode><data type>, …)
RETURN <function return value data type> IS <variable declarations>
Hàm áp dụng tham số giống nh thủ tục. Lệnh RETURN ở cuối phần đầu quy định dạng thức giá trị trả về.
Dạng thức chung của thân hàm: BEGIN
<program statements> RETURN <return values>
Lệnh RETURN định rõ giá trị thật mà hàm sẽ trả về. Thường thường giá trị trả về là biến gán giá trị.
ạ các ví dụ của phần (Function) với dữ liệu lấy từ CSDL kds
- ví dụ sau là 1 hàm chèn thông tin vào bảng tác giả theo TENTG, EMAIL,WEBSITE,TIEUSỤ
SQL> create or replace function insert_tg(tentg_in VARCHAR2, 2 email_in varchar2, 3 website_in varchar2, 4 tieusu varchar2) 5 return number 6 is 7 new_matg number; 8 begin
9 select tgia_sq.nextval into new_matg from dual; 10 insert into tacgia
11 values(new_matg,tentg_in,email_in,website_in,tieusu); 12 commit;
13 return new_matg; 14 exception
15 when others then 16 rollback;
17 return 1; 18 end; 19 /
SQL>
1.2.8. bé chương trình (package)
ạ tổng quat về package
Bộ chương trình (package) là thư viện mã giúp quản lý lượng lớn chương trình và biến liên quan. Tất cả biến bạn dùng đến giê đều là biến cục bộ, nghĩa là chúng chỉ hiện diện trong chương trình khai báo chúng. Ngay khi kết thúc chương trình sẽ giải phóng bộ nhớ lưu trữ biến, và khó lòng truy cập lại giá trị biến. Đôi khi cần có biến toàn cục, là biến hiển thị trong nhiều chương trình PL/SQL khác nhaụ Bạn khai báo biến toàn cục theo đúng cú pháp khai báo biến cục bộ; biến cục bộ khai báo trong phần DECLARE của chương trình còn biến toàn cục khai báo trong phần DECLARE của bộ chương trình. Trong chương trình, có thể ứng dụng biến toàn cục giống như biến cục bộ. Hơn nữa, đôi khi bạn cần hàm và thủ tục PL/SQL khả dụng đối với người dùng CSDL khác. Để thực hiện việc này trong PL/SQL bạn phải tạo bộ chương trình.
- các ưu điểm của package
Thiết kế chương trình bằng package bạn sẽ tận dụng được những ưu điểm sau:
+Dễ dàng thiết kế +Module hoá +Che dấu thông tin
+Thêm vào tính năng mới +Hiệu quả về tốc độ
b. Dạng thức chung của một package
* Đặc tả bộ chương trình (còn gọi là phần đầu của bộ chương trình) khai báo biến toàn cục, con trỏ, thủ tục, và hàm được chương trình khác gọi hoặc truy cập. Dạng thức khai báo phần đặc tả nh sau:
PACKAGE <package name> IS
<variable declarations>; <cursor declarations>;
<procedure and function declarations>; <procedure and function declarations>;
END <package name>;
Trong bộ chương trình, biến cũng khai báo giống như aị Phải khai báo báo con trá theo dang thức sau:
CURSOR <cursor name>
RETURN <cursor return row variable> IS <cursor SELECT statement>;
Để khai báo thủ tục trong bộ chương trình, bạn phải định rõ tên thủ tục, kèm theo tham số dạng thức biến:
PROCEDURE <procedure name>(<parameter1><data type>, < parameter2><data type>, ……..);
Muốn khai báo hàm trong bộ chương trình, bạn phải định rõ tên hàm, tham số và dạng thức biến như sau:
FUNCTION <function name>( <parameter1><data type>, < parameter2><data type>, ……..)
RETURN <return data type>; * Phần nội dung chương trình:
Phần nội dung chương trình chứa mã khai báo trong đặc tả bộ chương trình. Phần nội dung bộ chương trình là tuỳ ý, bởi thỉnh thoảng bộ chương trình chứa khai báo biến và chẳng có chương trình nào cả. Dạng thức chung cho phần nội dung chương trình là:
PACKAGE <package name> IS
<cursor specifications> <module bodies> END <package name>;
Khai báo biến ở phần nội dung sẽ hiển thị trước tất cả module trong phần nội dung bộ chương trình, nhưng không hiển thị trước module ngoài phần nội dung bộ chương trình. Biến khai báo trong module sẽ cục bộ đối với module đó. Mỗi module có riêng câu lệnh BEGIN … END.
* các ví dụ của phần (package) với dữ liệu lấy từ CSDL kds
ví dụ: viết mét package chứa toàn bộ các hàm và các thủ tục tạo ở trên
+ phần đặc tả package bao gồm những dữ liệu sau SQL> create or replace package test
2 as
3 function insert_tg(tentg_in VARCHAR2,email_in varchar2, 4 website_in varchar2,tieusu varchar2) 5 return number;
6 procedure g_sach(tens varchar2) ; 7 end test;
8 /
Package created. SQL>
+ cài đặt phần thân cho package
SQL> create or replace PACKAGE BODY test 2 IS
3 function insert_tg(tentg_in VARCHAR2, 4 email_in varchar2, 5 website_in varchar2, 6 tieusu varchar2)
7 return number 8 is
9 new_matg number; 10 begin
11 select tgia_sq.nextval into new_matg from dual; 12 insert into tacgia
13 values(new_matg,tentg_in,email_in,website_in,tieusu); 14 commit;
15 return new_matg; 16 exception
17 when others then 18 rollback;
19 return 1; 20 end;
21 procedure g_sach(tens varchar2) 22 is
23 tsach varchar2(100); 24 giasach number(19,4); 25 begin
26 select tensach,gia into tsach,giasach from sach 27 where tensach=tens;
28 dbms_output.put_line(tsach||' '||to_char(giasach)); 29 end;
30 END; 31 /
Package body created. SQL>
1.2.9. bé kích cơ sở dữ liệu (trigger)
Trigger của Oracle là một khối mã đặc biệt được kích hoạt bởi một sự kiện trong CSDL. Hầu hết ứng dụng sử dụng trigger để cập nhật một số bảng nào đó dùa trên một hoạt động trong bảng khác. trigger buộc các nguyên tắc giao dịch trong CSDL. Trigger có thể kích hoạt dùa trên các phát biểu DML hoặc ĐL. Bạn có thể dò xét các hoạt động cụ thể của người dùng bằng cách viết trigger hoặc các thủ tục lưu trước khác sẽ ghi nhận thông tin người dùng vào một bảng khi người dùng thực hiện các hoạt động CSDL cụ thể, chẳng hạn nh cập nhật bảng.
Bạn có thể tạo một vài kiểu trigger trong Oracle9i bao gồm các trigger DML và ĐL dùa trên các hoạt động của người dùng trên các bảng và view và các trigger mức hệ thống có tầm vực rộng hơn.
ạ các ví dụ của phần (trigger) với dữ liệu lấy từ CSDL pubs
- trigger sau để dò xét hoạt động thêm dữ liệu của người dùng trên một bảng
Trước tiên ta tạo một bảng gồm 2 trường (user_name và ngay_insert) để lưu trữ thông tin ai đã insert vào bảng tacgia và vào thời gian nàọ
+Tạo bảng để lưu thông tin: SQL> create table kt 2 (user_name varchar2(20), 3 ngay_insert date); Table created. SQL> +Tạo trigger
SQL> create or replace trigger kt_insert_table 2 after insert on kds.tacgia
3 begin
4 insert into kt values(user,sysdate); 5 end;
6 /
Trigger created. SQL>
+bây giê ta insert vào bảng tacgia SQL> insert into tacgia
2 values(31,'thuy hoá,'daithuyhoa@yahoọcom','',''); 1 row created.
SQL>
+ xem thông tin ở bảng kt SQL> select * from kt;
USER_NAME NGAY_INSE --- --- KDS 28-APR-06 SQL>
- Tạo một trigger để kiểm tra đăng nhập/thoát khỏi CSDL Trigger này ở mức hệ thống vì đó chúng ta làm việc trên system +trước hết ta tạo bảng kiểm tra có tên là: logon_kt
SQL> create table logon_kt 2 (user_id varchar2(30), 3 sess_id number(10), 4 logon_time date, 5 logoff_time date, 6 host varchar2(20));
Table created. SQL>
Tiếp theo tạo cặp trigger đăng nhập và thoát khỏi CSDL SQL> create or replace trigger logon_kt_trig
2 after logon 3 on database 4 begin
5 insert into logon_kt
6 values(user,sys_context('userenv','sessionid'),sysdate,null, 7 sys_context('userenv','host')); 8 end; 9 / Trigger created. SQL>
Tạo trigger kiểm tra logoff
SQL> create or replace trigger logoff_kt_trig 2 before logoff on database
3 begin
4 insert into logon_kt
5 values(user,sys_context('userenv','sessionid'),null,sysdate, 6 sys_context('userenv','host')); 7 end; 8 / Trigger created. SQL>
Sau đó bạn đăng nhập và thoát khỏi mấy lần, và xem thông tin của bảng logon_kt
SQL> select * from logon_kt;
USER_ID SESS LOGON_T LOGOFF_T HOST --- --- --- --- --- SYSTEM 596 28-APR-06 WORKGROUP\PD KDS 597 28-APR-06 WORKGROUP\PD KDS 597 28-APR-06 WORKGROUP\PD SYSTEM 598 28-APR-06 WORKGROUP\PD SYSTEM 598 28-APR-06 WORKGROUP\PD SCOTT 599 28-APR-06 WORKGROUP\PD SCOTT 599 28-APR-06 WORKGROUP\PD PHUONGDONG 600 28-APR-06 WORKGROUP\PD PHUONGDONG 600 28-APR-06 WORKGROUP\PD SYSTEM 601 28-APR-06 WORKGROUP\PD 10 rows selected.
SQL>
- Trigger dò xét hành vi người dùng.
+Trước hết bạn cũng tạo bảng để ghi nhận các thông tin từ trigger đưa về: SQL> create table đl_log
2 (user_name varchar2(30), 3 change_date date,
4 đl_type varchar2(40),object_owner varchar2(30), 5 database_name varchar2(20));
Table created. SQL>
+ tạo trigger
SQL> create or replace trigger đl_log_trig 2 before đl on database
3 begin
4 insert into đl_log
5 values(ora_login_user,sysdate,ora_dict_obj_type, 6 ora_dict_obj_owner,ora_database_name); 7 end; 8 / Trigger created. SQL>
1.3. CÀI ĐẶT ORACLE DESIGNER9I REPOSITORY
Chóng ta tạo user phuongdong để chỉ có user này mới có quyền truy cập vào Oracle designer
Create user phuongdong identified by phuongdong default tablespace users temporary tablespace temp; - Sau đó chạy script sau
sql> @ c:\oracle_tools\repadm61\utl\ckrorolẹsql sau đó gán quyền cho user phuongdong nh sau: grant execute on dbms_rls to phuongdong; grant execute on dbms_lock to phuongdong; grant execute on dbms_pipe to phuongdong; grant create table to phuongdong;
grant create view to phuongdong; grant create procedure to phuongdong; grant create synonym to phuongdong; grant create sequence to phuongdong;
grant select on sys.v_$parameter to phuongdong; grant select on dba_rollback_segs to phuongdong; grant select on dba_segments to phuongdong; grant create any synonym to phuongdong; grant drop any synonym to phuongdong; grant create public synonym to phuongdong; grant drop public synonym to phuongdong; grant ck_oracle_repos_owner to phuongdong; grant connect, resource to phuongdong;
Sau khi các câu lệnh đã thực thi thành công, chúng ta sang bước tiếp theọ * Tạo Designer Repository
Vào: Start Programs/oracle9i developer suite-orahome92a/oracle software configuration manager/Repository administrator utilitỵ
login bằng:
user: phuongdong passwd: phuongdong alias: ittc
- Chọn Icon “install” chọn kích thước DR, sau đó click “Start”
Bây giê bạn có thể ngồi chờ cho đến khi bảng thông báo “complete” xuất hiện, có nghĩa là bạn đã cài xong DR.
1.4. KẾT LUẬN
Phần này chúng tôi đã giới thiệu sơ lược về kiến thức Oracle, từ việc cài đặt rất chi tiết nh: Cài đặt và tạo database trên windows, cài đặt bộ Oracle9i
developer suite, cài đặt Oracle Designer9i Repository, và giới thiệu sơ lược về Oracle Net và cơ chế bảo mật, cho đến phần lập trình trong Oracle đó là: PL/SQL, Function, Procedure, Package, Trigger. Những nội dung được trình bày ở trên chỉ là những công cụ và kiến thức cơ bản nhất, đủ để bạn tìm hiểu và phát triển hệ thống quản lý sách được trình bày trong phần saụ
Phần II
PHÂN TÍCH VÀ THIẾT KẾ CƠ SỞ DỮ LIỆU 2.1. MÉT SÈ ĐỊNH NGHĨA VÀ KHÁI NIỆM
Thực thể là một khái niệm mô tả một líp các đối tượng có đặc trưng chung mà một tổ chức hệ thống quan tâm. Thực thể phải tồn tại, cần được lùa chọn có lợi cho quản lý và phải phân biệt được.
2.1.2. Thuộc tính (attribute)
Thuộc tính là đặc trưng chung, vốn có của líp đối tượng mà ta quan tâm. Nó là một giá trị dùng để mô tả một đặc trưng nào đó của thực thể.
2.1.3. Phô thuộc hàm
Cho mét quan hệ R bất kỳ và hai nhóm thuộc tính A và B khác nhau của nó. Nhóm thuộc tính B được gọi là phụ thuộc hàm vao nhóm thuộc tính A nếu đối với mỗi dòng của quan hệ R các giá trị của A xác định duy nhất các giá trị của B. Sự phụ thuộc hàm của A vào B còn gọi là A xác định B và được ký hiệu bằng mòi tên từ A sang B: AB
2.1.4. Khoá dự tuyển (candidate key)
Khoá dự tuyển của mét quan hệ là một nhóm thuộc tính mà các giá trị của nó xác định duy nhất mỗi dòng trong mét quan hệ. Khoá dự tuyển cần thoả mãn các tính chất sau:
+ Xác định duy nhất: Giá trị của khoá xác định duy nhất mỗi dòng. Tính chất này cho thấy: các thuộc tính không phải là khoá phụ thuộc hàm vào khoá.
+ Không dư thừa: Khi xóa đi bất kỳ thuộc tính nào của khoá đều phá huỷ tính xác định duy nhất của khoá.
2.1.5. Khoá chính (primary key)
Khoá chính là một khoá dự tuyển được chọn làm khoá của quan hệ.
2.1.6. Khoá ngoại lai (foreign key)
Khoá ngoại lai của mét quan hệ là một nhóm thuộc tính trong quan hệ đó và là khoá chính trong mét quan hệ khác.
2.1.7. Chuẩn hoá (Normalization)
Chuẩn hoá là một quá trình chuyển một cấu trúc dữ liệu phức tạp thành các cấu trúc dữ liệu tốt và đơn giản hơn.
D¹ng kh«ng chuÈn ho¸
D¹ng chuÈn thø nhÊt (1NF)
D¹ng chuÈn thø hai (2NF)
D¹ng chuÈn thø ba (3NF)
Mét quan hệ đạt chuẩn 1 nếu nó không chứa các thuộc tính lặp.
b. Chuẩn 2 (Second normal form: 2NF):
Phô thuộc hoàn toàn vào khoá. Một quan hệ đạt chuẩn 2 NF nếu thoả mãn 2 điều kiện sau:
+ Nã đã ở dạng chuẩn 1
+ Không tồn tại thuộc tính ngoài khoá mà phụ thuộc vào một phần của khoá.
c. Chuẩn 3 (Third normal form: 3NF):
Phô thuộc trực tiếp vào khoá. Mét quan hệ đạt chuẩn 3 nếu: + Nã đã ở dạng chuẩn 2.
+ Không tồn tại thuộc tính ngoài khoá mà phụ thuộc bắc cầu vào khoá (qua một thuộc tính gọi là thuộc tính cầu, cũng là thuộc tính ngoài khoá).
1NF 2NF
3NF BCNF
Phân líp các dạng chuẩn có thể được thể hiện qua hình sau:
2.1.8. Quan hệ:
Khi chóng ta muốn thiết kế một cơ sở dữ liệu quan hệ thường đòi hỏi phải chọn các lược đồ quan hệ phù hợp. Việc chọn các tập lược đồ này có thể tốt hơn hoặc xấu hơn tập lược đồ khác dùa trên một số tiêu chuẩn nào đó, do vậy cần thiết phải nghiên cứu tính chất cơ bản còng nh các thuật toán để có thể nhận được các tập lược đồ phù hợp. Trọng tâm của việc thiết kế các lược đồ cơ sở dữ liệu là các phụ thuộc hàm dữ liệu, tức là các mối dàng buộc có thể có giữa các giá trị hiện hữu của các thuộc tính.
Khái niệm quan hệ (R) ở mục này được dùng để nhóm họp hai hay nhiều thực thể với nhau nhằm biểu hiện một mối liên quan tồn tại trong thế giới thực giữa các thực thể nàỵ Kích thước của một quan hệ là số thực thực thể cấu thành nên những quan hệ có kích thước lớn hơn bạ
Trong mô hình dữ liệu thường các quan hệ được biểu diễn bằng hình tròn hoặc hình Elipsẹ
Trong sơ đồ quan hệ thực thể trên thì E là các thực thể, còn R là các mối quan hệ giữa E và Ẹ
ạ Phân loại quan hệ
Xét R là một tập quan hệ và E là 1 thực thể cấu thành của R, mỗi cặp (E,R) được biểu thị trên sơ đồ khái niệm dữ liệu bằng một đoạn thẳng. Với thực thể E ta có thể xác định được:
- X là số tối thiểu các thể hiện tương ứng với E và R có thể có trong thực tế. Giá trị của X nh vậy chỉ có thể bằng 0 hoặc 1
- Y là số tối đa các thể hiện tương ứng với E và R có thể có trong thực tế. Giá trị của Y nh vậy chỉ có thể bằng 1 hoặc một số nguyên N>1
- Cặp số (X,Y) được định nghĩa là bản số của đoạn thẳng (E,R) và có thể lấy các giá trị nh sau: (0,1), (0,N) hay (1,N) với N>1.
Đối với các quan hệ nhị nguyên R liên kết giữa hai thực thể A và B ta phân thành 3 loại quan hệ cơ bản sau:
* Quan hệ 1-1 (mét – mét)
Mỗi thể hiện của thực thể A được kết hợp với 0 hay 1 thể hiện của B và ngược lạị
X,Y có thể lấy giá trị 0 và 1
A B quan hÖ (x,y) E R E (y,1) A R A E E (x,1)
* Quan hệ 1-N (mét – nhiều)
Mỗi thể hiện của thực thể A được kết hợp với 0,1 hay nhiều thể hiện của B, và mỗi thể hiện của B được kết hợp với một thể hiện duy nhất của Ạ Đây là loại quan hệ thông dụng và đơn giản nhất.
X có thể lấy giá trị 0 hoặc 1 * Quan hệ N-P (nhiều-nhiều)
Mỗi thể hiện của một thực thể A được kết hợp với 0,1 hay nhiều thể hiện của B và ngược lại, mỗi thể hiện của B được kết hợp với 0,1 hay nhiều thể