about normal again

if i want to assign a normal to a triangle,then,

for (i = 0; i < 20; i++) {
glVertex3fv(&vdata[tindices[i][0]] [0]);
glVertex3fv(&vdata[tindices[i][1]] [0]);
glVertex3fv(&vdata[tindices[i][2]] [0]);

and,if i want use indexd array,then i have to have normals array with same size as vertices array!I have a little confused,are these normals redundant ??

From GPU point of view, per vertex attributes are required, and as such they are not redundant. If you use begin-end, driver (software) will perform duplication for you. If you use index array, you have to do duplication yourself. So modern OpenGL API more closely matches the current GPU.