If only given a schema (table header, with primary key indicated), how do I find functional dependencies?

My problem is that functional dependencies are determined in terms of the data stored in the relevant table, and so you could not determine all, but only some functional dependencies by looking at the schema only?

Consider this example:

enter image description here

How do I go about finding the applicable functional dependencies?

1 Answer 1


You can't tell the functional dependencies just from the schema.

If you knew that the schema was in third normal form (3NF) or higher and you knew that there are no other candidate keys other than the primary key, then you would know that every non-key attribute was fully functionally dependent on the primary key.

Except for this particular situation, there is nothing about a schema that conveys functional dependency. The purpose of a schema is to convey table structure, not functional dependencies.

  • We still know that (bday, firstname, lastname) -> email and (bday, firstname, lastname) -> street_no (and all other trivial and derived dependencies), correct? It doesn't matter that we don't know if there are other candidate keys. We still know one key. Feb 13, 2019 at 21:13
  • @ypercubeᵀᴹ It's fair to assume that, at least in a very formal way, if you have a key you can say that non-key elements are determined by that key. On the other hand, semantically speaking you don't know if the non key attributes are truly functionally dependent on the key. I'm thinking of a husband and wife who share an email address. If you know a bday, firstname, lastname you will presumably find an email (if it's mandatory). Still, wouldn't you want to move email out into its own entity and implement a m:n intersection to avoid potential data change anomalies?
    – Joel Brown
    Feb 14, 2019 at 0:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.