To answer your question, YES. But!!
Thats how an ini file is saved. The way you have it layed out.
A hash table works with 3 pieces of information. The table name first. What you call the data you are saving and the data. Look at it as:
a hash table has slots to save data in. You name each slot what you want so you can pull up the information later. Say I save the time someone joins a room. I could name the table j#Channel. I would name the slot after the nickname who joined and make the data the time. So now I have a table named j $+ $chan and I can easily see what time $nick joined.
on *:join:#:/hadd j $+ $chan $nick $asctime(HH:nnoo)
Now if I want to retrieve the info I use $hget. $hget(j $+ $chan,$nick) would return the time $nick joined $chan.
So for your layout, you have two pieces of information per nickname. You don't want to create a new hash table for each name. They use up your RAM. Instead I personally would save your information under the nickname and seperate the two pieces of info by a space so you can use $gettok to retrieve it.
Table named TEST.
/hadd test $nick (chardesc) (charname)
This saves (chardesc) (charname) under the $nick line of the test hash table.
$hget(test,$nick) == (chardesc) (charname)
$gettok($hget(test,$nick),1,32) == (chardesc)
$gettok($hget(text,$nick),2,32) == (charname)
I h ope this helps you plan your hash table better.