A visitor submits an enquiry. The browser times out, so they submit it again. Two records reach the sales team, two representatives make contact, and one person receives the same introduction twice.
Duplicate prevention starts by separating two questions: is this the same submission, and is this the same contact?
Model contacts and enquiries separately
A contact represents a person or business identity. An enquiry represents a specific request. One contact can legitimately send several enquiries about different projects.
If someone returns next month with a new requirement, attaching a new enquiry to an existing contact usually preserves more useful history than silently discarding the request.
Consider a hypothetical software agency. A contact asks about a CRM in January and a mobile app in March. Matching the email can help locate the contact. It does not prove the March enquiry is a duplicate.
Give each submission an identity
Create a stable identifier for each logical submission.…