Most general definition of a normal vector to an affine subspace of a Euclidian space I am worrying about correctly using the term normal vector in relation to an affine subspaces $F$ in an affine Euclidian space $E$ (the vector space associated to $E$ is endowed with a scalar product).
My first idea was to define it as any vector that is orthogonal to all vectors of $F$ (to all elements of the vector subspace associated to $F$).  However, once I tried to verify how the term is commonly used, it seems to be exclusively applied to hyperplanes or hypersurfaces (to subspaces of codimension $1$), and most commonly to planes or surfaces in a 3-D space.  I am sufficiently confident that it can be applied to lines in a plane.
Would it be correct to talk about "normal vectors" to a line in a 3-D space? In the context of Frenet-Serret formulas, there is a normal vector to a parametrized curve in 3-D, but it is not an arbitrary vector orthogonal to the tangent vectors, so the situation still looks a bit like codimension-1.
I suppose that zero vector cannot be called normal, even though it is orthogonal to everything, can it?
In the case that the term can be applied to subspaces or surfaces of arbitrary codimension, I would appreciate some respectable reference for such definition.
 A: In a vector space $V$ equipped with an inner product, for any vector subspace $U \subseteq V$, it makes sense to define the orthogonal complement
$$ U^\perp = \{v \in V \mid (v, u) = 0 \text{ for all } u \in U \}$$
and we always have $U \oplus U^\perp = V$ (i.e. $U^\perp$ really is a complement). If $U$ has codimension one, then $U^\perp$ is one-dimensional, and so up to scalar there is only one choice for a spanning vector, and so we really could say that if $v \in U^\perp$ is nonzero, then $v$ is "the" normal vector to the hyperplane $U$. However, if $U$ has codimension two or more, then we need more than one vector to span $U^\perp$, so I would hesitate to use the term "the" normal vector, and prefer to write something like "a" normal vector. Also, I think most people would understand that while the zero vector is orthogonal to everything, any time you say "normal vector", you are talking about a nonzero vector. But you could clarify this if you wanted.
Extending this notion to affine Euclidean spaces is straightforward, and all the same dimensionality concerns apply. Then you can apply the same reasoning to smooth surfaces: at any point, there is a tangent plane $U$, and so a "normal vector" is something in $U^\perp$.
You can also apply it to curves, however for curves embedded in $\mathbb{R}^3$, the "normal space" will be two dimensional, since the tangent space at a point along the curve is one-dimensional. So you will definitely need two vectors to span this space. If the curve is not a line (i.e. there is some curvature at the point you have chosen), you can choose one of these spanning vectors to point "inward to the curvature", and choose the other spanning vector consistently using the right-hand rule (this is what the "normal" is in the Frenet-Serret case). If the curve looks like a straight line at the point you have chosen, however, there is no local decision you can make to choose the two normal vectors, and just have to accept the fact that the "normal space" really is a vector space, and not two perpendicular vectors.
