Hola!
1)
Un Array Asociativo es aquel que tiene nombres clave por indices es decir:
Código PHP:
$persona = array(
"nombre" => "Pedro",
"edad" => 30,
"carros" => 5,
"profesion" => "Ingeniero",
);
Luego puedes acceder a un elemento por su nombre ej:
Código PHP:
$edad = $persona["edad"];
2)
La diferencia fundamental es que mysql_fetch_array acepta otro parametro que es el resultype, el cual puede ser MYSQL_NUM, MYSQL_BOTH, o MYSQL_ASSOC, esto le dice a la funcion como quieres que te regrese el resultado, si como un array con indices numericos, array con indices asociativos, o ambos.
Asi que llamar a mysql_fetch_assoc( $result ), es lo mismo a llamar mysql_fetch_array( $result, MYSQL_ASSOC ), porque ambas te regresa un array asociativo.