Có rất nhiều cách để da mèo này, một vài kỹ thuật tôi có thể nghĩ:
1. Xóa tất cả vai trò và tái chèn
Đây là một cách tiếp cận thẳng về phía trước. Xóa tất cả vai trò cho người dùng và chỉ chèn lại. Thông thường người dùng chỉ thuộc về một vài vai trò (dưới 10). Ngoài ra, có một cơ hội tốt mà không có các khóa ngoại khác liên kết với bảng nhiều-nhiều này.
2. ca khúc Giữ trong những thay đổi và chỉ áp dụng những thay đổi
Đây là công việc nhiều hơn nhưng hiệu quả hơn, ngay cả khi chỉ một chút trong trường hợp này. Các công cụ như ORMs
giúp việc theo dõi và áp dụng các loại thay đổi này dễ dàng.
3. Áp dụng những thay đổi như là người dùng thực hiện thay đổi
Trong trường hợp này tôi cho rằng nó có thể chấp nhận để áp dụng các thay đổi DB là đối tác của người dùng cuối người sử dụng vai trò. Có lẽ nó là một cơ sở dữ liệu địa phương và mỗi giao dịch ngắn ngủi. Nhưng tôi đoán đây là một tình huống khó xảy ra.
Tôi không nghĩ có bất kỳ điều gì sai đối với trường hợp cụ thể này để xóa và chèn lại.
Nguồn
2012-02-17 20:24:42
đó là lý do tại sao chúng tôi có thông số, bạn chuyển userID và roleID dưới dạng tham số và sau đó bạn thực hiện: 'DELETE FROM MyTable WHERE userID = @UserID AND roleID = @ RoleID' – JonH
Đây thực sự là câu hỏi hay hơn bề mặt. Nếu bạn có giao diện người dùng cho phép bạn chỉnh sửa nhiều mặt của bảng và cập nhật nó ở chế độ hàng loạt khi người dùng nhấn lưu (thay vì thực hiện từng lần một) người dùng khác có thể sửa đổi bảng bên dưới bạn để bạn thoát 't chắc chắn nếu, ví dụ, một người dùng khác đã thêm vai trò trong khi người dùng hiện tại đang chỉnh sửa trong giao diện người dùng – JohnFx