As there are only 8 blood types
O+
O-
A+
A-
B+
B-
AB+
AB-
I think it could be overkill to normalize the database to the extent you have suggested, and could just store the Blood Type as a VarChar. But you imply that you may want to store remarks against each one (e.g. the estimated percentage of population with each type, or a "ranking" on rarity) and of course you may want to populate a dropdown with the valid entries. So...
Personally I would have a
BloodTypes
table with the 8 rows listed above, and store the BloodTypeID against a person (donor).
I (personally) wouldn't bother to take it to the extra level of separating out the blood groups as I don't think it's necessary, efficient or conducive to ease of use and understanding. Purists may think differently.