Chọn cách nào tốt nhất trong trường hợp này?

em đang làm chức năng edit trong crud, sử dụng eloquent laravel, và có xảy ra tình huống thế này:

có 2 bảng có quan hệ 1-n với nhau vd: A-B , 1-n
trong bảng B có 1 trường là id_A để tham chiếu đến bảng A

để cập nhật nhiều record vào 1 bảng B em nghĩ ra 2 cách:

  1. cách 1: xóa hết record cũ theo 1 id_A, sau đó ghi record mới vào, cách này sẽ chạy 1 lệnh delete where id_A = $id_A , sau đó sẽ ghi record mới vào

  2. cách 2: đầu tiên em select các record cũ có id_A = $id_A , sau đó em lọc ra các record thừa ( có trong cũ mà ko có trong mới), em xóa các record thừa này đi, sau đó ghi record mới vào

giả sử có trong db có 10 record cũ, và cần thay 10 record đó bằng 5 record, trong 5 record mới có 2 record trùng với 10 record cũ

theo cách 1: em sẽ xóa 10 record cũ , ghi 5 record mới
theo cách 2: em sẽ xóa 8 record cũ, ghi 3 record mới và update 2 record trùng

theo cách 1: em sẽ chạy 6 câu querry, 1 câu delete, 5 câu insert
theo cách 2: em sẽ chạy 7 câu querry,1 câu select, 1 câu delete, 3 câu insert, 2 câu update

Lý do gì phải thay đổi trường id? Mình không hiểu được tại sao phải thay đổi cập nhật id, nếu xoá biểu ghi dựa trên id thì có hiểu được, vì id là số để phân biệt biểu ghi mà bạn lại thay đổi thì dữ liệu quan hệ có ý nghĩa gì nữa. Bạn không lo ngại là thay đổi trường id có khả năng sai sót gì đó dẫn đến “râu ông nọ cắm cằm bà kia”? Nguy hại vô cùng.

Cứ update dữ liệu bình thường, trường id để nguyên nhé.

2 Likes

không phải thay đổi trường id mà dựa vào trường id để thay đổi thông tin, tức table A relationship 1-n với table B, thông qua id_A là 1 foreign key, được đặt tại table B, bạn hiểu sai đề rồi

Trình bày khó hiểu quá. Em muốn update cùng lúc nhiều dòng bên bảng B phải ko.
Dữ liệu truyên lên có dòng vừa update vừa thêm mới và delete luôn có phải không?
Tốt nhất là client phân 3 request update, insert, delete tách bạch nhau. hoặc có field action để biết là đang create/delete/update.
Không ai đi xoá hết tạo lại cả trừ khi lười thôi hoặc cái app qua đặc thù. data ghi xoá liên tục.

4 Likes

thanks anh, em cũng nghĩ vậy

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