Câu lệnh SQL để gán id

em có CSDL : SACH( id, category_id, title, author, category)

Cho e hỏi có câu lệnh nào để gán giá trị cột “category_id” cho giá trị cột “category” mỗi khi nhập category vào thì cột “category_id” sẽ cho một giá trị id đã gán

Do chưa nghĩ ra nên mình sẽ góp ý theo hướng khác :smile:

Tại sao lại thiết kế như vậy? Hầu hết việc vi phạm chuẩn hoá dữ liệu đều sớm muộn sẽ gây ra lỗi, hỏng hóc, hoặc để đảm bảo không gây thêm lỗi sẽ tiêu hao nhiều thời gian và chi phí kiểm thử, bảo trì.

Bảng SACH không cần có field category, chỉ cần category_idforeign key, vì từ category_id sẽ có đầy đủ thông tin của category.

2 Likes

Có 2 tình huống trong table SACH của bạn:

1. Bạn ko hiểu các qui tắc chuẩn hóa, nên đã để sai cột category vào đây như bạn Trần Hoàn đã giải thích.

=> Giải pháp: bỏ cột category ra, khi cần query dữ liệu thì join SACHCATEGORIES lại với nhau. Hoặc có thể tạo view nếu câu query đó thường được dùng.

2. Biết, nhưng có tình phi chuẩn vì mục đích nào đó, vd như tốc độ truy xuất!

=> Giải pháp: Viết trigger bắt before INSERTbefore UPDATE để thêm giá trị cho cột category.

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