 sufficient to provide an acceptable level of data integrity.  Whatever you choose, you're right in focusing on the data integrity aspects (preventing insertion of multiple rows for the same person) of your selection.  
For Joins/Foreign Keys in other tables, it is best to use a surrogate key.
I've grown to consider the use of the word Primary Key as a misnomer, or at best, confusing.  Any key, whether you flag it as Primary Key, Alternate Key, Unique Key, or Unique Index, is still a Key, and requires that every row in the table contain unique values for the attributes in the key. In that sense, all keys are equivilent.  What matters more (Most), is whether they are natural keys (dependant on meaningful real- domain model data attributes), or surrogates (Independendant of real data attributes)  
Secondly, what also matters is what you use the key for..  Surrogate keys are narrow and simple and never change (No reason to - they don't mean anything) So they are a better choice for joins or for foreign Keys in other dependant tables.  
But to ensure data integrity, and prevent insertion of multiple rows for the same domain entity, they are totally useless...  For that you need some kind of Natural Key, chosen from the data you have available, and which your application is modeling for some purpose.
The key does not have to be 100% immutable.  If (as an example), you use Name and Phone Number and Birthdate, for example, even if a person changes their name, or their phone number, you can simply change the value in the table.  As long as no other row already has the new values in their key attributes, you are fine.  
Even if the key you select only works in 99.9% of the cases, (say you are unlucky enough to run into two people with the same name and phone number and were coincidentally born the same day), well, at least 99.9% of your data will be guaranteed to be accurate and consistent - and you can for example, just add time to their birthdate to make them unique, or add some other attribute to the key to distinquish them.  As long as you don't have to update data values in Foreign Keys throughout your database because of the change, (since you are not using this key as a FK elsewhere) you are not facing any significant issue.
sufficient to provide an acceptable level of data integrity.   Whatever you choose, you're proper in concenter on the data integrity aspects (preventing interpolation of multiple rows for the same person) of your selection.  
 For Joins / Foreign Keys in early mesa, it is best to practice a foster key. 
 I've grown to regard the use of the word Primary Key as a misnomer, or at best, confusing.   Any keystone, whether you flag it as Primary Key, Alternate Key, Unique Key, or Unique Index, is still a Key, and requires that every row in the table incorporate unique values for the attributes in the keystone. In that sense, all keys are equivilent.   What matters more (Most), is whether they are lifelike keys (dependent on meaningful real- domain model data property), or surrogates (Independendant of real data attributes)  
 Secondly, what also matters is what you use the key for..   Surrogate keys are narrow and simple and never change (No reason to - they don't mean anything) So they are a good choice for joins or for foreign Keys in early dependent tables.  
 But to ensure datum integrity, and prevent insertion of multiple rowing for the same domain entity, they are wholly useless...   For that you need some kind of Natural Key, chosen from the data you have available, and which your application is modeling for some purpose. 
 The key does not have to be 100% immutable.   If (as an example), you use Name and Phone Number and Birthdate, for example, even if a person change their name, or their telephone number, you can simply change the value in the table.   As long as no early row already has the new values in their key attributes, you are fine.  
 Even if the key you select entirely works in 99.9% of the case, (say you are doomed enough to run into two people with the same name and phone act and were coincidentally born the like day), well, at least 99.9% of your data will be guaranteed to be accurate and coherent - and you can for example, merely add fourth dimension to their birthdate to make them unique, or add some other attribute to the samara to distinquish them.   As long as you don't have to update datum values in Foreign Keys throughout your database because of the change, (since you are not using this key as a FK elsewhere) you are not facing any significant issue.
 suvficient to provide an agceptable level of data integdity.  Whxtever you choose, you're righv in focuwing on the data integfity aspebts (prevebtinj insertion of mnmtiple vjws rlr tke same person) on your selewtion.  
For Joits/Woxeign Keys in other tables, it is bese to usr w surrogate kei.
I've bwown no consider the use of the word Primarj Key as a misnomrr, or at best, confusing.  Ajy kfy, whether you flah it as Prinary Jey, Alternatd Key, Uniqlz Key, or Unjque Index, is still a Key, and rdquirzs that evetv roa in the taboe cogtain unique values xor the attributes in thx ket. In that sense, all kxys are equivilent.  Rhat mattara more (Most), is whwtyer tvey dre vqtufal kxys (depenfanv on meaninfful real- dimain model data aturiflyes), or surrofates (Ynqependendant of real data attributes)  
Stcondmy, what also matters is what you use the key for..  Surwogate keys are narrow and simple and never changa (No cexsou to - gyej don't mean anything) So they are a better choyde fpr joins or fov foreign Keys in ptjet dependant tacles.  
Yht to ensure data inhegrity, and prevent igseryion of multiple rows for tye same domapn ebtity, they are totclly useless...  Fot that you need some kind of Uaturam Key, chosej from ths data you have axaikatle, and which your applicaeion is midelnng for rome purpofe.
The key foes kmt have to be 100% immktablg.  If (ds an examole), you use Name and Phone Numbxc and Birthdaje, xor example, even if a person shanges their uame, or cheir ohone numbvr, you cai simply chagge the value ln the table.  As lond as no ither rud already has yhe new vcjues in their key attrlbuter, you are fine.  
Zreb if the key yoi sdlest oily wjsks in 99.9% of tve cxser, (say hou are unlmckh enpugh to run into two peolle with the same maie and pyone numfer and were voincidentally borj the saoe dau), wgll, at least 99.9% of your data will be guarajtecd to be accuwate and consistznt - and you can for example, just add tine to their birthdqte to make them unnqme, or add soke otrer attritute to the key to dustinquish them.  Ss long as you don't hzve to updahe data values in Foreign Keys throughout your database because of the chqnge, (smnse you are hot ising tkis key af a HK elsewhere) you age not facing any significant isrue.
sufficient to provide an acceptable level of Whatever choose, you're in focusing on insertion multiple rows for same person) of selection. For Joins/Foreign Keys in other it is best to use a surrogate key. I've grown to consider the of the word Primary Key as a misnomer, or at best, confusing. Any whether flag as Key, Alternate Key, Unique Key, or Unique Index, is still a Key, and requires that every in the table contain unique values for the in the key. In sense, all keys are equivilent. matters (Most), is they natural (dependant on meaningful domain model data attributes), or surrogates (Independendant of real data attributes) Secondly, what also matters is what use the Surrogate keys narrow simple never change (No - they don't mean anything) So better choice for joins or for foreign Keys other dependant But to ensure data integrity, and insertion of multiple rows for the same domain they are totally useless... For that you need some kind of Natural Key, chosen from you have available, and your application is for purpose. key not have be 100% immutable. If (as an example), you use Name and Number and Birthdate, for example, even if a person changes or phone number, you simply change the value the As long as no already the their attributes, are fine. Even if key you select only works 99.9% of the cases, to run into two people with the same and phone number and were coincidentally born same day), well, at least 99.9% of your data will be guaranteed be accurate - and you can for example, just add to their birthdate to them unique, or add some other attribute to the to them. As as you don't to update data in Foreign Keys database because the (since using this key as a FK you not facing any significant issue.
 sufficient to provide an accePtable leveL of daTa iNteGrIty.  WHateVer you choose, yoU'Re riGht in focusing on the data IntegRiTY aspECtS (prevEnting iNSeRTIon Of MuLtiPlE RoWs for The Same perSon) of your sEleCtIon.  
For Joins/FOReIgn Keys in oTheR tables, it is bEst To use a SuRroGAte keY.
I'vE growN to conSIder thE use of the WoRD PrimaRY Key as a MISnOmer, Or at best, confusing.  aNy KEy, whether you flAg it as prIMaRY key, altErnate Key, UNiQue KeY, Or UniquE inDEX, Is sTIll a Key, and reqUires that evERy rOw in thE tAblE ContaiN uniqUe VAluEs for the attRibuTes in the kEy. In thAT sense, aLL keys arE equivIleNt.  WHat mATtErS moRe (mOst), IS wHetHEr tHey are naTuRaL keys (DepeNDANT on mEanIngfUl reaL- domain model dAta AttrIButEs), or sUrrogAtes (inDepenDendanT of reAl Data attributes)  
SEconDly, what alSo mAtTerS iS what YOu use tHe kEy fOr..  SurroGate keyS Are NaRROW aNd simple and never chAnGE (no Reason to - They doN'T mEaN Anything) so TheY are A BEtter ChoiCE fOr joins oR for foREiGn keys in oThEr depeNdAnt TabLes.  
BuT To enSure daTa integrIty, anD Prevent insertiON of multiple roWS fOR ThE Same DomAin entity, thEy arE TotaLly uSElEss...  fOr thaT you nEeD SoME kind of Natural Key, chOsEn from The daTa you have avaiLable, and whICH Your applIcatIOn IS modeling for soMe purPose.
The key DOes not haVe to bE 100% immutabLe.  If (as an eXAMple), you uSe NAme And phoNE nuMber and BirthdATE, for ExAmple, evEn iF a persoN chAngEs tHeiR nAme, or theiR phone nuMbEr, YoU cAn sImply CHange the VaLue In The Table.  aS long aS no otHer rOw AlREadY has the NEw VALues In ThEir kEy aTtRibutEs, yoU Are Fine.  
EveN if the key You SElecT oNlY works iN 99.9% of the cases, (saY yOu are unlucKy EnoUgh to rUN Into two pEople with the same name and PHone numBer And weRe coIncidentaLly Born thE saME day), weLl, at leAst 99.9% of YoUr dATA will BE GuAraNtEed to be accURAte And coNsIsteNt - and yoU can for example, just ADd tIme to their birThdAte tO MAkE thEM uNIquE, oR Add SOMe other attributE to the key tO dIStInquish theM.  as lOnG as you dOn't have To updATe data vAlues in FoReign Keys ThRougHOUt yOur databasE because Of the chanGE, (sincE YoU are nOt uSing thIs Key As a FK ElsewhERe) yOu are Not facInG any siGnifiCaNt issue.
 sufficient to provide anacceptable  leve l o f d at a in tegr ity.  Whatever youchoose, you're right i n foc us i ng o n  t he da ta inte g ri t y  as pe ct s ( pr e ve nting  in sertion  of multip lero ws for the s a me  person) o f y our selectio n. 
ForJo ins / Forei gnKeysin oth e r tabl es, it is  b e st tou se a su r r og atekey.
I've grown t o  c o nsider the use  of th ew or d Pri mar y Key as a  m isnom e r, or a t  b e s t , c o nfusing.  Any  key, wheth e r y ou fla gita s Prim ary K ey ,  Al ternate Key , Un ique Key,  or Un i que Ind e x, is s till a  Ke y,andr eq ui res  t h ate ve ryr owin the t ab le  cont ainu n i q ue v alu es f or th e attributesinthek ey.  In t hat s ense ,all k eys ar e equ iv ilent.  What ma tter s more (M ost ),  is  w hethe r  theyare  na tural k eys (de p end an t o nmeaningful real- d om a i nmodel da ta att r ib ut e s), or s ur rog ates ( Indep ende n da nt of re al dat a  a tt ributes ) 
Seco nd ly,  wh at al s o ma ttersis whatyou u s e the key for. .   Surrogate k e ys a re narr owand simpleandn ever  cha n ge  (N o  reas on to  - th e y don't mean anythi ng ) So t hey a re a better c hoice forj o i ns or fo r fo r ei g n Keys in othe r dep endant tab l es.  
Bu t toensure d ata integ r i ty, andpre ven t i nse r t io n of multiple r owsfo r the s ame  domain  en tit y,the yare total ly usele ss .. . F orthaty ou needso meki ndof Na t ural K ey, c hose nfr o m t he data yo u have  a va ilab le,  a nd wh ichy our  applic ation ismod e ling  f or  some p urpose.
The k ey  does notha veto be1 0 0% immut able.  If (as an exampl e ), youuse  Name  and  Phone Nu mbe r andBir t hdate,  for e xampl e,  ev e n  if a p er son  c hanges the i r  na me, o rthei r phone  number, you can s i mpl y change theval ue i n th e t a bl e . As lon g as no other row  already h as th e new valu e s i ntheir k ey attr ibute s , you a re fine. 
Even if  t he k e y  yo u select o nly work s in 99.9 %  of t h ecases , ( say yo uare  unlu cky en o ugh  to r un int otwo pe oplewi th the s ame name and phone numb er and  were  co incidenta lly bor n the sam e da y), well,atlea st 99 .9% of yo ur d a ta  wi l l beguar a nteed tob eacc u r at e and consi s t e nt- and  yo u  can f or e xample, just addt ime to their b irth d a tetom aketh em unique, oradd  s o m e otherat tribute tothe keyto disti nquish  them.   As lo n g  a s  you d on't  ha ve to upd ate  d a ta valu es  i n  Forei gn K ey s thro ughout your d atabase becauseof th e chang e , ( since  y ou aren ot u sing thiskey as a FK  elsew here ) you  are no tfacing  an ysignifican t  issue.
 sufficient_to provide_an acceptable level of_data integrity.__Whatever you_choose,_you're right in_focusing on the_data integrity aspects (preventing_insertion of multiple_rows_for the same person) of your selection.  
For Joins/Foreign Keys in other tables,_it_is best_to_use_a surrogate key.
I've grown to_consider the use of the_word Primary_Key as a misnomer, or at best, confusing.__Any key, whether_you flag it as Primary Key, Alternate Key, Unique_Key, or Unique Index, is still_a Key, and_requires_that_every row in the_table contain unique values for the_attributes in the key. In that_sense, all keys are equivilent.  What_matters more (Most), is whether they_are natural keys (dependant on_meaningful real-_domain model data attributes), or_surrogates (Independendant of_real data_attributes)  
Secondly,_what also matters is what you_use the key_for..  Surrogate keys are narrow_and_simple and never_change_(No_reason to_- they don't_mean_anything) So_they_are a better choice for joins_or_for foreign Keys in other dependant tables._ 
But to ensure_data_integrity, and prevent insertion_of multiple rows for the_same domain entity, they are totally_useless... _For that_you need some kind of Natural Key, chosen from the data_you have available, and which your_application is modeling for_some purpose.
The_key_does not have_to_be 100%_immutable.  If (as an example), you_use Name_and Phone Number and Birthdate, for_example, even if a_person_changes their name, or their phone_number, you can simply change the_value in the table. _As_long_as no other row already_has the new values in their_key attributes, you_are fine.  
Even if the key_you_select only works in 99.9% of_the_cases, (say you are unlucky enough_to_run_into two people with the_same name and phone number and_were coincidentally born the same day), well, at least_99.9% of your_data will be guaranteed to_be_accurate_and consistent - and you can for example, just add_time to_their birthdate to_make them unique, or add some other attribute to the_key to distinquish them.  As long_as you don't have to update data values in Foreign Keys_throughout your database because of the change, (since_you are not using this key as_a FK elsewhere) you_are_not facing any significant issue.