Khái niệm về quan hệ (liên hệ - relationship) trong Access
Nhằm đảm bảo CSDL không phát sinh ra những dữ liệu rác, những dữ liệu trùng lặp (tính toàn vẹn dữ liệu), thì Database thường tạo ra nhiều bảng dữ liệu - chia thông tin ra nhiều bảng - mỗi bảng này hướng quản lý một loại thông tin nào đó. Sau đó những bảng này kết hợp lại với nhau để có thông tin đầy đủ về đối tượng nào đó. Để làm điều này, bạn sẽ thiết lập những trường dữ liệu chung của các bảng từ đó hình thành mối liên hệ giữa các bảng. Phần này tìm hiểu về các mỗi liên hệ (relationship) giữa các bảng và cách sử dụng chúng trong CSDL
Khi tạo được mối liên hệ giữa các bảng thì bạn có thể tạo ra các truy vấn, các biểu mẫu và báo cáo hiện thị thông tin các nhiều bảng một lúc.
File CSDL ví dụ: Download
Các kiểu liên hệ giữa các bảng Access
Quan hệ một nhiều 1 - n
1 - nhiều
- một dòng (record) của bảng một
liên kết với nhiều dòng của bảng nhiều
. Nói ngược lại thì
nhiều dòng của bảng nhiều
liên kết với một dòng ở bảng một
Ví dụ bảng DanhMuc
, mỗi dòng là một danh mục sản phẩm
(đồ nội thất, đồ điện tử ...) liên kết với nhiều
dòng (nhiều sản phẩm) ở bảng Sanpham
Quan hệ 1 - n
được hình thành bằng cách tạo liên
hệ giữa khóa chính (Primary key) và khóa ngoại (Foreign key)
Quan hệ nhiều - nhiều n - n
Hãy xem quan hệ giữa hai bảng Sanpham
và bảng DonHang
. Một sản phẩm có thể nằm trong nhiều
đơn hàng, ngược lại một đơn hàng có thể có nhiều sản phẩm.
Từ đó hai bảng này hình thành mối quan hệ nhiều nhiều.
Mối liên hệ này được hình thành qua hai khóa ngoại của
DonHangChiTiet
là có DonHangID
và SanphamID
Quan hệ n - n
được hình thành do mỗi quan hệ
giữa hai khóa ngoại (Foreign key)
Một loại sản phẩm có nhiều đơn hàng
Một đơn hàng có nhiều sản phẩm
Quan hệ một - một 1 - 1
1 - 1
là 1 dòng (record) của bảng này
liên kết với 1 dòng (record) duy nhất của bảng khác.
Hãy xem mối quan hệ giữa bảng Sanpham
và bảng
HuongDan
. Mỗi sản phẩm (record) có thể có một hướng dẫn
sử dụng sản phẩm đó.
Quan hệ 1 - 1
hình thành do mối liên hệ giữa hai
khóa chính của hai bảng
Tạo ra các liên hệ trong Access
Khi tạo mối quan hệ, trước tiên hãy đóng các bảng nếu nó đang mở. Từ menu Ribbon, chọn mục Database Tools, tiếp theo chọn Relationships để mở cửa sổ soạn thảo các liên hệ:
Nếu là lần đầu vào thiết lập quan hệ, nó xuất hiện hộp thoại Show Table, tại đây chọn các bảng rồi bấm vào Add để đưa chúng vào cửa sổ soạn thảo liện hệ.
Bất cứ lúc nào đều có thể bật lại cửa sổ này bằng
cách bấm phải chuột chọn Show Table
Các bảng xuất hiện, hãy kéo - thả để sắp xếp sao cho dễ quan sát trong cửa sổ. Cố gắng sắp xếp theo mối quan hệ bảng cha / bảng con theo vị trí trái / phải. Ví dụ, như hình dưới:
Để bắt đầu tạo ra mối liên hệ, ví dụ tạo liên hệ bảng DanhMuc
(bảng trái) và bảng Sanpham
(bảng phải),
bấm vào tên khóa chính của DanhMuc
(DanhMucID), kéo thả vào tên khóa ngoại DanhMucID
của bảng Sanpham
, lập tức
xuất hiện hộp thoại Edit Relationships (soạn
thảo liên hệ). Xem lại các thông tin như bảng trái, bảng phải, các
khóa liên hệ chính xác chưa rồi bấm vào Create
để tạo mối liên hệ.
Trong bảng này cũng lưu ý các tùy chọn:
- Enforce Reference Integrity: Đảm bảo tính toàn vẹn dữ liệu. Trường trong bảng trái bắt buộc phải có thì bảng phải có. Ví dụ nếu một sản phẩm có DanhMucID là 10, thì trong bảng DanhMuc phải có record với DanhMucID là 10.
- Cascade Update Related Fields: khi bảng trái (cha) thay đổi giá trị khóa chính - bảng phải cập nhật theo.
- Cascade Delete Related Records - record bảng trái bị xóa, các record bảng phải có liên hệ bị xóa theo
Nếu muốn mở lại cửa sổ Edit Relationships nháy đúp chuột vào đừng biểu diễn liên kết. Hoặc nhấn phải chuột vào đường biểu diễn liên kết rồi chọn Edit Relationships
Nếu muốn xóa một liên hệ, nhấn phải chuột vào liên hệ, rồi chọn Delete
Kiểu kết nối
Trong liên hệ giữa hai bảng, có ba kiểu khớp nối dữ liệu. Để điều chỉnh nó vào cửa sổ Edit Relationships bấm vào Join Type. Tại đây có thể chọn một trong ba kiểu
-
Only include rows where the joined field from both tables are equal
Đây gọi là liên kết nội, mặc định và phổ biến. Kết quả truy vấn theo liên hệ trả về dữ liệu mà trường liên kết tồn tại trong cả hai bảng.
Ví dụ, Query lấy
Sanpham
vàHuongDan
: thì là liên kết nội, nên chỉ những sản phẩm nào cốHuongDan
mới được trả về từ truy vấn -
Include all records from “bảng bên trái” and only those records from “bảng bên phải” where the joined fields are equal
Toàn bộ bảng trái, kể cả trường liên kết ở bảng phải không có
-
Include all records from “bảng bên phải” and only those records from “bảng bên trái” where the joined fields are equal
Toàn bộ bảng phải, kể cả bảng trái không có