Skip to main content

قوانین Database

طراحی دیتابیس باید migration پذیر، قابل index و هماهنگ با domain باشد.

Migration Naming

نام migration باید action و table را روشن کند:

create_users_table
add_status_to_orders_table
rename_total_to_grand_total_on_invoices_table

Foreign Key

  • foreign key باید نام قابل پیش‌بینی داشته باشد
  • constraint باید در migration تعریف شود
  • رفتار delete و update باید صریح باشد

Nullable Policy

  • فیلد nullable فقط با دلیل domain مجاز است
  • nullable برای راحتی seed یا import موقت پذیرفته نیست
  • تغییر nullable بودن فیلد باید اثر روی داده موجود را بررسی کند

Index Policy

برای موارد زیر index لازم است:

  • foreign keyها
  • ستون‌های پرکاربرد در filter
  • ستون‌های پرکاربرد در sort
  • ستون‌های unique business

Transaction

برای عملیات چندنوشتنی، transaction الزامی است.

نمونه‌ها:

  • ایجاد entity همراه با relationها
  • تغییر وضعیت همراه با log
  • عملیات مالی یا موجودی
  • چند update وابسته به هم

Soft Delete و Enum

  • soft delete فقط وقتی استفاده شود که نیاز business به restore یا audit وجود دارد
  • enumها باید strategy ذخیره‌سازی روشن داشته باشند
  • تغییر مقدار enum باید backward compatibility را بررسی کند