“هرگز داده ها را حذف نکنید” – انجمن DEV

TL; DR
- استفاده کنید
trash-put
بجایrm
. - نهادهای خود را سخت/نرم نکنید، آن را به کاربر غیرفعال، محصول متوقف شده، سفارش لغو شده، شغل پر شده، کارمند اخراج شده/بازنشسته و غیره به روز کنید.
حذف فایل ها
در Windows File Explorer شما تبلیغات و a Delete
دکمه ای که فایل\dir را به پوشه سطل زباله منتقل می کند، در macOS Finder، GNOME Files یا KDE Dolphin دکمه در واقع می گوید Move to Trash
.
در خط فرمان در یک سیستم یونیکس مانند، ما استفاده می کنیم rm
، که مخفف حذف است اما حذف نه حذف است. در Microsoft cmd.exe دستور این است del
.
این را در نظر بگیرید: شما می خواهید دستوری را در پایگاه داده تولید اجرا کنید، اما آن هنگ می کند و شما فکر (واقعا مطمئن نیستم) به دلیل فایل های خراب است، mv
آنها را به مسیر دیگر کافی است، اما آنها فقط داده های خراب هستند، بنابراین شما استفاده کنید rm
و به طور تصادفی به جای ماکت، پایگاه داده اصلی را حذف می کند.
rm
داده ها را حذف می کند بلافاصله. مستقیما و تقریبا غیر قابل برگشت است. انسان ها همیشه اشتباه می کنند و خیلی زود پشیمان می شوند، چند ثانیه بعد از فشردن enter. انتقال به سطل زباله برای حذف در آینده می تواند شما را نجات دهد.
حذف سخت در گذشته زمانی که ذخیره سازی بسیار کوچک و گران بود، بیشتر ضروری بود، اما اکنون دیگر دائماً برای فضا نمی جنگیم.
پس الف را درمان کنید rm
(و سنت یونیکس به عنوان یک کل) به عنوان محصول زمان خود، فایل های نامطلوب را به سطل زباله منتقل کنید، می توانید از این استفاده کنید trash-cli
برای لینوکس
و همانطور که trash-cli readme می گوید:
آیا می توانم با نام مستعار
rm
بهtrash-put
?
شما می توانید اما شما نباید. اوایل فکر می کردم این کار خوب است اما حالا نظرم تغییر کرد.
اگرچه رابط کاربری
trash-put
به نظر می رسد باrm
، دارای معانی مختلفی است که برای شما مشکل ایجاد می کند. به عنوان مثال، در حالی که >rm
نیاز دارد-R
برای حذف دایرکتوری هاtrash-put
نمی کند.
اما گاهی فراموش می کنم استفاده کنم
trash-put
، واقعاً نمی توانم؟
شما می توانید نام مستعار
rm
به چیزی که به شما یادآوری می کند که از آن استفاده نکنید:alias rm='echo "This is not the command you are looking for."; false'
سپس، اگر واقعاً می خواهید استفاده کنید
rm
، برای دور زدن نام مستعار، به سادگی یک بک اسلش اضافه کنید:\rm file-without-hope
توجه داشته باشید که نام مستعار Bash فقط در پوسته های تعاملی استفاده می شود، بنابراین استفاده از این نام مستعار نباید با اسکریپت هایی که انتظار استفاده از آنها را دارند تداخل ایجاد کند.
rm
.
حذف موجودیت ها در پایگاه داده
شما این کار را نمی کنید، شما فقط آن را از همه پرس و جوها فیلتر می کنید، درست است؟
خوب، تصور کنید موجودیت یک مشتری است، حالا وقتی میخواهیم به یک سفارش با مشتری آن بپیوندیم، چه اتفاقی میافتد؟
- آیا مشتری نرم افزار باید cascade را نیز در سفارشات خود حذف کند؟
- آیا باید خطای داده خراب را برگردانیم؟ زیرا کلید خارجی به ردیفی اشاره می کند که پرس و جو نمی تواند آن را بخواند (FKs همیشه باید به یک ردیف معتبر اشاره کند).
- آیا باید خطای پیدا نشدن مشتری را برگردانیم؟
- آیا باید داده ها را بدون فیلدهای مشتری یا پر شده برگردانیم؟
null
? بنابراین اکنون UI می گوید که مشتری تعریف نشده نامیده می شود (یا در تلاش برای دسترسی به یک فیلد غیر موجود از کار می افتد).
وقتی کسی می میرد، سعی نمی کنیم آن را از تاریخ پاک کنیم (به طور معمول)، وضعیت آن را به “زنده نیست” به روز می کنیم.
کاری که ما انجام می دهیم
هنگامی که کاربر درخواست حذف حساب خود را می کند، داده های شناسایی شخصی او باید حذف شود (عنوان مقاله را نادیده بگیرید) یا به دلیل قوانین حفاظت از داده ها ناشناس است، رابط کاربری باید بگوید که یک کاربر غیرفعال است و دیگر نباید بتواند تأیید اعتبار کند و سفارش/پست کند (اینها تصمیمات تجاری هستند، نه فنی).
محصولات حذف نمی شوند، آنها متوقف می شوند. مدیر انبار باید بداند که تولید محصول متوقف شده است تا انبار بیشتری به عرضه کننده سفارش ندهد. محصول نباید به طور ناگهانی از سیستم ناپدید شود، که باعث سردرگمی می شود و به عنوان یک اشکال درک می شود.
سفارشات حذف نمی شوند، لغو می شوند. و اگر سفارش خیلی دیر لغو شود، ممکن است هزینههایی متحمل شوند.
کارمندان حذف نمی شوند، آنها اخراج می شوند (یا بازنشسته می شوند). و اغلب یک بسته جبرانی برای رسیدگی وجود دارد.
مشاغل حذف نمی شوند، آنها پر می شوند (یا درخواست آنها لغو می شود).
الگو رو گرفتی نامگذاری خوب بخشی از یک کد خوب مستند است. “حذف شده” را دقیقاً به عنوان یکی از حالتهای ماشین حالت که دامنه را نشان میدهد، در نظر بگیرید (همچنین، مقادیر خالی فقط یک نوع union/enum هستند، برای نشان دادن آن به ساختار خاصی نیاز ندارید، مانند یک اشاره گر تهی).
شما وضعیت موجودیت را به روز می کنید، اثرات جانبی انتقال را انجام می دهید، اقدامات موجود بر اساس وضعیت فعلی تغییر می کند، پرس و جوها را می توان بر اساس وضعیت فیلتر کرد.
بقیه
خوب، در مورد دادههایی که موجودیتهای فیزیکی، دادههای سطح فردی یک انبوه، دادههای اضافی، دادههای موقت، دادههای قدیمی، دادههای خراب را نشان نمیدهند، چطور؟ خوب، من به سطل زباله/بایگانی منتقل می شوم یا ممکن است فورا حذف کنم (بله، عنوان کلیکی است).