Trang chủTác giảLiên hệ

Foreign Key

By Anonymous
Published in Database
September 06, 2022
5 min read

Foreign Key Là Gì?

Một foreign key là một hoặc nhiều cột trong một bảng csdl quan hệ mà cung cấp liên kết giữa dữ liệu trong 2 bảng. Nó đóng vai trò như một tham chiếu chéo giữa các bảng vì nó giới thiệu primary key của một bảng khác, qua đó thiết lập một liên kết giữa chúng. Phần lớn các bảng trong một hệ thống csdl quan hệ tuân thủ khái niệm foreign key. Trong csdl phức tạp và kho dữ liệu, dữ liệu trong một miền phải được thêm vào nhiều bảng, giúp duy trì mối quan hệ giữa chúng. Khái niệm về tính toàn vẹn tham chiếu bắt nguồn từ thuyết foreign key. Foreign key và việc triển khai chúng phức tạp hơn primary key.

Giải Thích Foreign Key

Khi một primary key có thể tồn tại độc lập, một foreign key phải luôn tham chiếu đến primary key ở đâu đó. Bảng gốc chứa primary key là bảng mẹ (còn gọi là bảng tham chiếu). Key này còn có thể được tham chiếu bởi nhiều foreign key từ các bảng khác, gọi là bảng “con”. Đối với bất kỳ cột nào đóng vai trò foreign key, một giá trị tương ứng phải tồn tại trong bảng liên kết. Cần đặc biệt cẩn trọng khi chèn và xoá dữ liệu từ cột foreign key, vì xoá hoặc chèn không cẩn thận có thể phá huỷ liên kết giữa hai bảng. Nếu tính toàn vẹn giữa hai csdl bị xâm phạm, lỗi có thể xảy ra. Ví dụ, nếu có hai bảng, khách hàng và đơn hàng, một liên kết có thể được tạo ra giữa chúng bằng cách đưa foreign key vào bảng đơn hàng tham chiếu CUSTOMER_ID trong bảng khách hàng. Cột CUSTOMER_ID tồn tại trong cả bảng khách hàng và đơn hàng. CUSTOMER_ID trong bảng đơn hàng trở thành foreign key, tham chiếu tới primary key trong bảng khách hàng. Để chèn một mục vào bảng đơn hàng, sự hạn chế của foreign key phải được đáp ứng. Giả sử khi nhập một CUSTOMER_ID không có trong bảng khách hàng thất bại, sẽ giữ tính toàn vẹn tham chiếu của bảng. Trong csdl thực tế, tính toàn vẹn giữa bảng foreign key và primary key có thể được đảm bảo bằng cách thực thi các ràng buộc tham chiếu mỗi khi các hàng trong bảng tham chiếu được cập nhật hoặc xoá. Vài trường hợp tham chiếu liệu quan đến foreign key bao gồm sau đây:

Cascade

Khi các hàng trong bảng mẹ bị xoá, cột foreign key tương ứng trong bảng con cũng sẽ bị xoá, tạo một chuỗi xoá (cascading delete).

Set Null

Khi một hàng tham chiếu trong bảng mẹ bị xoá hay được cập nhật, giá trị foreign key trong hàng tham chiếu được đặt là trống (set to null) để duy trì tính toàn vẹn tham chiếu.

Triggers

Các hoạt động tham chiếu thường được triển khai dưới dạng trình kích hoạt (trigger). Bằng nhiều cách các hành động của foreign key giống với trình kích hoạt do người dùng xác định (user-defined trigger).

Set Default

Hoạt động tham chiếu này giống với “set null”. Giá trị foreign key trong bảng con được đặt về giá trị cột mặc định (set to default) khi hàng tham chiếu trong bảng mẹ bị xoá hay được cập nhật.

Restrict

Đây là hoạt động tham chiếu bình thường liên quan với một foreign key. Một giá trị trong bảng mẹ khồn thể bị xoá hay được cập nhật miễn là nó được tham chiếu bởi một foreign key trong một bảng khác.

No Action

Hoạt động tham chiếu này giống với hoạt động “restrict” ngoại trừ việc kiểm tra không hành động (no-action check) chỉ được thực hiện sau khi đã cố thay đổi bảng. Primary Key (Khoá chính)

Primary Key Là Gì?

