Middle+
Co się stanie po usunięciu czytelnika, który ma na rękach książkę? Jak chronić integralność danych?
sobes.tech AI
Odpowiedź od AI
Jeśli usuniesz czytelnika, który ma wypożyczoną książkę, może dojść do niespójności w bazie danych lub strukturze danych: książka jest oznaczona jako wypożyczona, ale czytelnik już nie istnieje. Prowadzi to do utraty informacji o tym, kto wypożyczył książkę, i narusza integralność danych.
Aby chronić integralność danych, można zastosować następujące podejścia:
- Ograniczenia na poziomie bazy danych: skonfiguruj klucze obce z ograniczeniem
ON DELETE RESTRICTlubON DELETE CASCADE. Na przykład, zabroń usunięcia czytelnika, jeśli ma wypożyczone książki. - Transakcje: podczas usuwania czytelnika sprawdzaj i aktualizuj powiązane wpisy (np. zwracając książki lub przekazując je innemu czytelnikowi) w jednej transakcji.
- Logika aplikacji: przed usunięciem sprawdź, czy czytelnik nie ma aktywnych wypożyczeń, i w razie potrzeby zabroń usunięcia lub obsłuż wypożyczenia.
Przykład w Go z użyciem transakcji i sprawdzenia:
func DeleteReader(db *sql.DB, readerID int) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
var count int
err = tx.QueryRow("SELECT COUNT(*) FROM books WHERE reader_id = ?", readerID).Scan(&count)
if err != nil {
return err
}
if count > 0 {
return fmt.Errorf("nie można usunąć czytelnika z wypożyczonymi książkami")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}