Functional dependencies (hopefully simple question) Consider the simple problem of keeping track of Students:

STUDENT(
   StudentNumber,
   StudentName,
   Dorm,
   RoomType,
   DormCost,
   Club,
   ClubCost,
   Sibiling,
   Nickname
)


Would StudentName functionally determine StudentNumber? Is there not enough information? Is there a rule of thumb about this kind of problem?
No, the name of a student doesn't determine his or her identity and hence the student number.

There can be more than one person with the same name, but they still would have a different student number.

This is the reason why databases usually have artificial numeric identifiers like that, and the reason why you have customer IDs, social security numbers and the like.

When choosing a candidate for a primary key, use the following rules of thumb:


Does the attribute uniquely identify the row? Names will not.
Can the attribute ever be changed? Names can be changed, e.g. when you marry.

Mutable attributes are no good choice for primary keys in a database, because they make referential integrity via foreign keys a mess.


In most practical cases, the primary key of a table will be an artificially generated number.