Chương 3
1
Nhận biết được các đối tượng trong 1
CSDL của SQL Server.
Chọn kiểu dữ liệu SQL Server thích
hợp cho yêu cầu lưu trữ dữ liệu, và tạo
kiểu dữ liệu theo nhu cầu người dùng
Tạo và quản lý các bảng CSDL.
Tạo và quản lý các ràng buộc
(constraint)
2
Table
Data type
Default
Rule
Constraint
Index
View
Stored procedure
User-defined function
Trigger
3
4
5
Mở Folder chưa đối
tương cần xem
binary[(n)]
varbinary[(n)]
bit
decimal[(p[,s])]
real
float[(n)]
bigint
int
smallint
tinyint
numeric [(p[,s])]
money
smallmoney
char[(n)]
6
nchar[(n)]
varchar[(n)]
nvarchar[(n)]
datetime
smalldatetime
cursor
table
sysname
timestamp
uniqueidentifier
image
text
ntext
sql_variant
Giá trị NULL dùng để chỉ các giá trị chưa biết, không
thể dùng được, hay sẽ được bổ sung sau. Nó khác với
giá trị rỗng (empty) hay zero. Hai giá trị null không
được xem là bằng nhau. Khi so sánh hai giá trị null,
hay 1 giá trị null với 1 giá trị khác thì kết quả trả về sẽ
là unknown.
Ví dụ: số phone của khách hàng hiện tại chưa có,
nhưng có thể sẽ được bổ sung này. Số phone sẽ có giá
trị là null.
Để kiểm tra giá trị null trong lệnh truy vấn, phải dùng
toán tử IS NULL hay IS NOT NULL trong mệnh đề
WHERE.
Mặc định các cột hay kiểu dữ liệu của người dùng
thường không có gía trị NULL.
7
Tạo kiểu dữ liệu người dùng là để bảo đảm tính
thống nhất của dữ liệu (data consistency) khi mà
nhiều bảng phải lưu trữ cùng 1 loại dữ liệu trong
1 cột
Kiểu dữ liệu của người dùng được tạo dựa vào
các kiểu dữ liệu hệ thống.
Chỉ có tác dụng trong CSDL mà nó được tạo ra
ngoại trừ trường hợp nó được tạo ra trong CSDL
hệ thống model.
8
Dùng lệnh để tạo:
sp_addtype type_name, system_data_type
[,'NULL'|'NOT NULL']
Ví dụ:
sp_addtype stateab,‘char(2)’,’NOT NULL’
Dùng lệnh để xoá:
sp_droptype type_name
9
continued
10
Dùng Enterprise Manager để tạo
Nhấp phải tại folder
User Defined Data Type,
chọn lệnh
New User Defined Data Type
Bảng là một đối tượng của CSDL được dùng
để lưu trữ dữ liệu.
Dữ liệu trong bảng được tổ chức thành các hàng
(rows) và cột (columns).
Mỗi hàng trong bảng biểu diễn một bản ghi (record) duy
nhất. Mỗi cột biểu diễn một thuộc tính (attribute).
Tên cột trong 1 bảng không được trùng nhau nhưng cho
phép tên cột có thể trùng nhau trong những bảng khác
nhau của cùng 1 CSDL.
SQL Server cho phép:
Tối đa 2 triệu bảng trong 1 CSDL.
Tối đa 1024 cột trong 1 bảng
Tối đa 8060 bytes trong 1 hàng
11
Phải có quyền tạo và thay đổi cấu trúc
bảng, nếu không sẽ sinh ra lỗi.
Tên bảng phải là từ định danh hợp lệ.
Với phiên bản SQL Server 6.5 hoặc các
phiên bản trước nữa thì sẽ không thay đổi
được kiểu dữ liệu cột hoặc thêm cột cho
một bảng dữ liệu.
12
continued
Không thể thay đổi dữ liệu cột hoặc huỷ
cột mà có tham chiếu chỉ mục.
Không thể xóa 1 bảng nếu có bất kỳ phụ
thuộc giữa bảng đó với các đối tượng khác
của SQL Server.
13
continued
CREATE TABLE
[ database_name.[ owner ] .|owner.] table_name
({ < column_definition >
|column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT
constraint_name ] }
[ , n ]
)
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
14
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) ] ]
]
[ < column_constraint > ] [ n ]
15
Cú pháp:
column_name AS computed_column_expression
Là một cột ảo không được lưu trữ vật lý trong bảng.
Nó được tính toán dựa vào các cột khác trong cùng
bảng thông qua 1 biểu thức.
Ví dụ : cost AS price * qty.
Có thể được dùng trong mệnh đề SELECT, WHERE,
hay ORDER BY
Không thể dùng trong lệnh INSERT hay UPDATE
Có thể được dùng như giá trị khóa trong chỉ mục hay
1 phần của các ràng buộc PRIMARY KEY hay UNIQUE
nếu gía trị của nó được định nghĩa bởi 1 biêu thức
xác định và kiểu dữ liệu của giá trị trả về hợp lệ.
Ví dụ: Cột tính toán a+b có thể được dùng làm chỉ mục nhưng
a+DATEPART(dd, GETDATE()) không thể dùng làm chỉ mục
16
CREATE TABLE cthoadon
( sohd int NOT NULL,
MaHang char(4) NOT NULL,
SoLuong int NOT NULL,
DonGia money,
ThanhTien AS SoLuong*DonGia
)
17
Tạo giá trị gia tăng duy nhất cho 1 cột, và cột
này thường được dùng khoá chính cho
bảng. Giá trị được gán thường là các kiểu dữ
liệu sau: tinyint, smallint, int, bigint,
decimal(p,0), hay numeric(p,0).
Trong mỗi bảng chỉ cho phép 1 cột là identity
mà thôi.
Seed: là giá trị đầu tiên được tạo.
Increment:là bước tăng để tạo ra giá trị kế tiếp.
Giá trị mặc định thường là (1,1).
18
CREATE TABLE jobs
(
job_id smallint IDENTITY(1,1) ,
job_desc varchar(50) NOT NULL
)
19
Để bảo đảm chất lượng (quality) của dữ
liệu trong 1 CSDL.
Có 4 loại:
Domain integrity (bảo toàn miền)
Entity integrity (bảo toàn thực thể)
Referential integrity (bảo toàn tham chiếu)
User-defined integrity (bảo toàn do người
dùng quy định)
20
Domain integrity — xét tính hợp lệ (validity)
của dữ liệu khi nhập vào 1 cột của bảng
Có thể được thực hiện bằng cách:
Kiểu dữ liệu
Ví dụ: trường Ho_Ten phải là kiểu dữ liệu char
Định dạng cột
Ví dụ: trường phone phải có dạng ‘0914-071569’
Dãy giá trị cho phép :
Ví dụ: trường tuổi chỉ trong khoảng 1-100, trường
lương trong khoảng từ 0-10.000.000
21
Entity integrity — xác định mỗi hàng như 1 thực thể duy
nhất trong bảng
Referential integrity — bảo toàn mối quan hệ giữa hai
bảng, bảo đảm các giá trị khoá được thống nhất giữa các
bảng có quan hệ nhau. Không có tham chiếu khi không tồn
tại giá trị khoá trong bảng chính, và nếu giá trị khoá thay đổi
thì tất cả các tham chiếu đến nó cũng thay đổi thống nhất
theo. Khi áp dụng quy luật bảo toàn tham chiếu, người
dùng không thể:
Thêm các bản ghi vào bảng được quan hệ (related table) nếu không
có bản ghi tương ứng trong bảng chính (primary table).
Thay đổi giá trị trong bảng chính làm cho các bản ghi trong bảng
được quan hệ bị mất mối liên kết ( orphaned record)
Xoá các bản ghi trong bảng chính nếu tồn tại 1 số bản ghi trong
bảng được quan hệ.
22
SQL server 2000 hỗ trợ các loại constraint sau :
Default
Check
Unique
Primary key
Foreign key
Các ràng buộc dùng để bảo đảm các giá trị của
dữ liệu không vi phạm quy luật bảo toàn dữ liệu
23
Domain integrity
Entity integrity
Referential integrity
Cú pháp: DEFAULT constant_expression
Default dùng để xác định giá trị “sẵn trước” được
gán cho 1 cột khi thêm 1 bản ghi mới vào bảng.
DEFAULT có thể áp dụng cho bất kỳ cột nào trong
bảng ngoại trừ cột có kiểu timestamp hay có thuộc
tính IDENTITY.
constant_expression: chỉ có giá trị hằng như chuỗi
ký tự, hàm hệ thống, hay giá trị NULL.
24
CREATE TABLE jobs
(
job_id smallint IDENTITY(1,1) ,
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not formalized
yet'
)
25