<<Many experienced developers, rather than doing validation at the table level, do it at the form level, either in the control's BeforeUpdate event or the form's BeforeUpdate event, depending on the exact type of validation.>>
More experienced developers put validation at the lowest level possible constraints and/or triggers for Server based data (MS SQL Server)
record validation and Before Change data macros for Access web apps.
That being said I'm new to access web apps but here are a few ideas.
Table ConstraintName IsUnique ConstraintType
-----------------------------------------------------------------------------------------------------------------------------------
Comments IX_01 FALSE Calculated Field [ContactID_calc] & [CommentDate] & [CommentSubject] & [CommentType]
Comments IX_02 FALSE Calculated Field [ContactID_calc] & [CommentDate] & [CommentSubject] & [CommentType]
Comments Record Validation FALSE Record Validation Not (IsNull([ContactID_calc]))
Comments Before Change FALSE Before Change "SetField : ContactID_calc = ContactID
LookupAFieldIn: Comments
WHERE: [Comments].[IX_01]=[t1].[IX_01]
Alias: t1
Action: Raise Error"
Contacts DisplayName FALSE Calculated Field IIf(IsNull([LastName]),"",[LastName] & "-") & IIf(IsNull([FirstName]),"","," & [FirstName]) & IIf(IsNull([CompanyName]),"","-" & [CompanyName])