Jestem nowy w bazach danych i staram się zrozumieć podstawowe pojęcia. Nauczyłem się, jak usuwać dane z bazy danych. Ale jeden z moich przyjaciół powiedział mi, że nigdy nie należy usuwać danych z bazy danych. Zamiast tego, gdy nie jest już potrzebny, lepiej po prostu oznaczyć go lub oznaczyć jako „nieużywany”.
Czy to prawda? Jeśli tak, to w jaki sposób duża firma, taka jak IBM, będzie przetwarzać swoje dane przez sto lub więcej lat?
database
maintenance
fuddin
źródło
źródło
Odpowiedzi:
Podobnie jak w przypadku wszystkich tych rzeczy, odpowiedź brzmi „to zależy”.
Jeśli użytkownik może chcieć odzyskać dane, znajomi mają rację - tak naprawdę nie usuwasz, po prostu zaznacz rekord jako „usunięty”. W ten sposób, gdy użytkownik zmieni zdanie, możesz odzyskać dane.
Jeśli jednak usunięte dane są starsze niż pewien okres (na przykład rok), możesz zdecydować, aby naprawdę usunąć je z tabel na żywo, ale zachować je w tabeli archiwum lub nawet w celu wykonania kopii zapasowej, jeśli użytkownik kiedykolwiek zechce to z powrotem. W ten sposób możesz ograniczyć ilość danych (bieżących i ostatnio usuniętych) do minimum.
Jeśli jednak dane są efemeryczne lub można je łatwo odtworzyć, możesz zdecydować o ich usunięciu.
Istnieje jedna klasa danych, którą musisz usunąć - a są to dane osobowe, których użytkownik nie chce, abyś już przechowywał. Mogą istnieć lokalne przepisy (np. W UE), które czynią to obowiązkowym wymogiem (dzięki Gavin )
Podobnie mogą istnieć zasady, które wymagają, aby nie usuwać danych, więc przed podjęciem jakiejkolwiek decyzji sprawdź u organów regulacyjnych, co musisz zrobić, aby zachować zgodność z prawem.
źródło
Jest to w rzeczywistości znaczący problem dla wielu firm. Nie ma sposobu, aby dokładnie określić, które dane są faktycznie używane, więc po prostu znajdują się w bazie danych. Usuwanie i archiwizacja danych musi być częścią każdego dużego projektu systemu, ale rzadko tak jest. Większość firm po prostu sobie z tym radzi, kupując większe dyski i poprawiając swoje zapytania i indeksy w celu utrzymania wydajności, dopóki nie zmienią systemów, a następnie podejmą znaczne wysiłki, aby zidentyfikować bieżące dane, a następnie migrować tylko te rekordy do nowego systemu.
Tak, powinieneś usunąć dane ze swojej bazy danych, ale często nie jest łatwo powiedzieć, co i kiedy.
źródło
Było już wiele dobrych odpowiedzi na to pytanie, które sprowadzają się do „Zależy od okoliczności” i nie mogę do nich niczego dodać.
Jedną rzeczą, o której nie wspomniano, ale myślę, że należy o tym wspomnieć, jest to, że nigdy nie powinieneś nigdy ponownie używać kluczy podstawowych, które zostały wygenerowane przez sekwencję lub system AUTO_INCREMENT.
Gdy usuniesz element, któremu przypisano klucz podstawowy przez taki system, w kolumnie klucza podstawowego pozostaną luki pozostawione przez usunięte dane. Istnieje wielka pokusa, aby przypisać te luki do nowych elementów w miarę ich dodawania, a nawet gorzej, aby przetasować istniejące dane, aby nadać im nowy identyfikator w celu usunięcia luk, ale spowoduje to problemy, które możesz nigdy nie będziesz musiał sobie z tym radzić, jeśli zostawiłeś klucze w spokoju.
Załóżmy, że przechowujesz bazę drukarek do zarządzania zamawianiem materiałów eksploatacyjnych. Drukarka 13, stara drukarka laserowa, psuje się poza ekonomiczną naprawą, więc ją wyrzucasz. Tymczasem z niezwiązanego powodu ktoś zamawia nową drukarkę termiczną do drukowania kodów kreskowych w magazynie, a ta drukarka zdarza się przed wymianą na drukarkę 13. Administrator rejestruje tę nową drukarkę w bazie danych, a ponieważ 13 jest teraz darmowa i przetwarzasz identyfikatory, nowa drukarka termiczna otrzymuje 13 jako swój identyfikator.
Teraz ktoś mówi ci, że w drukarce 13 prawie nie ma atramentu. Pamiętasz, że drukarka 13 jest drukarką laserową, więc nie zawracaj sobie głowy jej wyszukiwaniem w bazie danych i złożysz zamówienie na kasetę z tonerem. Tylko ty faktycznie musiałeś zamówić termiczny zestaw atramentów, ponieważ drukarka 13 nie jest już drukarką laserową. Gdy nadejdzie kaseta z tonerem, nie możesz jej użyć, ponieważ jest to zły wkład atramentu do drukarki, nie możesz wydrukować więcej kodów kreskowych i nie możesz wysłać żadnych zamówień oczekujących na wysłanie.
Co gorsza, co się stanie, jeśli usuniesz drukarkę 13 i przetasujesz wszystkie drukarki, które pojawią się po niej, aby wypełnić lukę? Drukarka 14 (niektóre zniszczona stara matryca punktowa) staje się drukarką 13, drukarka 15 staje się drukarką 14 i tak dalej.
Wszystkie drukarki mają na sobie etykiety, dzięki czemu można je odnieść do bazy danych, ale teraz wszystkie etykiety są nieaktualne. Musisz się obejść, zlokalizować każdą drukarkę w firmie (która może mieć setki!) I ponownie oznaczyć je etykietą. To nie jest efektywne wykorzystanie czasu. Jest to również proces podatny na błędy, a co się stanie, jeśli nigdy się nie uda? Ktoś dzwoni, by powiedzieć, że drukarka 14 zepsuła się i wymaga pilnej naprawy, więc sprawdź to i okaże się, że drukarka 14 jest drukarką atramentową w recepcji. Tylko dlatego, że przetasowałeś identyfikatory, tak naprawdę drukarka igłowa wymaga pilnej naprawy. Facet, który wezwał problem, pozostaje zawieszony, podczas gdy recepcjonistka ma faceta z działu pomocy technicznej, którego nigdy nie wezwała, aby naprawić drukarkę, która nie była zepsuta.
Powinieneś pomyśleć o identyfikatorach przypisanych przez system automatycznego przyrostu jako stałych, są one niezmienne i nie mogą być ponownie użyte, nawet jeśli rzecz, do której odnosi się identyfikator, przestaje istnieć. Niektóre osoby twierdzą, że nie chcą się martwić wyczerpaniem identyfikatorów, ale nawet w przypadku systemów 32-bitowych i podpisanych identyfikatorów nadal dostępnych jest około 2 miliardów identyfikatorów. Jeśli możesz sprawić, by kolumna ID była niepodpisana, liczba ta podwoi się do 4 miliardów, aw systemach 64-bitowych liczba dostępnych identyfikatorów jest dosłownie większa niż liczba gwiazd na niebie. Nie zabraknie ci identyfikatorów.
źródło
Wiele dobrych odpowiedzi już tutaj. Chcę tylko dodać jedną sytuację, o której nikt jeszcze nie wspomniał:
Dane wrażliwe . Jeśli użytkownik go usunie, lepiej go faktycznie usuń!
Jedną z bardzo częstych sytuacji, które przychodzą na myśl, jest zmiana / zresetowanie hasła. Nie chciałbyś przechowywać starych haseł (nawet jeśli są one mieszane, solone itp.) W bazie danych. Użytkownicy mogą używać swoich starych (i złych) haseł w innych witrynach.
Ponadto, jeśli chodzi o przepisy dotyczące tego, jak długo możesz przechowywać określone rodzaje danych, wówczas oczywiście nie będą wykonywane miękkie usunięcia. Musisz go usunąć.
Więc zadałbym sobie pytanie: czy użytkownik (lub ktoś inny, na przykład rząd) będzie wściekły, jeśli przekonam ich, że dane zostały usunięte, ale w rzeczywistości nadal je mam i mogę je przywrócić w dowolnym momencie?
źródło
Zasadniczo nie usuwam danych użytkowników z moich baz danych. Oznaczam je jako ukryte. Zbyt często użytkownik usuwa coś przypadkowo i wymaga łatwej wymiany. Pomaga również zachować integralność referencyjną powiązanych danych. Działa to w przypadku baz danych o małych i średnich rozmiarach. W systemach, w których decyzja ta ma duży wpływ na wydajność, jest obsługiwana w specjalny sposób, np. Tabele archiwów, automatyczne kopie zapasowe itp.
W razie potrzeby usuwamy dane zaplecza, np. Wygasłe dane sesji strony internetowej i stare informacje z dziennika. Nie ma sensu trzymać ich na zawsze.
Jak zwykle jednak dokładna odpowiedź naprawdę zależy od konkretnej sytuacji.
źródło
Od kilku lat pracuję nad aplikacją wymiany walut. Dane zbierane przez aplikację przez lata miały wpływ na wydajność (powiedzmy wykładniczo).
Po zrobieniu wszystkiego, co w naszej mocy, jeśli chodzi o kod, zaproponowaliśmy zarządowi zarchiwizowanie danych starszych niż rok. Sprawdzili koncepcję (kwestie prawne) i na szczęście udało nam się to zrobić. Usunęliśmy, ale zarchiwizowaliśmy dane, aby firma mogła nadal generować raporty itp.
źródło
W większości przypadków należy przechowywać dane na wypadek, gdyby były potrzebne w przyszłości. Firma, dla której pracujesz, może chcieć spojrzeć na dane historyczne, aby oprzeć swoje decyzje na tym, co skieruje firmę w określonym kierunku.
Powinieneś dodać kolumny „Date_Time_Removed” do każdej tabeli, a następnie zamiast fizycznie usuwać wiersze, ustaw datę i godzinę wirtualnego usunięcia wiersza. Następnie w procedurach przechowywanych lub sql weźmiesz pod uwagę kolumnę „Date_Time_Removed”, np. Wybierz bla z tabeli 1, gdzie data_czas_usunięta ma wartość null
Oczywiście wiersze, które zostały przypadkowo dodane do bazy danych, powinny zostać trwale usunięte, zwłaszcza dane testowe.
Zachowując wszystkie legalne dane, musisz również skorzystać z bazy danych do magazynowania w przyszłości.
źródło
Inna sytuacja niż inne przedstawione to sytuacja, gdy dane są usuwane, ale dzienniki operacji wykonanych w bazie danych (łącznie z usunięciem) są przechowywane w archiwach przez długi okres czasu. Głównym celem tego jest wdrożenie systemu przywracania poprzednich dat, ale można go również wykorzystać do przechowywania w pewien sposób usuniętych danych (które są usuwane z bazy danych, ale przechowywane w archiwach).
Przechowywanie archiwów usuniętych danych nie byłoby tak wielką sprawą. Duże firmy mogą także przechowywać wersje kodu i wiele innych informacji (nie mówiąc już o rzeczach nietechnicznych), więc w końcu przechowywanie dużych danych jest dla nich czymś zwyczajnym.
źródło