Hỏi về quan hệ kế thừa trong cơ sở dữ liệu

Một công ty xe khách và vận tải cần xây dựng một cơ sở dữ liệu để quản lý phân phối xe. Công ty có nhiều xe. Thông tin về xe gồm có số xe, hiệu xe. Trong các xe, có xe chở khách và xe vận tải chở hàng hóa. Thông tin về xe chở khách có thêm thông tin về số chỗ ngồi còn thông tin về xe vận tải có thêm thông tin về trọng tải tối đa chở được.

Một xe được phân công cho một tài xế lái vào ngày tháng năm, giờ quy định và số ngày, số giờ lái. Thông tin về tài xế gồm tên tài xế, mã số tài xế, số điện thoại di động. Một tài xế thuộc về một chi nhánh của công ty. Một chi nhánh có thể nhiều tài xế. Một chi nhánh cũng quản lý nhiều xe. Tuy nhiên một xe chỉ được quản lý ở một chi nhánh. Thông tin về chi nhánh gồm có mã chi nhánh và tên chi nhánh. Một chi nhánh thì ở một thành phố. Một thành phố có nhiều chi nhánh. Thông tin về thành phố gồm có mã số thành phố, tên thành phố.

Em có vẽ được lượt đồ như sau:

Và các lượt đồ quan hệ:
Xe(soXe, hieuXe)

XeChoKhach(soXe, soCho)

XeVanTai(soXe, trongTaiToiDa)

TaiXe(maTX, tenTX, SDT, maChiNhanh)

ChiNhanh(maChiNhanh, tenChiNhanh, maTP)

ThanhPho(maTP, tenTP)

Lai(maTX, maXe, ngayGioLai, soNgayLai, soGioLai)

Em thắc mắc chỗ quan hệ kế thừa của Xe và XeVanTai. Chỗ XeVanTai chỉ thêm maXe thôi đúng không ạ? Sau này bảng Xe sẽ lưu tấc cả thông tin của tấc cả xe bao gồm XeVanTai, bảng XeVanTai chỉ lưu mỗi maXe và soChoNgoi đúng không ạ? Nếu đúng như vậy thì sau này bảng XeVanTai sẽ tham chiếu đến bản Xe để lấy thông tin về hiệu xe đúng không ạ? Em hơi rối chỗ này ạ.

Để thực hiện kế thừa trong SQL, người ta thêm 1 cột discriminator, thay vì thêm 1 bảng mới.

Xe = Select soXe, hieuXe from Table_Xe;
XeTai = Select soXe, hieuXe, trongTaiToiDa from Table_Xe where descriminator = 'XeVanTai';
XeKhach = Select soXe, hieuXe, soCho from Table_Xe where descriminator = 'XeChoKhach'
6 Likes

Hi there,

Đúng như cậu nghĩ, bảng XeVanTai chỉ cần mã xe để refer tới bảng chính Xe, và dữ liệu riêng của xe vận tải (ví dụ: trọng tải tối đa). Dữ liệu chung của tất cả các loại xe đều ở bảng Xe. Cậu không cần toàn bộ các trường khác của Xe, như soXe, hieuXe trong bảng XeVanTai (nếu có, cậu đã bị trùng lặp dữ liệu. Cậu biết chuẩn hoá cơ sở dữ liệu rồi, phải không? :smiley: ).

Khi cậu lấy dữ liệu để form object XeVanTai, cậu hiển nhiên phải query dữ liệu từ 2 bảng, và kết hợp lại vào object của cậu.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?