Can a table be in 3NF with no primary keys?

我的未来我决定 提交于 2020-01-07 08:09:23

问题


1. A table is automatically in 3NF if one of the following holds:
(i) If a relation consists of two attributes.
(ii) If 2NF table consists of only one non key attribute.

2. If X → A is a dependency, then the table is in 3NF, if one of the following conditions exists:
(i) If X is a superkey
(ii) If A is a part of superkey

I got the above claims from this site.

I think that in both the claims, 2nd subpoint is wrong.

The first one says that a table in 2NF will be in 3NF if we have all non-key attributes and the table is in 2NF.

Consider the example R(A,B,C) with dependency A->B.

Here we have no candidate key, so all attributes are non-prime attributes and the relation is not in 3NF but in 2NF.

The second one says that for a dependency of the form X->A if A is part of a super key then it's in 3NF.

Consider the example R(A,B,C) with dependencies A->B, B->C . Here a CK is {A}. Now one of the super keys can be AC and the RHS of FD B->C contains part of AC but still the above relation R is not in 3NF.

I think it should be A should be part of a candidate key and not super key.

Am I correct?

Also can a particular relation be in 1NF, 3NF or 2NF if there are no functional dependencies present?


回答1:


A CK (candidate key) is a superkey that contains no smaller superkey. A superkey is a unique set of attributes. A relation is a set of tuples. So every relation has a superkey, the set of all attributes. So it has at least one CK.

A FD (functional dependency) holds by definition when each value of a determining set of attributes appears always with the same value for its determined set. Every relation value or variable satisfies "trivial" FDs, the ones where the determined set is a subset of the determining set. Every set of attributes determines {}. So every relation satisfies at least one FD. However, the correct forms of definitions typically specifically talk about non-trivial FDs. Don't use the web, use textbooks, of which dozens are free online, although not all are well-written. Many textbooks also forget about FDs where the determinant and/or determined set is {}.

Your first point is not a correct definition of 3NF. Since its phrased "if..." instead of "if and only if", maybe it's not trying to be a definition. However, it is still wrong. (i) is wrong because a relation with two attributes is not in 3NF if one is a CK and the other has the same value in every tuple, ie it is determined by {}.

Similarly the second point is not a proper definition and also even if you treat it as only a consequence of 3NF (if...) it's false. It would be a definition if it used if and only if and talked about an FD that holds and it said it was a non-trivial FD and some other things were fixed.

Since those are neither correct definitions nor correct implications, there's a unlimited number of ways to disprove them. Read a book (or my posts) and get correct definitions.


Some comments re your reasoning:

First one says that, a table in 2NF will be in 3NF if we have all non key attributes and table is in 2NF.

I have no idea why you think that.

Here we have no candidate key

There's always one or more CKs. You need to read a definition of CK. There are also non-brute-force algorithms for finding them all.

Second one says that, for the dependency of form X->A if A is part of super key then it's in 3NF.

I have no idea why you think that.

A should be part of candidate key and not super key.

A correct defintion like the second point does normally say "... or (ii) A-X is part of a CK". But I can't follow your reasoning.

Sound reasoning involves starting from assumptions and writing new statements that we know are true because we applied a definition, a previously proved statement (theorem) or a sound rule of reasoning, eg from 'A implies B' and 'A' we can derive 'B'. You seem to need to read about how to do that.



来源:https://stackoverflow.com/questions/47632560/can-a-table-be-in-3nf-with-no-primary-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!