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

Khai báo bảng bản nhạc có mã nhạc sĩ

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

Bảng cha phải có trước

**Nhiệm vụ:** trong CSDL thực hành `btvn19_lab`, kiểm bảng `nhacsi` của Bài 19 đã có `idNhacsi INT` làm khóa chính. Bảng mới `bannhac` sẽ lưu `idBannhac`, `tenBannhac`, `idNhacsi`. Đây là bài thực hành trên dữ liệu giả, không dùng CSDL đang phục vụ người dùng. Trong HeidiSQL, nháy phải CSDL → **Create new → Table**, đặt tên `bannhac`. Thêm `idBannhac INT NOT NULL`, chọn **AUTO_INCREMENT**; thêm `tenBannhac VARCHAR(255) NOT NULL`; thêm `idNhacsi INT NOT NULL`. Đặt **No default value** cho tên bài và mã nhạc sĩ. `idNhacsi` ở đây là mã **đã có** của một nhạc sĩ, nên không tự tăng. Kiểu `INT` và trạng thái signed của hai đầu quan hệ phải phù hợp. Nếu bảng cha dùng mã kiểu khác, phải chọn kiểu khớp, không máy móc dùng INT.

Đặt khóa chính riêng cho bản nhạc

Chọn hàng `idBannhac`, nháy phải → **Create new index → PRIMARY**. Kiểm thẻ **Indexes** chỉ có `idBannhac` trong PRIMARY KEY. Hai bản nhạc khác nhau có mã riêng, kể cả khi trùng tên. `idNhacsi` có thể lặp vì một nhạc sĩ có thể sáng tác nhiều bài; nó sẽ là khóa ngoại sau khi được nối với bảng `nhacsi`. Không đặt giá trị mặc định `0` cho `idNhacsi` chỉ vì đây là cột INT. Nếu bảng `nhacsi` không có mã 0, giá trị ấy sẽ vi phạm khóa ngoại. Khi nhập một bản nhạc, chọn mã nhạc sĩ thực sự tồn tại; Bài 21 mới thực hành thêm hàng. Máy thử MySQL 8.0.46 đã từ chối bản nhạc mang mã nhạc sĩ 0.

Bài luyện

Trong bảng bannhac, trường nào là khóa chính tự tăng?
Chọn một đáp án

Bài luyện

Vì sao bannhac.idNhacsi không chọn AUTO_INCREMENT?
Chọn một đáp án

Bài luyện

Bảng nhacsi chưa có hàng mang mã 0. Chọn mặc định 0 cho bannhac.idNhacsi sẽ gây vấn đề gì khi thêm bài?
Chọn một đáp án

Đang học