I've been given the relation and functional dependencies
And am looking to justify what form it is in, and then to transform it into BCNF.
Now I proposed that it was in 3NF, as the second FD is a transitive dependency with a key attribute as its RHS. This second FD also violates BCNF, because C is not a superkey for R.
However - I am unsure how to go about decomposing into BCNF.
If I decompose into;
This voids the first FD, and effectively makes (A,C) the new key - so it doesn't seem correct! Can this relation be converted to BCNF?
Can this relation be converted to BCNF?
Every relation can be converted in BCNF, by applying the “analysis algorithm”, that can be found on any good book on databases.
Note that the relation has two keys, AB and AC, so that all attributes are primes (and for this reason the relation is automatically in 3NF).
You must start by finding all the dependencies that violates the BCNF, in this case only C → B, since C is not a superkey.
Then you decompose the relation in two relations, one contaning C and all the attributes determinates by it (in this case only B), and the other one including all the other attributes plus C.
So the decomposition is actually:
R1(B, C), with key C, with the only (non-trivial) dependency C → B
R2(A, C), with key AC, without (non-trivial) dependencies
Then the decomposition must be repeated for every relation that has some dependency that violates the BCNF, but in this case there is no such relation, because both R1 and R2 are in BCNF.
Finally note that the decomposition does not preserve the dependencies. In fact the dependency AB → C is not preserved in the decomposition.
Related
I've been trying to figure out the difference between the 2nd and 3rd Normal Form using this example. The definitions didn't do the trick for me...
These are the functional dependencies:
A is the candidate key. (A --> A,B,C,D)
FDs:
A --> CD
AC --> D
CD --> B
D --> B
My idea: it's in 1st and 2nd, but not in 3rd Normal form because A, the candidate key, doesn't consist of two or more columns. But B is transitively dependent on D. So it's not in 3rd.
Ist that correct? Especially the argument that A consits of less than two columns?
First, let us see what 2NF and 3NF are. From the context of the question it is clear that 1NF is understood, so I will refer to it. If it is unclear as well, let me know, I will clarify that as well.
2NF: R is in second normal form, if and only if it is in first normal form and no non-prime attribute is dependent on any proper subset of any candidate key of the relation.
non-prime attributes are attributes which are not part of any candidate keys. So, if a non-prime attribute can be determined by a functional dependency which holds a non-whole subset of a candidate key, then the relation is not in 2NF.
For example, let's consider an invoices(number, year, age) table where (number, year) is a candidate key. age can be determined by the year alone, so the table is not in 2NF.
In your case, since the key is one dimensional, assuming it is in 1NF, we can say it is in 2NF as well. However, it is in 3NF if and only if it is in 2NF and every non-prime attribute is non transitively dependent on every key.
In your case, A is the key, but since
A -> D -> B
B is transitively dependent on A, so your table is not in 3NF. To achieve 3NF, you will need to create another table, which will be in relation with this one via D and will hold B. Possible solution:
T1(A, C, D)
T2(D, B)
Note, that AC -> D and A -> CD are trivial, since A is the candidate key and the candidate key determines everything else. If that's not the case, you will need to take a look at 1NF as well.
(Primary keys in bold.)
In one of my lectures, we took the following schema
R(a, b, c, d, e)
a -> b
e -> b
c, d -> a
c, d -> b
c, d -> e
and took it to 2NF as follows:
R1(c, d, a, e)
c, d - > a and e
R2(a, e, b) (Not in 2NF)
a -> b
e -> b
Naturally, if I want to take my schema to 3NF this causes a problem, since b cannot be partially determined by a and e. What I want to do is simply create separate relations as follows:
R3(e, b)
e -> b
and
R4(a, b)
a -> b
In this instance b is fully functionally dependent the primary key, which brings me to 2NF and the transative dependencies are eleminated for relations 3 and 4, which are in 3NF. However I think it could be argued that this solution is not satisfactory as the value of b could potentially be different for each relation and as there could be anomalies when it is inevitably used as a foriegn key. Any thoughts on this?
We seek decompositions "preserving" FDs and (this is usually not stated explicitly) not introducing other constraints. An FD is preserved when it holds in some component. The idea is that we can check that an FD holds in recompositions by just checking that it holds in the components, rather than having to join then check. We also prefer an FD and its attibutes to be in just one component, or we would need to add a constraint that where the determinant values agree the dependent values agree. There's always a 3NF schema preserving all FDs without introducing other constraints. When an FD cannot be preserved to get to BCNF, there is instead an "equality dependency" introduced that two components must have the same projection on the FD attributes.
We don't normalize to a given NF by moving through lower NFs. That can preclude good higher NF designs arising. We use an algorithm for a given NF.
When some FDs (functional dependencies) hold, others do, per Armstrong's axioms. We must look among all FDs for NF violators and FDs to preserve, not just some given ones that form a cover. Algorithms also take that into account.
See this recent answer.
PS PKs (primary keys) don't matter, CKs (candidate keys) do. There can be more than one and they can be composite. A PK is just some CK you decided to call PK. So highlighting attributes of a PK is in general inadequate. Just list the CKs.
PPS An (update) anomaly is a certain thing, and it's not what you are using "anomaly" for.
I have R(A,B,C,D) with AB
primary key and AD --> C
I think it is in 2nf becouse you cannot determine C with a subset of AB
from wiki "a table is in 2NF if it is in 1NF and no non-prime attribute is dependent on any proper subset of any candidate key of the table"
but many people say it is in 1nf because the definition
"in 2NF if it is in 1NF and every non-prime attribute of the table is dependent on the whole of every candidate key"
so AD is not the whole primary key but just a part with another attribute not prime
please if you can put also some refereces different of wikipedia so I can demostrate my thesis if it is really correct
You state as a fact that AB is the primary key for the given relation R. For that to be true there have to be at least one more functional dependency other than AD->C .
In order to explain 2NF, I assume that the missing FD is say B->D. So we have a relation R(A,B,C,D) with FD's :
AD->C
B->D
Then our primary key is AB. Now in simple words 2NF deals with partial dependency, that is, when an attribute depends on part of the primary key. (So if we have a primary key that's just one attribute than the relation R is already in 2NF!)
Formally:
Given a functional dependency X->A of a relation R where:
X is a set of attributes of R
A is a non-prime attribute not in X
then to be in 2NF, X should not be a proper subset of any key.
Coming back to our example. Primary key is AB. So primary attributes are A and B. Non primary attributes are C and D.
Let's consider the first FD, AD->C
Here C is a non primary attribute. To not violate 2NF condition, AD should not be a proper subset of the primary key AB. AD is not a proper subset of AB, so it does not violate 2NF condition.
Let's see the next FD, B->D
Here D is a non primary attribute and B is a proper subset of primary key AB and therefore it violates 2NF condition.
Hence the relation R is not in second normal form.
On the other hand if the set of FD's for R would have been:
AD->C
AB->D
Our primary key is still AB but now the relation R is in second normal form.
Yesterday i was reading Normalization and found that
A relation is in 2NF if it is in 1NF and doesn't contain partial and functional dependency.
A relation is in third normal form, if it is in 2NF and doesn't contain any Transitive dependency.
Now my question is that what is difference b/w functional and Transitive dependency
Transitive dependency is expressing the dependency of A on C when A depends on B and B depends on C.
A functional dependency is an association between two attributes of the same relational database table. One of the attributes is called the determinant and the other attribute is called the determined. For each value of the determinant there is associated one and only one value of the determined.
If A is the determinant and B is the determined then we say that A functionally determines B and graphically represent this as A -> B. The symbols A à B· can also be expressed as B is functionally determined by A.
Functional Dependency
Functional dependency can be defined as relationship that exits between attributes in relation. Functional dependencies are used to create relation in Boyce Codd Normal Form abbreviated as BCNF. If C and D are the attributes of relation R and attribute C functionally determines attributes D then the functional dependency between both attribute can be expressed as C->D. i.e C->D means whenever two tuple in relation R agree with on all the attributes of X, they must also agree on all the attributes of Y.
i.e C->D means whenever two tuple in R agree
Example : Below the person schema
person(national_id, name, address);
Here national_id functionally determines the person_name. So functional dependency is national_id -> name;
Transitive Dependency
Transitive dependency is one kind of functional dependency in which a non prime attribute is determined by another non prime attribute. Suppose C and D are the non prime attributes and A is the prime attribute of relation R .
If A functional determines C and C functionally determines D
A->C
C->D
Then the transitive functional dependency between both attribute can be expressed as
A->D
Example : Below the student schema in which PostCode and City are non prime attribute.
student(#Id, Name, Age, PostCode, City)
Here , Id functionally determines PostCode and PostCode functionally determines the City attribute. So transitive functional dependency is
Id->City
You can refer wiki:
Functional dependency
In relational database theory, a functional dependency is a constraint
between two sets of attributes in a relation from a database.
Transitive dependency
In Database Management System, a transitive dependency is a functional
dependency which holds by virtue of transitivity. A transitive
dependency can occur only in a relation that has three or more
attributes.
A functional dependency X->Y in a relation schema R is a transitive
dependency if there exists a set of attributes Z in R that is neither
a candidate key nor a subset of any key of R, and both X->Z and Z->Y hold.
Taken from: Fundamentals of Database Systems 6th edition - Elmasri et al;
I am trying to understand functional dependencies
Let's say we have R with {A,B,C,D,E} and FDs A->B, BC->E and ED->A.
What are the keys and is R in 3NF or BCNF?
The keys here are — ACD, BCD and ECD. Since each attribute of the relation R comes at least once in each of the keys, all the attributes in your relation R are prime attributes.
Note that if a relation has all prime attributes then it is already in 3NF.
Hence the given relation R is in 3NF.
To be in BCNF, for each functional dependency X->Y, X should be a key. We see that the very first dependency ( A->B ) violates this and hence the relation R is not in BCNF.
The keys are — ACD, BCD and ECD.
Prime attributes will be (A,B,C,D,E) because all are coming in primary key.
Note that if a relation has all prime attributes then it is already in 3NF.
Hence the given relation R is in 3NF.
To be in BCNF, for each functional dependency X->Y, X should be a superkey. We see that the very first dependency ( A->B ) violates this and hence the relation R is not in BCNF.
The candidate keys are - ACD,BCD and ECD.
Prime attributes are (A,B,C,D,E) because they are all in primary keys.
Now, first we check the relation for BCNF
For BCNF, in the FD's the left side in the attribute must be a super key and as you can notice that not any FD follows this condition
For 3NF, in the FD's there are two conditions:
1. Either the left side be a super key
2. If the first conditions fails, then the right side of the same FD must be a prime attribute.
if the relation follows these conditions, then it is in 3NF and as we can notice all the attributes are prime attributes, the following relation R is in 3NF but not in BCNF.