Kho tàng tài liệu học tập phong phú.

Tin học 11 Kết nối tri thức Bài 18: Thực hành xác định cấu trúc bảng và các trường khoá

Nhiệm vụ: Xác định các bảng dữ liệu, cấu trúc của chúng và các trường khoá cho CSDL của một website âm nhạc?

 

1.1. Xem xét bài toán

– Cùng xem xét lại bài toán quản lí các bản thu âm nhạc. Ta sẽ quy ước nói đến nhạc sĩ sáng tác bản nhạc là nói đến tên một nhạc sĩ hay tên một nhóm nhạc sĩ sáng tác bản nhạc đó.

– Tương tự như vậy, ta cũng quy ước khi nói đến tên ca sĩ là nói đến một ca sĩ hay một nhóm ca sĩ biểu diễn tác phẩm.

 

Ví dụ về một bản ghi chép lại thông tin các bản thu âm

 

1.2. Tạo lập bảng

– Tổng kết tất cả các thông tin cần quản lí, viết ra thành dãy: Số hiệu bản thu âm (STT), tên bản nhạc, tên nhạc sĩ sáng tác, tên ca sĩ thể hiện.

– Từ đó em có thể hình dung về một bảng dữ liệu tên là banthuam, với các trường idBanthuam (để lưu số hiệu bản thu âm), tenBannhac (để lưu tên bản nhạc), tenNhacsi (để lưu tên nhạc sĩ), tenCasi (để lưu tên ca sĩ) và viết mô tả ngắn gọn ở dạng:

 

banthuam (idBanthuam, tenBannhac, tenNhacsi, tenCasi)

 

– Trong bảng này, trường idBanthuam xác định duy nhất một bản thu âm nên sẽ được lấy làm khóa chính của bảng. Nhóm cả ba trường tenBannhac, tenNhacsi, tenCasi cũng xác định duy nhất một bản thu âm, nên nhóm các trường này cũng có thể dùng làm khoá chính của bảng, nhưng rõ ràng dùng idBanthuam là ngắn gọn và thuận lợi hơn.

– Có thể viết lại mô tả bảng trên với tên trường khoá chính có gạch chân như sau:

 

banthuam(idBanthuam, tenBannhac, tenNhacsi, tenCasi)

 

1.3. Tổ chức lại bảng dữ liệu

– Phân tích và sắp xếp lại để hạn chế lượng dữ liệu lặp lại.

– Một ca sĩ có thể là người thể hiện nhiều bản nhạc khác nhau nên trường tenCasi có giá trị lặp lại, tên ca sĩ lại dài, làm lớn dung lượng lưu trữ và khó khăn khi cần sửa chữa. 

– Để khắc phục hạn chế này, cách làm tốt hơn là lập bảng casi(idCasi, tenCasi) với trường khoá là idCasi và thay tenCasi trong bảng banthuam bởi idCasi.

– Như vậy, idCasi trong bảng banthuam sẽ là khoá ngoài tham chiếu đến khoá chính idCasi trong bảng casi.

 

banthuam(idBanthuam, tenBannhac, tenNhacsi, idCasi)

casi(idCasi, tenCasi)

 

– Tương tự, một bản nhạc có thể có nhiều bản thu âm khác nhau do những ca sĩ khác nhau thể hiện. Do đó, cách tốt hơn là tạo bảng bannhac (idBannhac, tenBannhac, tenNhacsi) với trường khoá là idBannhac và thay cặp (tenBannhac, tenNhacsi) trong bảng banthuam bởi idBannhac.

 

banthuam(idBanthuam, idBannhac, idCasi)

casi(idCasi, tenCasi)

bannhac (idBannhac, tenBannhac, tenNhacsi)

 

– Tên nhạc sĩ trong bảng bannhac bị lặp lại do một nhạc sĩ có thể sáng tác nhiều bản nhạc. Vì vậy lại lập bảng nhacsi(idNhacsi, tenNhacsi) và thay thế trưởng tenNhacsi trong bảng bannhac bởi idNhacsi.

– Các bảng dữ liệu thu được bây giờ sẽ là:

 

casi (idCasi, tenCasi)

nhacsi (idNhacsi, tenNhacsi)

bannhac (idBannhac, tenBannhac, idNhacsi)

banthuam(idBanthuam, idBannhac, idCasi)

 

1.4. Các loại khoá

– Mỗi bảng đã có một khoa chính (tên trường được gạch chân).

– Khoá ngoài của các bảng:

 + bannhac: .idNhacsi tham chiếu đến idNhacsi trong bảng nhacsi,

 + banthuam: .idBannhac tham chiếu đến idBannhac trong bảng bannhac,

                      .idCasi tham chiếu đến idCasi trong bảng casi.

– Có thể tóm tắt lại về cấu trúc các bảng và quan hệ của các bảng theo tham chiếu từ khoá ngoài đến khoá chính ở dạng sơ đồ như hình bên dưới.

 

 

– Khoá cấm trùng lặp giá trị (Unique) Cặp (tenBannhac, idNhacsi) trong bảng bannhac không được trùng lặp giá trị. Cặp (idBannhac, idCasi) cũng không được trùng lặp giá trị. Để ghi nhớ điều này người ta cũng nói rằng các trường này phải đặt khoá cấm trùng lặp.

 

1.5. Về các kiểu dữ liệu của các trường

– Đề đơn giản, các trường khoá chính thường có kiều INT và tự động tăng giá trị (AUTO_INCREMENT) ET NOI NỐI TRI THỨC.

– Các trường tenNhacsi, tenCasi, tenBannhac có thể chọn là xâu kí tự có độ dài tối đa 255 kí tự (VARCHAR (255)).