In a lot of web applications, like a storefront, the user's name, email, address and phone are typically persisted. A firs draft of an accounts relation would therefore have (these are attribute not SQL types)
{userid, email, name, address, phone}
{userid} and {email} are obvisous candidate keys, and address seems functionally dependent on phone, so {phone} -> {address}. I'm assuming we persist just one phone number.
So to get accounts into BCNF (and 5NF), I would decompose it into 'accounts' and 'address_info', where accounts is {userid, email, name, phone} and address_info is {phone, address}.
But is address really functionally dependenct on phone number in the 'real world' of both cell phones and landlines? A storefront application would probably have a billing address and multiple shipping address. But I'm ignoring that for now.
A storefront isn't a phone company. It doesn't care if a phone is shared by users living at the same address. It doesn't care, if the phone is shared, whether it is a shared cell (however unlikely that might be) or a shared landline. The application simply wants to avoid an update anomaly when a member's address changes.
So I'm sort of confused as to whether the FD {phone} -> {address} is really worth worrying about. It seems like it is.
thanks,
kurt