Một khóa ngoại có thể được lặp lại trong một bảng không?

Khi một cột thuộc tính không phải là số nguyên tố trong một bảng tham chiếu đến khóa chính và có cùng cột với cột thuộc tính nguyên tố của bảng được gọi là khóa ngoại. Nó đặt mối quan hệ giữa hai bảng, điều này chủ yếu giúp chuẩn hóa các bảng. Một bảng có thể có nhiều khóa ngoại dựa trên yêu cầu

Trong bài viết này, chúng ta hãy xem cách tạo một bảng có nhiều khóa ngoại trong MSSQL

cú pháp

column_name[non_prime] data_type REFERENCES table_name[column_name[prime]

Bước 1. Tạo cơ sở dữ liệu

Chúng tôi sử dụng lệnh dưới đây để tạo cơ sở dữ liệu có tên GeekforGeek

Truy vấn

CREATE DATABASE GeeksforGeeks

Bước 2. Sử dụng cơ sở dữ liệu

Để sử dụng cơ sở dữ liệu GeekforGeek, hãy sử dụng lệnh bên dưới

Truy vấn

USE GeeksforGeeks

Bước 3. Tạo 3 bảng. Bảng student_details chứa hai khóa ngoại tham chiếu đến bảng student_branch_details và student_address

Truy vấn

CREATE TABLE student_details[
  stu_id VARCHAR[8] NOT NULL PRIMARY KEY,
  stu_name VARCHAR[20],
  stu_branch VARCHAR[20] FOREIGN KEY REFERENCES student_branch_details[stu_branch],
  stu_pin_code VARCHAR[6] FOREIGN KEY REFERENCES student_address[stu_pin_code]
  ];
CREATE TABLE student_branch_details[
  stu_branch VARCHAR[20] PRIMARY KEY,
  subjects INT,
  credits INT
];
CREATE TABLE student_address[
  stu_pin_code VARCHAR[6] PRIMARY KEY,
  stu_state VARCHAR[20],
  student_city VARCHAR[20]
];

đầu ra

Số lượng và loại phím có thể được kiểm tra trong phần bảng của trình khám phá đối tượng ở phía bên trái của giao diện người dùng

Bước 4. Chèn dữ liệu vào Table

Chèn các hàng vào bảng student_branch_details và student_address bằng truy vấn SQL sau

Truy vấn

INSERT INTO student_branch_details VALUES
  ['E.C.E',46,170],
  ['E.E.E',47,178],
  ['C.S.E',44,160]

INSERT INTO student_address VALUES
  ['555555', 'xyz','abc'],
  ['666666', 'yyy','aaa'],
  ['777777','zzz','bbb'],
  ['888888','www','ccc'],
  ['999999','vvv','ddd']

Chèn hàng vào student_details

Truy vấn

INSERT INTO student_details VALUES
['1940001','PRATHAM','E.C.E','555555'],
['1940002','ASHOK','C.S.E','666666'],
['1940003','PAVAN KUMAR','C.S.E','777777'],
['1940004','SANTHOSH','E.C.E','888888'],
['1940005','THAMAN','E.C.E','999999'],
['1940006','HARSH','E.E.E','888888']

Bước 5. Xác minh dữ liệu đã chèn

Xem các bảng student_details,student_branch_details,student_address sau khi chèn hàng bằng truy vấn SQL sau

Lưu ý Bạn phải đăng nhập vào cơ sở dữ liệu bằng tên cơ sở dữ liệu trước khi có thể thêm khóa ngoại hoặc thực hiện bất kỳ thao tác toàn vẹn tham chiếu [RI] nào khác. Ngoài ra, khi bật bảo mật, bạn phải có Tham chiếu ngay trên bảng mà khóa ngoại tham chiếu trước khi bạn có thể thêm khóa

Bao gồm mệnh đề FOREIGN KEY trong câu lệnh CREATE TABLE của bạn để xác định khóa ngoại trên bảng phụ thuộc. Ngoài việc chỉ định danh sách các cột cho khóa, bạn có thể xác định tên cho khóa

Các cột trong cột khóa ngoại có thể không có giá trị. Tuy nhiên, hãy đảm bảo rằng các cột giả null không tồn tại trong một chỉ mục không lập chỉ mục các giá trị giả null

Tên khóa ngoại phải là duy nhất trong từ điển. Nếu bạn bỏ qua tên khóa ngoại, Zen sẽ sử dụng tên của cột đầu tiên trong khóa làm tên khóa ngoại. Điều này có thể gây ra lỗi tên khóa ngoại trùng lặp nếu từ điển của bạn đã chứa khóa ngoại có tên đó

Khi bạn chỉ định một khóa ngoại, Zen sẽ tạo một chỉ mục trên các cột tạo nên khóa đó. Chỉ mục này có các thuộc tính giống như chỉ mục trên khóa chính tương ứng ngoại trừ việc nó cho phép các giá trị trùng lặp. Để gán các thuộc tính khác cho chỉ mục, hãy tạo nó một cách rõ ràng bằng cách sử dụng câu lệnh CREATE INDEX. Sau đó, xác định khóa ngoại bằng câu lệnh ALTER TABLE. Khi bạn tạo chỉ mục, hãy đảm bảo rằng chỉ mục không cho phép các giá trị null và các thuộc tính trình tự đối chiếu và trường hợp của nó khớp với các thuộc tính của chỉ mục trên cột khóa chính tương ứng

Các cột trong khóa ngoại phải có cùng kiểu dữ liệu, độ dài và theo cùng thứ tự với các cột được tham chiếu trong khóa chính. Ngoại lệ duy nhất là bạn có thể sử dụng cột số nguyên trong khóa ngoại để chỉ cột IDENTITY, SMALLIDENTITY hoặc BIGIDENTITY trong khóa chính. Trong trường hợp này, hai cột phải có cùng độ dài

Zen kiểm tra các điểm bất thường trong khóa ngoại trước khi tạo bảng. Nếu tìm thấy các điều kiện vi phạm các ràng buộc toàn vẹn tham chiếu [RI] đã xác định trước đó, thì nó sẽ tạo mã trạng thái và không tạo bảng

Lưu ý Khi bạn tạo khóa ngoại trên bảng đã chứa dữ liệu, Zen không xác thực giá trị dữ liệu đã có trong cột khóa ngoại và giá trị trong cột khóa chính. Ràng buộc này áp dụng cho hành động CHÈN, CẬP NHẬT hoặc XÓA được thực hiện sau khi khóa ngoại được tạo

Khi bạn xác định khóa ngoại, bạn phải bao gồm mệnh đề THAM KHẢO cho biết tên của bảng chứa khóa chính tương ứng. Khóa chính trong bảng cha phải được xác định. Ngoài ra, nếu kích hoạt bảo mật trên cơ sở dữ liệu, bạn phải có Reference ngay trên bảng chứa khóa chính

Bạn không thể tạo khóa ngoại tự tham chiếu bằng câu lệnh CREATE TABLE. Sử dụng câu lệnh ALTER TABLE để tạo khóa ngoại tham chiếu khóa chính trong cùng một bảng

Ngoài ra, bạn không thể tạo khóa chính và khóa ngoại trên cùng một nhóm cột trong một câu lệnh. Do đó, nếu khóa chính của bảng bạn đang tạo cũng là khóa ngoại trên bảng khác, bạn phải sử dụng câu lệnh ALTER TABLE để tạo khóa ngoại

Câu lệnh sau đây thêm một khóa ngoại mới vào bảng Lớp. [Cột Khoa được định nghĩa là một chỉ mục không bao gồm các giá trị null. ]

ALTER TABLE Class ADD Constraint Giáo viên NGOẠI KHÓA [Khoa_ID] THAM KHẢO Khoa ON DELETE HẠN CHẾ

Trong ví dụ này, quy tắc hạn chế xóa ngăn không cho ai đó xóa một thành viên của khoa khỏi cơ sở dữ liệu mà không thay đổi hoặc xóa tất cả các lớp của khoa đó trước.

Chủ Đề