Một primary key là một cột đặc biệt trong bảng csdl quan hệ (hoặc kết hợp nhiều cột) được chỉ định để xác định đặc biệt mỗi bản ghi bảng. Một primary key được sử dụng như một định dạng đặc biệt để phân tích nhanh cú pháp dữ liệu trong bảng. Một bảng không thể có nhiều hơn một khoá chính. Tính năng của một primary key là: • Nó phải chưa một giá trị độc nhất cho dữ liệu mỗi hàng. • Nó không thể chứa giá trị trống. • Mỗi hàng phải có một giá trị primary key. Một primary key có thể sử dụng một hoặc nhiều trường đã có trong mô hình dữ liệu cơ bản, hoặc một trường bổ sung cụ thể có thể được tạo ra để làm primary key.

Giải Thích Primary Key

Khái niệm primary key rất quan trọng đối với một csdl quan hệ hiệu quả. Không có primary key và các khái niệm foreign key quan hệ gần, csdl quan hệ sẽ không hoạt động. Trên thực tế, vì một bảng có thể dễ dàng chứa hàng nghìn bản ghi (bao gồm bản sao), một primary key là cần thiết để đảm bảo rằng bản ghi bảng luôn có thể được xác định. Tất cả các key bắt nguồn từ các thuộc tính và vật thể quan sát trong thế giới thực được gọi là primary key, trái ngược với primary key thay thế, thay vào đó, được gán tuỳ ý cho mỗi bản ghi. Hầu như mọi cá nhân đều xử lý với các primary key thường xuyên nhưng vô thức hằng ngày. Ví dụ, học sinh thường được cấp số nhận dạng cá nhân (ID), và tất cả công dân Hoa Kỳ đều có số cmnd do chính phủ cấp. Địa chỉ đường hay bằng lái xe là những ví dụ về primary key được sử dụng để xác định (tương ứng) vị trí hoặc xe. Một ví dụ khác, một csdl phải chứa tất cả dữ liệu được lưu trữ bởi một ngân hàng thương mại. Hai trong số các bảng cơ sở dữ liệu bao gồm CUSTOMER_MASTER, lưu giữ liệu khách hàng cơ bản và tĩnh (tên, ngày sinh, địa chỉ, cmnd, vv…) và ACCOUNT_MASTER, lưu dữ liệu tài khoản ngân hàng khác nhau (ngày tạo tài khoản, loại tài khoản, hạn mức rút tiền hoặc thông tin tài khoản tương ứng, vv…). Để xác định khách hàng, một cột hay nhóm các cột được chọn để đảm bảo rằng hai khách hàng không bao giờ có cùng giá trị độc nhất. Do đó, một số cột nhất định sẽ bị loại bỏ ngay lập tức, vd: họ và ngày sinh. Một ứng cử viên tốt cho primary key là cột được thiết kế để chứa số cmnd. Tuy nhiên, vài chủ tài khoản có thể không có số cmnd, nên ứng cử viên cho cột này có thể bị loại. Lựa chọn hợp lý tiếp theo là sử dụng kết hợp các cột, như thêm họ vào ngày sinh vào địa chỉ email, dẫn tới một primary key dài và cồng kềnh. Lựa chọn tốt nhất là tạo một primary key riêng trong một cột mới có tên CUSTOMER_ID. Sau đó, csdl tự động tạo một số độc nhất mỗi lần một khách hàng được thêm vào, đảm bảo nhận dạng duy nhất. Khi key này được tạo ra, cột sẽ được chỉ định làm khoá chính trong tập lệnh SQL tạo bảng và tất cả các giá trị trống sẽ tự động bị từ chối. Số tài khoản liên kết với mỗi CUSTOMER_ID cho phép xử lý an toàn các truy vấn của khách hàng và thời gian tìm kiếm nhanh chóng (như với bất kỳ bảng nào được lập chỉ mục). Ví dụ, một khách hàng có thể được yêu cầu cung cấp họ của mình khi thực hiện truy vấn ngân hàng, Một truy vấn họ thông thường (như Smith) có khả năng đưa ra nhiều kết quả. Khi truy vấn dữ liệu, việc sử dụng tính độc nhất của primary key để đảm bảo một kết quả.


Anonymous

Anonymous

Related Posts

Database
Mô hình hoá dữ liệu là gì?
September 24, 2022
8 min
© 2022, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media