Create a graph with 8 and 30 edges:
In[]:=
g=Graph[MapThread[#1#2&,{RandomChoice[Range@8,30],RandomChoice[Range@8,30]}]]
Out[]=
Create 30 unique names:
In[]:=
edgeNames=MapThread[StringJoin,Capitalize@RandomWord[#,Length@EdgeList@g]&/@{"Adjective","Noun"}]
Out[]=
{UnorderedValedictory,GlorifiedTiddlywinks,OutragedCelerity,CrypticAstrophysicist,UndamagedSharpie,CranialConfederacy,SableGrange,JaggedAlliteration,UnfixedAncestress,TubelessMorbidity,LearnedDeterminant,CubicBunch,EleventhPeak,GynecologicReason,RoundRoundtable,RollickingKeep,EnsuingJinx,CarmineFixing,OvercriticalTenantry,FiftyRustling,InexpertEyeliner,UnperceivedTiter,OvoidFretwork,ImprovingArtwork,AqueousEquating,FictionalSignalman,DecisiveAppeal,ExcrescentEarnings,PiggishSurgeon,MonumentalOutflow}
Now, if you try to do this with EdgeLabels, you run into a problem where you get (say) one rule that takes 15 to "A" and another that takes it to "B", which is not tenable:
In[]:=
Graph[g,EdgeLabels->(Rule@@@Transpose[{EdgeList@g,edgeNames}])]
Out[]=
There's a function specifically designed to address this problem:
In[]:=
EdgeTaggedGraph[EdgeList[g]->edgeNames,EdgeLabels->"Name"]
Out[]=
If you just want basic unique labels...
In[]:=
EdgeTaggedGraph[g,EdgeLabels->#]&/@{"Name","Index"}
Out[]=

,

I was curious about how these labels were represented internally:
In[]:=
FullForm[8
1

1]
It turns out that they just create a third argument to UndirectedEdge! So we could append a unique number to edge edge and get the same result even without using EdgeTaggedGraph, if needed:
So: