- Cơ sở dữ liệu ứng dụng: Một cơ sở dữ liệu ứng dụng có thể có các loại file sau: • Primary Files: Mỗi CSDL phải có ít nhất một tập tin Primary Data File với phần mở rộng là .MDF.. Ràn
Trang 1THIẾT KẾ VÀ LẬP TRÌNH WEB
TRƯỜNG ĐẠI HỌC NHA TRANG
Chủ đề 3 PHÂN TÍCH, THIẾT KẾ VÀ CÀI ĐẶT CƠ SỞ DỮ LIỆU
CHO ỨNG DỤNG WEB
Trang 21 Các triết lý xây dựng Website
- Mục đích, nội dung của Website cần thiết kế
- Xác định đối tượng độc giả của Website
- Thiết lập các chủ đề
- Thiết kế các khối thông tin chủ yếu sẽ cung cấp
Trang 32 Phân tích, thiết kế, cài đặt và lập trình cơ sở dữ liệu cho bài toán
Trang 42.2 Thiết kế bài toán
- Thiết kế giao diện
- Thiết kế dữ liệu
- Thiết kế xử lý
Trang 53 Hệ quản trị CSDL SQL Server
- SQL (Structured Query Language) là ngôn ngữ chuẩn được thiết kế để truy vấn và quản lý dữ
liệu trên hệ quản trị CSDL quan hệ.
- Đối với hệ quản trị CSDL SQL Server thì ngôn ngữ dùng để tương tác với cơ sở dữ liệu là T – SQL Ngôn ngữ T – SQL trên SQL Server bao gồm nhiều câu lệnh khác nhau, có thể chia thành 3 nhóm:
• Ngôn ngữ định nghĩa dữ liệu (DDL - Data Definition Language): với các lệnh cho phép tạo, thay đổi
cấu trúc và xóa bỏ các đối tượng cơ sở dữ liệu như: view, table, database,…
• Ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language): với các lệnh như SELECT /
INSERT /UPDATE /DELETE cho phép lấy về dữ liệu cụ thể, thay đổi giá trị của dữ liệu
• Ngôn ngữ điều khiển dữ liệu (DCL): với các lệnh cho phép hay ngăn chặn người dùng thao tác
dữ liệu.
Trang 6Cơ sở dữ liệu trong SQL Server
- Cơ sở dữ liệu hệ thống:
master: Ghi nhận thông tin cấp hệ thống, thông tin khởi tạo SQL Server và thiết lập
cấu hình SQL Server Database này cũng ghi nhận tất cả các tài khoản đăng nhập, sự tồn tại của các Database khác, vị trí tập tin chính cho tất cả Database người dùng.
tempdb: Giữ các bảng tạm, các storedd procedure tạm, Được dùng cho các nhu cầu
lưu trữ tạm của SQL Server.
model: là khuôn mẫu cho tất cả các CSDL khác được tạo trên hệ thống kể cả tempdb
Database model phải được tồn tại trên hệ thống, bởi vì nó được dùng để tạo lại tempdb
Trang 7- Cơ sở dữ liệu ứng dụng:
Một cơ sở dữ liệu ứng dụng có thể có các loại file sau:
• Primary Files: Mỗi CSDL phải có ít nhất một tập tin Primary Data File với
phần mở rộng là MDF Tập tin này ngoài nhiệm vụ cất trữ dữ liệu thuần túy còn nhiệm vụ lưu trữ thông tin liên quan đến cấu trúc và đặc điểm của chính CSDL đó (lưu trong các system tables).
• Secondary Files: Mỗi CSDL có thể không có hoặc có nhiều Secondary
Data File Các tập tin này chỉ thuần túy lưu trữ dữ liệu và có phần mở rộng là NDF
Trang 8• Log Files: Mỗi CSDL phải có ít nhất một transaction log file (có phần mở
rộng là LDF) Log file làm nhiệm vụ lưu trữ thông tin liên quan các giao dịch (transaction) thực hiện trên CSDL đó Thông tin này một phần phục vụ cho thao tác Roll Back khi có lỗi giao dịch xảy ra
• Các tập tin CSDL được tổ chức thành file group (nhóm) theo nguyên tắc:
Một CSDL có thể có một hay nhiều file group Trong đó bắt buộc phải có một file group chính gọi là PRIMARY
Trang 9• Mỗi file group có thể chứa một hay nhiều file (.MDF, NDF) Trong đó phải
có ít nhất 1 tập tin Primary File (.MDF) nằm trong group chính PRIMARY
• Các tập tin Log không thuộc về một file group nào cả.
Trang 10Tạo CSDL:
Sử dụng lệnh CREATE DATABASE
CREATE DATABASE <Tên CSDL>
[ON PRIMARY <Khai báo tập tin MDF>, [<Khai báo tập tin NDF>,]…]
[FILEGROUP <Tên file group> <Khai báo tập tin NDF>, [<Khai báo tập tin NDF>,]…]
[LOG ON <Khai báo tập tin LDF>, [<Khai báo tập tin LDF>,]…]
Trang 12Sử dụng Management Tool
R_Click Database → New Database …
Trang 13Đặt tên CSDL → OK
Trang 15Kiểu dữ liệu của SQL Server:
bigint Số nguyên 8 byte
binary[(n)] Dữ liệu nhị phân có kích thước cố định n byte Kích thước lưu trữ
là n+4 byte Với 1<n<8000 bit Dữ liệu số nguyên nhận các giá trị 0, 1 hoặc NULL
char[(n)] Dữ liệu ký tự, có chiều dài n ký tự, không hỗ trợ Unicode Với độ
Trang 16float Dữ liệu số động có phạm vi từ -1.79E+308 đến 1.79E+308
image Dữ liệu nhị phân có chiều dài thay đổi, dài hơn 8000 byte và
tối đa là 2^31-1 byte.
int Dữ liệu số nguyên từ -2^31 đến 2^31-1 Chiếm 4 byte.
money Dữ liệu kiểu tiền tệ từ -2^63 đến 2^63 Chiếm 8byte.
nchar[(n)] Dữ liệu ký tự, có chiều dài cố định n ký tự Có hỗ trợ Unicode
Với 1<n<4000 Chiếm 2n byte.
ntext Dữ liệu ký tự có chiều dài thay đổi, với chiều dài tối đa là
2^30-1 ký tự Hỗ trợ unicode.
Trang 17real Dữ liệu số thực động, phạm vi từ - 3.4E+38 đến 3.4E+38 Chiếm 4
byte.
smalldatetime Dữ liệu ngày giờ từ 1/1/1900 đến 6/6/2079 Chiếm 4 byte.
smallint Dữ liệu số nguyên từ -2^15 đến 2^15-1 Chiếm 2 byte.
smallmoney Dữ liệu kiểu tiền tệ từ -2^31 đến 2^31 Chiếm 4 byte.
sql_variant Cho phép giữ các giá trị của các kiểu dữ liệu khác nhau (tất cả các
kiểu dữ liệu hệ thống khác).
text Dữ liệu ký tự có chiều dài thay đổi, dài hơn 8000byte Có thể lưu tới
2^31 ký tự Không hỗ trợ Unicode.
timestamp Cột timestamp được cập nhật tự động mỗi khi dòng được thêm hoặc
được cập nhật Mỗi bảng chỉ có thể có 1 cột timestamp Kích thước lưu trữ là 8 byte.
Trang 18Mã loại SP – Khóa chính Tên loại SP
Tên thuộc tính Kiểu dữ liệu Giải thích MaSP
TenSP Dongia
nvarchar(10) nvarchar(40) money
Mã sản phẩm – Khóa chính Tên sản phẩm
Đơn giáSANPHAM
Trang 19Tạo bảng:
Chọn đối tượng Tables trong
CSDL cần thiết kế → R_Click
→ New Table …
Trang 20- Nhập tên thuộc tính tại Column Name
- Thiết kế kiểu dữ liệu tại Data Type
- Thiết lập khóa chính: Chọn thuộc tính làm khóa chính → R_Click →
Set Primary Key
Trang 21Lưu ý:
- Thay đổi thiết kế bảng: Chọn bảng cần thay đổi → R_Click → Design
- Xóa bảng: Chọn bảng cần xóa → R_Click → Delete
Trang 22Lược đồ - Database Diagrams
• Ý nghĩa: Dùng để thiết lập mối quan hệ giữa các bảng, kiểm tra sự liên
kết dữ liệu giữa các thuộc tính khoá ngoại của các bảng dữ liệu.
Trang 23- Các mối quan hệ:
Quan hệ một - một: Quan hệ giữa hai bảng được thiết lập khi trường quan
hệ đều là khóa chính ở cả hai bảng
Quan hệ một - nhiều: Quan hệ giữa hai bảng mà khóa chính trong một bảng
được kết nối với trường (thuộc tính) là khoá ngoại của một bảng khác
Trang 24Nhập dữ liệu trực tiếp vào bảng
Chọn bảng cần nhập liệu →
R_Click → Edit Top 200 Rows
→ Nhập dữ liệu vào các cột của
bảng
Lưu ý, khi nhập dữ liệu vào các bảng nên chú ý các ràng buộc toàn vẹn:
Trang 25Thiết kế bảng bằng lệnh T – SQL:
Tạo bảng:
CREATE TABLE <Tên bảng>
(
<tên cột 1> <kiểu dữ liệu> [<các ràng buộc cột 1>]
<tên cột 2> <kiểu dữ liệu> [<các ràng buộc cột 2>]
Trang 26Ví dụ:
CREATE TABLE NHANVIEN
(
MaNV varchar (10) PRIMARY KEY ,
HoNV nvarchar (30) NOT NULL,
TenNV nvarchar (20) NOT NULL,
GioiTinh bit DEFAULT (1),
NgaySinh Date NOT NULL,
DiaChi nvarchar (100) NOT NULL,
DienThoai nvarchar (15) NULL
Trang 27CÁC LOẠI RÀNG BUỘC:
Các ràng buộc được xây dựng nhằm đảm bảo dữ liệu nhập tuân theo đúng các yêu cầu của người thiết kế CSDL
a Ràng buộc CHECK
- Ràng buộc CHECK được sử dụng nhằm chỉ định điều kiện hợp lệ đối với
dữ liệu mỗi khi có dữ liệu được thêm vào bảng hoặc dữ liệu trong bảng được cập nhật
- Ràng buộc CHECK có cú pháp như sau:
[CONSTRAINT tên_ràng_buộc] CHECK (điều_kiện)
Trang 28Ví dụ, tạo bảng SANPHAM có ràng buộc Đơn giá có giá trị lớn hơn hoặc bằng 0
CREATE TABLE SANPHAM
(
MaSP nvarchar (10) PRIMARY KEY ,
TenSP nvarchar (40) NOT NULL,
DonGia money NOT NULL,
MaLoaiSP nvarchar (10) NOT NULL,
CONSTRAINT CHK_DG CHECK (DonGia >= 0)
)
Trang 29Trong trường hợp không cần sử dụng tên của ràng buộc, chúng
ta có thể định nghĩa ràng buộc CHECK ngắn gọn như sau:
CREATE TABLE SANPHAM
(
MaSP nvarchar (10) PRIMARY KEY ,
TenSP nvarchar (40) NOT NULL,
DonGia money NOT NULL CHECK (DonGia >=0),
MaLoaiSP nvarchar (10) NOT NULL
)
Trang 30b Ràng buộc Primary Key
- Ràng buộc PRIMARY KEY được sử dụng để định nghĩa khoá chính của bảng
- Ràng buộc PRIMARY KEY là cơ sở cho việc đảm bảo tính toàn vẹn dữ liệu trong bảng cũng như toàn vẹn tham chiếu
- Để khai báo một ràng buộc PRIMARY KEY, ta sử dụng cú pháp như sau: [CONSTRAINT tên_ràng_buộc] PRIMARY KEY [(danh_sách_cột)]
Trang 31Ví dụ, với bảng SANPHAM, ta có thể dùng lệnh như sau:
(
MaSP nvarchar (10),
TenSP nvarchar (40) NOT NULL,
DonGia money NOT NULL CHECK (DonGia > 0),
MaLoaiSP nvarchar (10) NOT NULL,
CONSTRAINT PK_SP PRIMARY KEY ( MaSP )
)
Lưu ý, trong trường hợp không cần tên ràng buộc, ta có thể khai báo
PRIMARY KEY sau thuộc tính làm khóa chính.
Trang 32c Ràng buộc Foreign Key
- FOREIGN KEY là một cột hay một sự kết hợp của nhiều cột được sử dụng
để tạo ra mối liên kết dữ liệu giữa hai bảng
- Trong một bảng có thể có nhiều FOREIGN KEY và có thể chứa giá trị NULL
- FOREIGN KEY có chức năng dùng để kiểm soát dữ liệu chứa trong các bảng có có liên kết dữ liệu
Trang 34- SET NULL: Cập nhật lại giá trị khoá ngoại của dòng trong bảng con thành NULL nếu dòng được tham chiếu trong bảng cha bị xóa (nếu cột khóa ngoại cho phép nhận giá trị NULL)
- SET DEFAULT: Cập nhật lại giá trị khoá ngoại của dòng trong bảng con thành giá trị mặc định của cột nếu dòng được tham chiếu trong bảng
Trang 35Ví dụ, tạo bảng SANPHAM trong đó MaSP là khóa chính, MaLoaiSP là khóa ngoại, điều kiện ràng buộc DonGia lớn hơn hoặc bằng 0.
CREATE TABLE SANPHAM
(
MaSP nvarchar (10),
TenSP nvarchar (40) NOT NULL,
DonGia money NOT NULL CHECK ( DonGia >= 0),
MaLoaiSP nvarchar (10) NOT NULL,
CONSTRAINT PK_SP PRIMARY KEY ( MaSP ),
CONSTRAINT FK_L_SP FOREIGN KEY ( MaLoaiSP) REFERENCES LOAISP (MaLoaiSP)
ON DELETE CASCADE
ON UPDATE CASCADE
Trang 36CREATE TABLE SANPHAM
(
MaSP nvarchar (10) PRIMARY KEY ,
TenSP nvarchar (40) NOT NULL,
DonGia money NOT NULL CHECK (DonGia >= 0),
MaLoaiSP nvarchar (10) NOT NULL FOREIGN KEY REFERENCES LOAISP
(MaLoaiSP)
ON DELETE CASCADE
Trang 37d Ràng buộc UNIQUE
- Ràng buộc UNIQUE đảm bảo giá trị của một dòng tại một hay nhiều cột tham gia ràng buộc là duy nhất
- Để khai báo một ràng buộc UNIQUE, ta sử dụng cú pháp như sau:
[CONSTRAINT <tên ràng buộc> UNIQUE [(<danh sách cột>)]
Trang 38Ví dụ, tạo bảng LOAISP trong đó MaLoaiSP là khóa chính, TenLoaiSP không có giá trị trùng nhau:
CREATE TABLE LOAISP
(
MaLoaiSP nvarchar (10) PRIMARY KEY ,
TenLoaiSP nvarchar (40) NOT NULL,
CONSTRAINT U_TenLoai UNIQUE ( TenLoaiSP )
)
Hoặc:
CREATE TABLE LOAISP
(
MaLoaiSP nvarchar (10) PRIMARY KEY ,
TenLoaiSP nvarchar (40) NOT NULL UNIQUE
Trang 39MaNV varchar(10) PRIMARY KEY,
HoTenNV nvarchar(40) NOT NULL,
GioiTinh bit DEFAULT(1),
DiaChi nvarchar(100) NOT NULL
)
Trang 40Sửa đổi thiết kế bảng:
- Khi muốn thay đổi cấu trúc một bảng ta dùng lệnh ALTER TABLE Câu lệnh này cho phép thực hiện được các thao tác sau:
• Bổ sung một cột vào bảng
• Xoá một cột khỏi bảng
• Thay đổi định nghĩa của một cột trong bảng
• Xoá bỏ hoặc bổ sung các ràng buộc cho bảng
Trang 41Cú pháp của câu lệnh ALTER TABLE như sau trong các trường hợp như sau:
Thêm cột vào bảng ALTER TABLE <tên_bảng>
ADD <định_nghĩa_cột>
Sửa cột trong bảng ALTER TABLE <tên_bảng>
ALTER COLUMN <tên_cột> <kiểu_dữ_liệu> [NULL | NOT NULL]
Xóa một trong bảng ALTER TABLE <tên_bảng>
DROP COLUMN <tên_cột>
Thêm ràng buộc vào bảng ALTER TABLE <tên_bảng>
ADD CONSTRAINT <tên_ràng_buộc >
<định_nghĩa_ràng_buộc >
Xóa ràng buộc ALTER TABLE <tên_bảng>
Trang 42Một số lưu ý:
- Nếu bổ sung thêm một cột vào bảng và trong bảng đã có ít nhất một bản ghi thì cột mới cần bổ sung phải cho phép chấp nhận giá trị NULL hoặc phải có giá trị mặc định
- Muốn xoá một cột đang được ràng buộc bởi một ràng buộc hoặc đang được tham chiếu bởi một khoá ngoài, ta phải xoá ràng buộc hoặc khoá ngoại trước sao cho trên cột không còn bất kỳ một ràng buộc và không còn được tham chiếu bởi bất kỳ khoá ngoại nào
- Nếu bổ sung thêm ràng buộc cho một bảng đã có dữ liệu và ràng buộc cần
bổ sung không được thoả mãn bởi các bản ghi đã có trong bảng thì câu lệnh
Trang 43Một số ví dụ:
- Bổ sung thêm thuộc tính Email vào bảng NHANVIEN:
ALTER TABLE NHANVIEN
ADD Email nvarchar (50) NULL
- Thay đổi kích thước thuộc tính Email:
ALTER TABLE NHANVIEN
ALTER COLUMN Email nvarchar (40) NULL
- Xóa thuộc tính Email trong bảng NHANVIEN:
ALTER TABLE NHANVIEN
DROP COLUMN Email
Trang 44Xóa bảng:
- Ta có thể xoá nó ra khỏi cơ sở dữ liệu bằng câu lệnh DROP TABLE Câu lệnh này cũng đồng thời xoá tất cả dữ liệu, ràng buộc, chỉ mục,… liên quan đến bảng
đó
- Câu lệnh có cú pháp như sau:
DROP TABLE <tên bảng>
- Câu lệnh DROP TABLE không thể thực hiện được nếu bảng cần xoá đang được tham chiếu bởi một ràng buộc FOREIGN KEY Trong trường hợp này, ràng
Trang 45(N‘QA01', N‘Quấn áo')
Hoặc:
INSERT INTO LOAISP VALUES ( N‘QA01' , N‘Quấn áo' )
Trang 46b Lệnh Update
- Ý nghĩa: Dùng để sửa đổi dữ liệu.
- Cú pháp:
UPDATE <Tên bảng>
SET <Tên_cột_1=Biểu_thức_1, Tên_cột_2=Biểu_thức_2,… > [ WHERE <điều kiện>]
• Ví dụ: Tìm mã loại SP là: QA01, thay đổi tên loại SP thành “Quần áo hàng chất lượng cao”
UPDATE LOAISP SET TenLoaiSP=N' Quần áo hàng chất lượng cao ' WHERE
MaLoaiSP=N'QA01'
Trang 47c Lệnh Delete
- Ý nghĩa: Xoá một số hàng trong bảng
- Cú pháp:
DELETE FROM <Tên bảng> WHERE <Điều kiện>
Ví dụ, Xoá hàng dữ liệu trong bảng LOAISP có mã loạiSP là ‘QA01’
DELETE LOAISP WHERE MaLoaiSP=N‘QA01'
Trang 48Truy vấn cơ bản:
SELECT [ALL | DISTINCT] [TOP <số lượng>] <Danh sách chọn> [INTO
<Tên bảng mới>]
FROM <Danh sách bảng/Khung_nhìn>
[WHERE <Điều kiện>]
[GROUP BY <Danh sách cột>
[HAVING <Điều kiện>]]
[ORDER BY <Cột sắp xếp>]
Trang 50- Lưu ý: Trong mệnh đề WHERE thường sử dụng:
• Các toán tử logic (AND, OR, NOT)
• Các toán tử so sánh (>, <, =,>=,<=,<>,!>,!<)
• Kiểm tra giới hạn của dữ liệu (BETWEEN, NOT BETWEEN)
Trang 51• Kiểm tra danh sách: (IN, NOT IN)
• Kiểm tra khuôn dạng dữ liệu: (LIKE)
• Chuỗi ký tự bất kỳ gồm 0 hoặc nhiều ký tự %
• Ký tự đơn bất kỳ _
• Ký tự đơn bất kỳ trong giới hạn [] ([a-f] hoặc [abcdef])
• Ký tự đơn bất kỳ không trong giới hạn [^] ([^a-f] hoặc [^abcdef])
• Kiểm tra giá trị NULL
Trang 52Một số ví dụ:
- SELECT * FROM NhaCungCap WHERE MaNhaCungCap=1
- SELECT * FROM NhaCungCap WHERE MaNhaCungCap>1 AND
MaNhaCungCap<5
- SELECT * FROM NhaCungCap WHERE MaNhaCungCap BETWEEN 1 AND 5
- SELECT * FROM NhaCungCap WHERE MaNhaCungCap IN (2, 3, 4)
- SELECT * FROM NhaCungCap WHERE TenNhaCungCap LIKE N‟LÊ%‟
- SELECT * FROM NhaCungCap WHERE Fax IS NULL
Trang 53c Mệnh đề ORDER BY
- Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục).
- Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY trong câu lệnh SELECT
• ASC: tăng dần
• DESC: giảm dần
Ví dụ:
Trang 54d Mệnh đề GROUP BY và HAVING
- Mệnh đề GROUP BY được sử dụng nhằm phân hoạch các dòng dữ liệu trong bảng thành các nhóm dữ liệu, và trên mỗi nhóm dữ liệu thực hiện tính toán các giá trị thống kê như tính tổng, tính giá trị trung bình,
- Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được sản sinh từ các hàm gộp tương tự như cách thức mệnh đề WHERE
- Mệnh đề HAVING thường không thực sự có nghĩa nếu như không sử dụng kết hợp với mệnh đề GROUP BY
- Một điểm khác biệt giữa HAVING và WHERE là trong điều kiện của