Kiến thức lập trình — August 3, 2016 at 4:15 am

Có nên dùng Foreign key (khóa ngoại) hay không?

by

Nhiều bạn mới làm quen với hệ quản trị cơ sở dữ liệu thường thắc mắc rằng có nên tạo Foreign key không? Để trả lời cho câu hỏi này, chúng tôi xin mời các bạn tham khảo bài viết của một giảng viên để biết được câu trả lời nhé

Một trong những đặc trưng của CSDL quan hệ (RDBMS ) đó là các ràng buộc trên quan hệ.

foreignkey

Điểm sơ về các loại ràng buộc này, thì có 4 kiểu chính

Ràng buộc miền giá trị: 

Đây là loại ràng buộc mà 1 tập hợp về kiểu dữ liệu và giá trị giới hạn mà thuộc tính nhận được

Ví dụ: field name: HoTen, type: nvarchar, size 50 có nghĩa là ở đây chúng ta có sự ràng buộc về miền giá trị như sau: tại feild HoTen chỉ nhận những thứ đưa vào là kiểu dữ liệu nvarchar và không vượt quá 50 ký tự

– Ràng buộc khóa:

+ Khóa chính (Primary Key):

Khóa chính là một (hoặc một tập) các thuộc tính (field )đóng vai trò là thứ để xác định các (field ) thuộc tính còn lại và nó là duy nhất

+ Khóa dự tuyển (Candidate Key):

Trong tập hợp các thuộc tính (field) của một bảng, có thể có nhiều thuộc tính có thể dùng được làm khóa chính. Hay nói cách khác, nếu trong bảng đó ta chọn 1 field làm khóa chính mà field đó không thể xác định 1 row đó là duy nhấtthì chúng ta cần thêm các thuộc tính (field) khác. Cái này một số người hay gọi là: tập khóa chính, nhóm khóa chính hay bộ khóa chính ….

Khóa ngoại (Foreign Key):
Trong nhiều trường hợp, khóa chính của một bảng được đưa sang làm thuộc tính bên bảng khác, thuộc tính đó gọi là khóa ngoại. Khóa ngoại đóng vai trò thể hiện liên kết giữa 2 bảng

Khóa phụ (Second Key): cái này tôi ít dùng

Đóng vai trò khi ta muốn sắp xếp lại dữ liệu trong bảng.

Ràng buộc thực thể

Ràng buộc toàn vẹn tham chiếu: hay còn gọi là ràng buộc khoá ngoại

Một bộ giá trị trong một quan hệ (Table) tham chiếu tới một bộ giá trị đã tồn tại trong một quan hệ (Table) khác.

Ràng buộc toàn vẹn tham chiếu phải xác định trên 2 quan hệ: quan hệ tham chiếu (referencing relation) và quan hệ được tham chiếu (referenced relation).

Đây là phần chính của noteHiện tại tôi đang dạy và hướng dẫn đồ án cho 1 số lớp tại trung tâm đào tạo lập trình viên quốc tế Softech – Aptech và gặp một số học viên có hỏi tôi như thế này

“Em có học môn CSDL ở trường (Đại học, cao đẳng xyz) thầy em có nói như thế này: trong thực tế thì không nên dùng khóa ngoại (Foreign Key). Theo thầy (tức là tôi, phi đẹp trai củ lại to) thì cái này có nên dùng hay không?”
Bản thân tôi chắc cũng chưa đủ trình độ và khả năng để trả lời 1 câu hỏi như thế này của học viên, nhưng cũng dùng hết những khả năng để phân tích và từ đó học viên tìm hiểu thêm. Vì đi làm vốn dĩ khác với đi học
* Tại sao sau hạn chế hoặc không nên dùng khóa ngoại: một trong những nguyên nhân đó là: khóa ngoại làm chậm tốc độ thực thi các câu lệnh insert, update, delete (Thông thường là thế, không tính 1 vài ngoại lệ)

Ví dụ như sau:

Tôi không tim hiểu sâu, nhưng nếu phân task thì có thể nó được thực hiện như sau: đầu tiên khi ta insert 1 row vào bảng, nó sẽ kiểu tra các ràng buộc như tôi đã trình bày ở trên và kiểm tra luôn khóa ngoại, xem cái khóa ngoại của mình đưa vào có tồn tại hay chính xác ở 1 bảng đâu đó chưa bla bla=> nó sẽ mất thêm thời gian để làm việc này :3. Thế thôi
Vì thế: Phải dùng cho hợp lý và nó là cách duy nhất để khai bao toàn vẹn tham chiếu

Nhưng mà không dùng nó thì có được không?

Được nhưng không dùng nó thì không có toàn vẹn tham chiếu, mà không có toàn vẹn tham chiếu thì không còn gọi là csdl quan hệ nữa rồi

Đến đây chắc các bạn đã biết được câu trả lời rồi chứ. Hy vọng đây sẽ là những kiến thức bổ ích dành cho các bạn yêu thích lập trình. Cảm ơn các bạn đã theo dõi!

Theo: p2share

Leave a Comment

Your email address will not be published. Required fields are marked *