قوانین 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 را بررسی کند