Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I thought I understood Normal Forms

I'm studying a diploma of web development online, and I've just gotten into database design and development. I thought I understood Normal Forms, but I just reached a question that stopped me in my tracks.

Look at the following list of attributes for the customer entity:

Customer(cus_ID, name, address, mobile_phone)

Why is this entity not in 3NF?

As far as I can tell, it is in 3NF. All the attributes wouldn't be there if it wasn't for the customer, the name, address and mobile data sets require the customer to exist.

Have I just got the entire concept of 3NF wrong?

like image 683
Slappy Avatar asked Feb 10 '23 17:02

Slappy


2 Answers

It looks odd at first, but you have not defined what goes into address or even the id. Some possibilities for this to violate 3NF that comes to mind are (in addition to other comments and answers that you may get here):

  1. If the id is the mobile phone number itself.

  2. If the customer has more than one mobile phone or more than one address that the business is interested in capturing Source of this point.

  3. If the address would include some communication methods including a mobile phone.

  4. If the mobile phone number can be circulated across users somehow. For example the number may not have to be unique across countries/carriers (I am not a Telco expert).

  5. If the address contains a country, city and state information and mobile phone number is allowed to contain Area Code as part of it (which would depend on country, city and state information).

Edit: I had originally included this point but @philipxy suggested otherwise in the note below: "If any of the attributes are found in other parts of the database not shown here."

like image 81
NoChance Avatar answered Feb 23 '23 10:02

NoChance


Multiple customers could have the same address.

like image 21
user3344003 Avatar answered Feb 23 '23 10:02

user3344003