btvn.vn
Tìm kiếm Đăng nhập

Đặt cặp không trùng và khóa ngoại cho bản nhạc

Lưu trên thiết bị này
Thực hành tạo và khai thác cơ sở dữ liệu — ICT · Chọn bài khác

Một quy tắc cho cặp, không cho từng cột

Trong phạm vi mô hình của Bài 18, cùng một nhạc sĩ không có hai hàng bản nhạc **cùng tên**. Chọn đồng thời hai hàng `tenBannhac` và `idNhacsi` trong bảng đang tạo, nháy phải → **Create new index → UNIQUE**. Mở thẻ **Indexes** để kiểm UNIQUE gồm **hai trường theo cặp**, không phải hai UNIQUE riêng. Tên “Mưa đầu mùa” của hai nhạc sĩ khác nhau vẫn được phép; cùng tên ấy với cùng mã nhạc sĩ lần thứ hai sẽ bị từ chối. Quy tắc này phục vụ bài toán đang học. Nếu thực tế muốn lưu nhiều tác phẩm trùng tên của cùng nhạc sĩ, cần thêm thuộc tính phân biệt hoặc thay quy tắc; không xem tên bài là mã định danh phổ quát.

Nối mã nhạc sĩ rồi lưu

Chọn thẻ **Foreign keys → Add**. Ở **Columns**, chọn `idNhacsi` của `bannhac`; ở **Reference table**, chọn `nhacsi`; ở **Foreign columns**, chọn `idNhacsi` của `nhacsi`. Giữ cách xử lí cập nhật/xóa mặc định nếu phòng máy chưa có yêu cầu khác. Trước khi Save, nhìn lại ba thông tin: cột của bảng hiện tại, bảng được tham chiếu, cột khóa chính của bảng ấy. Chọn **Save** rồi mở lại bảng. Cần thấy PRIMARY KEY `idBannhac`, UNIQUE `(tenBannhac,idNhacsi)` và FOREIGN KEY `idNhacsi → nhacsi.idNhacsi`. Máy thử HeidiSQL 12.21 đã tạo được đúng cấu trúc này; MySQL chấp nhận hai hàng cùng tên khác nhạc sĩ, chặn hàng trùng cặp và chặn mã nhạc sĩ không tồn tại. Nếu lỗi khi lưu, kiểm bảng cha đã có, kiểu/signedness của mã và các trường đã chọn; vị trí thẻ có thể khác ảnh SGK HeidiSQL 12.0.

Bài luyện

Hai bài cùng tên “Mưa đầu mùa” có idNhacsi lần lượt là 1 và 2. UNIQUE(tenBannhac, idNhacsi) xử lí thế nào?
Chọn một đáp án

Bài luyện

Trong thẻ Foreign keys, bannhac.idNhacsi cần tham chiếu đến đâu?
Chọn một đáp án

Bài luyện

Sau Save, thẻ Indexes chỉ có UNIQUE(tenBannhac), còn idNhacsi không nằm trong chỉ mục ấy. Cần sửa gì?
Chọn một đáp án

Đang học