Chọn cột nào làm khoá ngoại

Câu hỏi thứ 2 trong ngày.Trước h vẫn lấy primaryKey của bảng khác làm khoá ngoại. Vậy: có thể lấy một cột không phải primaryKey làm khoá ngoại được không.
Ví dụ bảng


Mình lấy customerName làm khoá ngoại cho bảng order được không nhỉ

Em có học môn database chưa, sao lại hỏi câu này -.-
Người ta cần khóa ngoại để làm gì? có cần khóa ngoại không -.-

3 Likes

Em tự học trên mạng thôi anh ạ.không được học quy củ theo chương trình đại học.

A FOREIGN KEY is a field (or collection of fields) in one table that refers to the PRIMARY KEY in another table.
Nguồn: w3schools :smile:

1 Like

ok vậy giải thích cho em một chút:
Trường hợp nếu dùng customerName, thì tên có thể bị trùng, như vậy không thể xác định cái order đó của ai cả.

table customer
id1 customer a
id2 customer a

table orders
customer a

Bản chất của primary key là xác định được 1 dòng duy nhất, phân biệt với các dòng còn lại.
Vậy trong trường hợp e xác định được customerName trong hệ thống của em là duy nhất thì có sử dùng làm foreign key được không ?

3 Likes

Thanks anh.vậy em chuyển customerName thành khoá chính là ổn a nhỉ

Cái này phụ thuộc bussiness của em khi thiết kế db, tại sao 2 customer name không thể trùng nhau? -.-

2 Likes

Thực ra đây là ảnh em lấy làm ví dụ thôi.em đang làm cái tìm kiếm qua tên, ko dùng like.em dùng fulltext search nhưng khi join từ bảng khác vào xong search thì dính quả using filesort,using temporary.thế nên em định kéo thằng name sang bảng chính luôn,đỡ phải join bảng.

Em mới học database vơi mysql dc 2 tháng,nếu có gì sai anh bảo e luôn nhé

Nói về phân tích thiết kế: khóa ngoại phải tham chiếu tới khóa chính (primary key) của bảng cha.

Về mặt kỷ thuật:

  • SQL Server cho phép tham chiếu tới PrimaryKey/ HOẶC UniqueKey của bảng cha.
  • Oracle: Chỉ PrimaryKey.
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?