Today you can define so-called user-defined types, a poor replacement for real domains.
One thing you cannot specify for a user-defined type is the collation. This can be quite essential. In a database you typically want columns for things like customer and product names to be case-insensitive to faciliate searching. But at the same time you may have columns for codes or various identities where you either only want to accept uppercase, or where case actually is significant. For instance, if you have columns for currency code, you always want USD, EUR, GBP etc appear as such, never as "usd", "eur". While this can be enforced with constraints or rules, it would be natural to use a CS collation for all these columns, and then rely on the FK.