When declare constraint is defined on some property then whenever the property value changes the system checks if the constraint is valid and if and only if it evaluates to true it allows to save the page to the database else it throws the error.
You can refer the following example:
A Constraints rule records an expected relationship between property values, such as:
ActualExpense("December") is never greater than BudgetExpense("December").
An Edit Validate rule is used more for pattern masking, for example a phone number has a pattern of (###) ###-####. A Validate rule can be used for performing conditional evaluation to validate fields.
I still dont get the exact usecase when we prefer one over the other.
Basically when i set some value in some flowaction for instance, i can validate it then and there by using a validate rule. Then why do we need a constraint which gets fired every time we change a value.