One way to do this is to design your database table so that it only accommodates unique values.
CREATE TABLE person (
person_id INT(8) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name CHAR(32) NOT NULL DEFAULT '',
middle_name CHAR(32) NOT NULL DEFAULT '',
last_name CHAR(32) NOT NULL DEFAULT '',
birth_date DATE NOT NULL,
birth_city CHAR(32) NOT NULL,
death_date DATE,
death_city CHAR(32),
moms_name CHAR(64) NOT NULL DEFAULT '',
dads_name CHAR(64) NOT NULL DEFAULT '',
UNIQUE person_index (first_name, middle_name, last_name, birth_date, birth_city, death_date, death_city, moms_name, dads_name)
);
Though a data structure like this might confound the 'E.F. Codd immaculati', it will assure that each John Smith has at least some distinction within the criteria you specified, while allowing for multiple John Smiths...
Have fun....