Sv(MASV,HOTEN,NU,NGAYSINH,MALOP,TINH,HOCBONG)
Tân từ: Mỗi sinh viên có mỗi MASV duy nhất. Mỗi MASV xác định tất cả các thuộc tính còn lại của sinh viên đó.
Lop(MALOP,TENLOP,SISO,MAKHOA)
Tân từ: Mỗi lớp có một mã lớp duy nhất, mỗi lớp chỉ thuộc về một khoa nào đó.
Kh(MAKHOA,TENKHOA,SOCBGD)
Tân từ: Mỗi khoa có mỗi MAKHOA duy nhất. Mỗi MAKHOA xác định tất cả các thuộc tính còn lại của khoa đó.
Mh(MAMH,TENMH,SOTIET)
Tân từ: Môi Môn học có một MAMH duy nhất. Mỗi MAMH xác định tất cả các thuộc tính còn lại của môn học đó.
Kq(MASV,MAMH,DIEMTHI)
Tân từ: Mỗi sinh viên cùng với một môn học xác dịnh duy nhất một điểm thi
YÊU CẦU:
-
Tìm khóa cho mỗi lược đồ quan hệ trên.
-
Hãy thực hiện các câu hỏi sau bằng ngôn ngữ đại số quan hệ
-
Lập danh sách sinh viên gồm MASV, HOTEN, HOCBONG
-
Lập danh sách sinh viên nữ khoa ‘CNTT’,danh sách cần MASV, HOTEN, HOCBONG
-
Lập bảng điểm cho tất cả sinh viên khoa ‘CNTT’, bảng điểm gồm các cột MASV, HOTEN, TENMH, DIEMTHI
-
Lập phiếu điểm cho sinh viên có MASV=”99001”
-
Lập danh sách sinh viên gồm MASV,HOTEN,TENLOP, TENKHOA
-
Lập bảng điểm môn học có mã môn học là CSDL cho tất cả sinh viên có mã lớp là “CĐTH2B”
-
Lập danh sách sinh viên của lớp có mã lớp là “CĐTH2B” và có điểm thi môn học lớn hơn hay bằng 8.
-
Mô hình thực thể kết hợp
Dựa vào các phân tích sơ bộ dưới đây, hãy lập mô hình thực thể kết hợp cho mỗi bài toán quản lý sau:
-
QUẢN LÝ LAO ĐỘNG
Để quản lý việc phân công các nhân viên tham gia vào xây dựng các công trình. Công ty xây dựng ABC tổ chức quản lý như sau:
Cùng lúc công ty có thể tham gia xây dựng nhiều công trình, mỗi công trình có một mã số công trình duy nhất (MACT), mỗi mã số công trình xác định các thông tin như: tên gọi công trình (TENCT), địa điểm(ĐIAĐIEM), ngày công trình được cấp giấy phép xây dựng (NGAYCAPGP), ngày khởi công (NGAYKC), ngày hoàn thành (NGAYHT).
Mỗi nhân viên của công ty ABC có một mã số nhân viên(MANV) duy nhất, một mã số nhân viên xác định các thông tin như: Họ tên (HOTEN), ngày sinh (NGAYSINH), phái (PHAI), địa chỉ (ĐIACHI). Mỗi nhân viên phải chịu sự quản lý hành chánh bởi một phòng ban. Tất nhiên một phòng ban quản lý hành chánh nhiều nhân viên. Công ty có nhiều phòng ban (Phòng kế toán, phòng kinh doanh, phòng kỹ thuật, phòng tổ chức, phòng chuyên môn, Phòng phục vụ,…). Mỗi phòng ban có một mã số phòng ban(MAPB) duy nhất, mã phòng ban xác định tên phòng ban (TENPB).
Công ty phân công các nhân viên tham gia vào các công trình, mỗi công trình có thể được phân cho nhiều nhân viên và mỗi nhân viên cùng lúc cũng có thể tham gia vào nhiều công trình. Với mỗi công trình một nhân viên có một số lượng ngày công (SLNGAYCONG) đã tham gia vào công trình đó.
-
QUẢN LÝ THƯ VIỆN
Một thư viện tổ chức việc cho mượn sách như sau:
Mỗi quyển sách được đánh một mã sách (MASH) dùng để phân biệt với các quyển sách khác (giả sử nếu một tác phẩm có nhiều bản giống nhau hoặc có nhiều tập thì cũng xem là có mã sách khác nhau), mỗi mã sách xác định các thông tin khác như : tên sách (TENSACH), tên tác giả (TACGIA), nhà xuất bản (NHAXB), năm xuất bản (NAMXB).
Mỗi đọc giả được thư viên cấp cho một thẻ thư viện, trong đó có ghi rõ mã đọc giả (MAĐG), cùng với các thông tin khác như : họ tên (HOTEN), ngày sinh (NGAYSINH), địa chỉ (ĐIACHI), nghề nghiệp(NGHENGHIEP).
Cứ mỗi lượt mượn sách, đọc giả phải ghi các quyển sách cần mượn vào một phiếu mượn, mỗi phiếu mượn có một số phiếu mượn (SOPM) duy nhất, mỗi phiếu mượn xác định các thông tin như: ngày mượn (NGAYMUON), đọc giả mượn, các quyển sách mượn và ngày trả (NGAYTRA). Các các quyển sách trong cùng một phiếu mượn không nhất thiết phải trả trong trong cùng một ngày.
-
QUẢN LÝ BÁN HÀNG
Mỗi khách hàng có một mã khách hàng (MAKH) duy nhất, mỗi MAKH xác định được các thông tin về khách hàng như : họ tên khách hàng (HOTEN), địa chỉ (ĐIACHI), số điện thoại (ĐIENTHOAI). Các mặt hàng được phân loại theo từng nhóm hàng, mỗi nhóm hàng có một mã nhóm (MANHOM) duy nhất, mỗi mã nhóm hàng xác định tên nhóm hàng (TENNHOM), tất nhiên một nhóm hàng có thể có nhiều mặt hàng. Mỗi mặt hàng được đánh một mã số (MAHANG) duy nhất, mỗi mã số này xác định các thông tin về mặt hàng đó như : tên hàng (TENHANG), đơn giá bán (ĐONGIA), đơn vị tính (ĐVT). Mỗi hóa đơn bán hàng có một số hóa đơn (SOHĐ) duy nhất, mỗi hóa đơn xác định được khách hàng và ngày lập hóa đơn (NGAYLAPHĐ), ngày bán hàng (NGAYBAN). Với mỗi mặt hàng trong một hóa đơn cho biết số lượng bán (SLBAN) của mặt hàng đó.
-
QUẢN LÝ LỊCH DẠY - HỌC
Để quản lý lịch dạy của các giáo viên và lịch học của các lớp, một trường tổ chức như sau:
Mỗi giáo viên có một mã số giáo viên (MAGV) duy nhất, mỗi MAGV xác định các thông tin như: họ và tên giáo viên (HOTEN), số điện thoại (DTGV). Mỗi giáo viên có thể dạy nhiều môn cho nhiều khoa nhưng chỉ thuộc sự quản lý hành chánh của một khoa nào đó.
Mỗi môn học có một mã số môn học (MAMH) duy nhất, mỗi môn học xác định tên môn học (TENMH). Ưng với mỗi lớp thì mỗi môn học chỉ được phân cho một giáo viên.
Mỗi phòng học có một số phòng học (SOPHONG) duy nhất, mỗi phòng có một chức năng (CHUCNANG); chẳng hạn như phòng lý thuyết, phòng thực hành máy tính, phòng nghe nhìn, xưởng thực tập cơ khí,…
Mỗi khoa có một mã khoa (MAKHOA) duy nhất, mỗi khoa xác định các thông tin như: tên khoa (TENKHOA), điện thoại khoa(DTKHOA).
Mỗi lớp có một mã lớp (MALOP) duy nhất, mỗi lớp có một tên lớp (TENLOP), sĩ số lớp (SISO). Mỗi lớp có thể học nhiều môn của nhiều khoa nhưng chỉ thuộc sự quản lý hành chính của một khoa nào đó.
Hàng tuần, mỗi giáo viên phải lập lịch báo giảng cho biết giáo viên đó sẽ dạy những lớp nào, ngày nào (NGAYDAY), môn gì?, tại phòng nào, từ tiết nào (TUTIET) đến tiết nào (DENTIET),tựa đề bài dạy (BAIDAY), ghi chú (GHICHU) về các tiết dạy này, đây là giờ dạy lý thuyết (LYTHUYET) hay thực hành - giả sử nếu LYTHUYET=1 thì đó là giờ dạy thực hành và nếu LYTHUYET=2 thì đó là giờ lý thuyết, một ngày có 16 tiết, sáng từ tiết 1 đến tiết 6, chiều từ tiết 7 đến tiết 12, tối từ tiết 13 đến 16.
----oOo----
-
.
NGÔN NGỮ TRUY VẤN SQL
-
CÁCH TẠO QUAN HỆ BẰNG ACCESS
Microsoft Access là một hệ quản trị cơ sở dữ liệu quan hệ. Ta có thể dùng HQTCSDL Access hay gọi tắt là Access để thực hành mô hình quan hệ.
Sau đây ta sẽ tạo lược đồ csdl quản lý sinh viên như ở trang 6 của tài liệu.
-
Khởi động Access: Start-> Programs-> Microsoft Access.
-
Tạo lược đồ csdl rỗng có tên là qLSV: Blank Database->OK->qLSV->Create
-
Tạo quan hệ bằng cách:Tables->New->Design View->OK
-
Data type là Text (kiểu chuỗi), Yes/No (Kiểu luận lý), Date/Time (kiểu ngày tháng), Currency (kiểu số)
-
Field size là kích thước kiểu dữ liệu
-
Khi tạo xong các thuộc tính và khóa chính ta lưu lại và đặt tên cho quan hệ Sv bằng cách : File->Close->Yes->Sv->OK.
-
Tạo các quan hệ còn lại theo bước 3 và 4
-
Nhập dữ liệu cho quan hệ Sv bằng cách: Tables->Sv->Open
-
CÂU LỆNH TRUY VẤN
-
BIỂU THỨC (EXPRESSION)
Các thành phần tạo nên biểu thức bao gồm:
Literal value
Là các dữ liệu có giá trị đúng như văn bản thể hiện.
Dữ liệu chuỗi có dạng: “New York”
Dữ liệu số có dạng: 1056; 1056.25
Dữ liệu ngày có dạng: #1-Jan-94#; #12/2/2001#
Constant
Là một tên đại diện cho một giá trị không thay đổi như :
Const
|
Giá trị đại diện
|
True
|
-1
|
False
|
0
|
Null
|
0
|
Toán tử số học:
Toán tử
|
Ý nghĩa
|
Ví dụ
|
Kết quả
|
+
|
Cộng số học
Cộng ngày
|
5+2
#28/08/01# + 4
|
7
#01/09/01#
|
-
|
Trừ số học
Ngày trừ số
Ngày trừ ngày
|
5-2
#02/09/01# - 3
#29/9/01#-#24/3/84#
|
3
#30/08/01#
16.597
|
*
|
Phép nhân
|
5*2
|
10
|
/
|
Phép chia
|
5/2
|
2.5
|
\
|
Chia nguyên
|
5\2
|
2
|
^
|
Luỹ thừa
|
5^2
|
25
|
Mod
|
Lấy số dư của phép chia
|
5 Mod 2
|
1
|
Toán tử luận lý
Toán tử
|
Ý nghĩa
|
Ví dụ
|
Kết Quả
|
Not
|
Luật phủ định
|
Not True
Not False
|
False
True
|
And
|
Luật và
|
True And True
True And False
False And True
False And False
|
True
False
False
False
|
Or
|
Luật hay
|
True Or True
True Or False
False Or True
False Or False
|
True
True
True
False
|
Toán tử so sánh
Toán tử
|
Ý nghĩa
|
Ví dụ
|
Kết quả
|
<
|
Nhỏ hơn
|
2 < 5
|
True
|
<=
|
Nhỏ hơn hay bằng
|
2 <= 5
|
True
|
>
|
Lớn hơn
|
2 > 5
|
False
|
>=
|
Lớn hơn hay bằng
|
2 >= 5
|
False
|
=
|
Bằng nhau
|
2 = 5
|
False
|
<>
|
Khác nhau
|
2 <> 5
|
True
|
Các toán tử khác
Toán tử
|
Ý nghĩa
|
Ví dụ
|
Kết quả
|
Between ... And ...
|
Giữa hai giá trị. Dùng trong query
|
2 Between 1 And 5
|
True
|
Like
|
Giống như
|
“Hung” Like “Hu*”
|
True
|
&
|
Nối chuỗi
|
“Nguyễn Văn” & “Hùng”
|
“Nguyễn Văn Hùng”
|
Với toán tử like ta có thể dùng các ký tự đại diện sau:
Wildcard characters
|
Ký tự
|
Ý nghĩa
|
Ví dụ
|
?
|
Đại diện cho một ký tự bất kỳ
|
A? -> AN, AM, AC
|
*
|
Đại diện cho một chuỗi ký tự bất kỳ.
|
A* -> AI, ANH,
|
#
|
Đại diện cho một ký số
|
A## ->A13, A24, A35
|
[]
|
Đại diện cho các ký tự nằm trong
|
A[IN] -> AI, AN
|
-
|
Đại diện cho các ký tự nằm trong khoảng
|
A[M-O] -> AM, AN, AO
|
!
|
Đại diện cho ký tự không phải ký tự nằm sau !
|
A[!C] -> AA, AB, AD, AE, ...
|
Hàm:
Hàm có dạng tenHam(danhSachDoiSo). Hàm luôn luôn đại diện cho một trị gọi là trị trả về.
IIf(điều kiện, trị 1, trị 2)
Kiểm tra điều kiện, nếu điều kiện đúng trả trị 1 ngược lại trả trị 2
Ví dụ: IIf(namNu = 1, “Nam”,”Nu”)
Date()
Trả về ngày tháng năm của hệ thống.
Now(biểu thức ngày)
Trả về giờ, phút, giây, ngày tháng năm của hệ thống.
Time(biểu thức ngày)
Trả về giờ phút giây của hệ thống.
Day(biểu thức ngày)
Trả về một số từ 1 đến 31 là ngày của Date.
Month(biểu thức ngày)
Trả về một số từ 1 đến 12 là tháng của Date
Year(biểu thức ngày)
Trả về năm của ngày
Len( biểu thức chuỗi)
Trả về chiều dài của chuỗi.
Chr(mã Ascii)
Trả về ký tự có mã ASCII tương ứng.
InStr(Start, s1, s2)
Trả về vị trí chuỗi s2 nằm trong s1
LCase(s), UCase(s)
Đổi chuỗi s thành chuỗi gồm các ký tự thường (hoa)
Left(s, n), Right(s, n)
Trả về chuỗi gồm n ký tự bên trái (phải) của chuỗi s
Mid(s, i, n)
Trả về chuỗi con của chuỗi s, gồm n ký tự kể từ ký tự thứ i
Nz(v1, v2)
Nếu v1 = Null thì Trả về v2, ngược lại trả về v1
Các hàm tính toán trên nhóm:
SUM (thuộc tính )
Tính tổng giá trị của thuộc tính của các bộ trong bảng
MAX( thuộc tính)
tính giá trị lớn nhất của thuộc tính của các bộ trong bảng
MIN(thuộc tính)
tính giá trị nhỏ nhất của thuộc tính của các bộ trong bảng
AVG(thuộc tính>)
tính giá trị trung bình của thuộc tính của các bộ trong bảng
COUNT(thuộc tính)
chỉ đếm những bộ mà giá trị của thuộc tính là khác NULL
Biểu thức
Biểu thức là tổ hợp các toán tử, literal value, hằng, tên hàm, tên thuộc tính.
Biểu thức được lượng gía thành một gía trị.
-
CÂU LỆNH SQL
SQL là ngôn ngữ truy vấn dựa trên đại số quan hệ. Câu lệnh của SQL dùng để rút trích dữ liệu của một một hay nhiều quan hệ. Kết quả của một câu lệnh SQL (truy vấn) là một quan hệ. Để đơn giản trong cách trình bày, ta xem quan hệ mà câu truy vấn sử dụng để tạo ra quan hệ khác gọi là quan hệ nguồn, quan hệ kết quả của truy vấn là quan hệ đích.
-
Truy vấn định nghĩa dữ liệu (data definition query)
Tạo lược đồ quan hệ rSV:
Tạo lược đồ quan hệ rKQ:
-
Create Table rKQ (MASV text (10),MAMH Text (10), DIEMTHI Double,CONSTRAINT khoaChinh PRIMARY KEY (MASV,MAMH) )
Chú ý: Hai cách tạo trên cho ta thấy hai cách tạo khóa: khóa chỉ gồm một thuộc tính và khóa có nhiều thuộc tính
Thêm cột DTHOAI có kiểu dữ liệu text 20 ký tự vào lược đồ quan hệ rSV:
-
Alter Table rSV Add Column DTHOAI Text (20)
Sửa kiểu kiểu dữ liệu của một cột:
Xóa cột của một lược đồ đã có:
-
Alter Table rSv Drop Column DTHOAI
Xóa ràng buộc khóa chính:
Thêm ràng buộc khóa chính:
-
Alter Table rSv Add Constraint khoaChinh Primary Key (MASV)
Thêm ràng buộc miền giá trị:
-
ALTER TABLE doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1)
-
Truy vấn chọn (select query)
Khi có nhu cầu thể hiện các dòng dữ liệu của một quan hệ hay của nhiều quan hệ dưới dạng một quan hệ có số cột và số dòng theo ý muốn như bảng điểm của sinh viên, danh sách sinh viên thì ta sử dụng truy vấn chọn.
Để truy vấn chọn ta sử dụng câu lệnh SQL sau:
Select [Distinct|Top n[%]] field1 [As alias1][,field2 [As alias2][,...]]
From table1 [Inner Join table2 On table1.field1 table2.field2] ...
[Where dieuKien]
[Order By field1[Asc|Desc][,field2[Asc|Desc]][,...]]];
|
Distinct: loại bỏ các bộ trùng trong quan hệ đích
Top n[%]: Chọn n hay n% mẫu tin đầu tiên.
table: Tên table hay query chứa dữ liệu.
field: Tên field hay một biểu thức.
Alias: Trường hợp field là một biểu thức thì là một tên mới của biểu thức.
Inner Join: mỗi mẫu tin của table1 nối với bất kỳ mẫu tin nào của table2 có dữ liệu của field1 thỏa mãn điều kiện so sánh với dữ liệu của field2 tạo thành mẫu tin của query.
điều kiện: Biểu thức mà dữ liệu mẫu tin phải thỏa mãn
Chú ý:
Khi nêu rõ thuộc tính đó thuộc về quan hệ nào ta viết theo cú pháp tênQuanHệ.tênThuộcTính.
Ví dụ: Lập danh sách sinh viên gồm MASV,HOTEN,HOCBONG
SELECT MASV,HOTEN,HOCBONG
FROM Sv;
Ví dụ: Lập danh sách sinh viên nữ , có học bổng thuộc có mã lớp là “CĐTH2B”.
SELECT MASV,HOTEN,HOCBONG
FROM Sv
WHERE NU And MALOP='CĐTH2B' And HOCBONG>0;
Ví dụ: Lập danh sách sinh viên gồm MASV,HOTEN,HOCBONG trong đó học bổng được sắp giảm dần
SELECT MASV,HOTEN,HOCBONGFROM SvORDER BY HOCBONG DESC;
Ví du : Lập danh sách sinh viên gồm MASV,HOTEN,TENLOP
SELECT MASV,HOTEN,TENLOP
FROM Sv Inner Join Lop On Sv.MALOP=Kh.LOP;
Ví dụ: Lập danh sách sinh viên có MASV,HOTEN,NU,NGAYSINH,DIEMTHI với điểm thi môn ‘CSDL’ >= 8
SELECT Kq.MASV,HOTEN,NU,NGAYSINH,DIEMTHI
FROM Kq Inner Sv On Kq.MASV = Sv.MaSV
WHERE MAMH='CSDL' AND DIEMTHI>=8;
Ví dụ: Lập danh sách sinh viên có ho là “NGUYEN”
SELECT *FROM Sv
WHERE HOTEN Like “NGUYEN*”;
-
Truy vấn nhóm dữ liệu (Select query có group by)
Khi có nhu cầu chia các bộ theo từng nhóm rồi tính toán trên từng nhóm này như tính điểm trung bình của tất cả các môn học của từng sinh viên, hay là cần tính số lượng sinh viên của mỗi lớp , hay là cần biết tổng số môn mà một sinh viên đã đăng ký học thì ta sử dụng truy vấn theo nhóm.
Để truy vấn cộng nhóm ta sử dụng câu lệnh SQL sau:
Chia sẻ với bạn bè của bạn: |