Czy to w ogóle możliwe?
Mój przypadek użycia to tabela księgi, z warunkiem, że po utworzeniu rekordu powinien on być tylko do odczytu, tzn. Nikt nie powinien mieć możliwości jego edycji ani usuwania. Dotyczy to tylko tabeli księgi i tabel z bezpośrednią relacją do niej - istnieją inne tabele w tym samym schemacie, które zostaną zaktualizowane / usunięte normalnie.
Rozumiem, że do celów integralności danych tego rodzaju ograniczenia powinny być stosowane w warstwie bazy danych, ale nie mogę znaleźć czystego, powszechnie akceptowanego sposobu na zrobienie tego - czy jest to przypadek użycia, w którym lepiej bym to zrobił w warstwie aplikacji?
Idealny byłby sposób na zrobienie tego w zwykłym SQL, aby być niezależnym od tego, która platforma DB jest używana, ponieważ może to ulec zmianie, ale zdaję sobie sprawę, że może to być zbyt wiele, więc jeśli ma aby być zależnym od platformy, preferowany jest pewien smak MySQL.
Dziękuję Ci!
źródło
Wydaje się, że uprawnienia są oczywistym wyborem - można jednak również użyć ARCHIVE Storage Engine . Ten silnik tabel został zaprojektowany do rejestrowania dużych ilości danych, które nie ulegną zmianie:
Różnica w stosunku do uprawnień polega na tym, że osoba z rozszerzonymi uprawnieniami nadal będzie mogła zmieniać dane w większości innych typów tabel, podczas gdy ARCHIWUM nie pozwala nikomu zmieniać danych, które już znajdują się w tabeli.
źródło
REPLACE
jest to swego rodzajuUPDATE
! „WYMIANA działa dokładnie tak, jak WSTAW, z wyjątkiem tego, że jeśli stary wiersz w tabeli ma taką samą wartość jak nowy wiersz dla KLUCZA PODSTAWOWEGO lub indeksu UNIKALNEGO, stary wiersz jest usuwany przed wstawieniem nowego wiersza. Patrz rozdział 13.2.5 , „INSERT Składnia”. ”Zajrzyj do „ Architektura punktu w czasie ” lub „ Architektura bazy danych czasowych ”
Projektowanie baz danych: architektura punktu w czasie
Baza danych czasowych
Podstawową ideą obu jest to, że albo musisz dodać dane bez usuwania - albo przechowywać dane w taki sposób, abyś mógł pobrać dane takie, jakie istnieją obecnie ... lub istniały w poprzednim czasie.
powiązane pytanie tutaj: how-to-create-a-point-in-time-architecture-in-mysql ,
źródło