Re: Simple Database Design Problem
Disambiguation of persons is beyond the scope of a database engine.
* Alternate spellings
* Nicknames (Superfreak)
* Initials instead of names (R. James)
* etc.
Those lead to having two records of one "person"
Date of birth helps in assuring that two persons are the same.
In the database, you should move quickly to a person_id, or author_id, etc, where the id is an AUTO_INCREMENT. The `name` field should be indexed (not UNIQUE) to assist in lookups during the disambiguation phase.
If you don't have control over names...
To do a "complete" job, you need a UI (or other mechanism) for allowing a human to examine two `person` records and declare that they should be merged. And similarly, have a way to split a person into two persons.
For now, simply assume that a different name is a different thing (person, template, etc.)
If you do have control over names...
If you allow a user to "name" a template (etc), then be sure to direct him down two paths:
* Create new template -- squawk if the name already exists.
* Locate an existing template -- squawk if the name does NOT exist.
Users will be comfortable with that.
In either case, use an AUTO_INCREMENT, PRIMARY KEY, id under the covers.