sql >> Databasteknik >  >> RDS >> Oracle

Ska jag ta bort eller inaktivera en rad i en relationsdatabas?

Att inte ta bort kommer att skapa en ny klass av buggar för alla framtida frågor. Glöm inte att frågeskrivning ofta görs av avancerade användare (dvs icke-IT-proffs) och juniorutvecklare. Så nu kommer varje tabell som har ogiltiga data endast markerade med en aktiv BIT-flagga att behöva en extra AND i WHERE-satsen för varje fråga från nu till för alltid. Detta kommer att hjälpa användare att falla i grop av misslyckande istället för grop av framgång. Jag uppmuntrar dig dock starkt att implementera dessa flaggsystem hur som helst, för utan dålig design finns det inget behov av underhållsutvecklare att fixa de många buggar som det kommer att skapa.

Hur värdefullt är det att ha historiska data i tabellen? Om företaget ser framåt kan det bara vara en börda att ha gamla data i tabellerna - det orsakar problem när man skapar begränsningar (alla begränsningar måste ändras för att utesluta data som du önskar inte fanns där). Kvalitetssäkring av data är komplicerad genom att ständigt behöva identifiera vad som är "gammal skit som vi är rädda för att ta bort men aldrig någonsin vill använda eller uppdatera igen" och nya saker vi bryr oss om.

Raderas det för att det var ett misstag? Om raden motsvarar en entitet i verkligheten, kanske det är intressant att behålla och sätta en "vaporized", "dead", "left the building"-flagga. Om du av misstag infogade en rad som inte motsvarar någon enhet i verkliga livet, är en DELETE inte en dålig sak. Är imaginära kunder som aldrig funnits viktiga att behålla i kundtabellen?

Och slutligen spelar personligheten en stor roll. Människor kan också vara packrater med data. Om en DBA behåller alla sina tidningar från 30 år tillbaka och inte gillar att radera data, kanske han borde se till att han fattar beslut om datadesign baserat på meriter och inte en irrelevant personlig preferens.



  1. Skickar användar-ID till PostgreSQL-utlösare

  2. Hur man skapar ett index i Django utan driftstopp

  3. Kan ett tabellfält innehålla ett bindestreck?

  4. Ansluter till SQL Server 2012 med sqlalchemy och pyodbc