In database theory, a join dependency is a constraint on the set of legal relations over a database scheme. A table
T
T
T
T
The join dependency plays an important role in the fifth normal form (5NF), also known as project-join normal form, because it can be proven that if a scheme
R
R1
Rn
R
R
*(R1,R2,\ldots,Rn)
Another way to describe a join dependency is to say that the relationships in the join dependency are independent of each other.
Unlike in the case of functional dependencies, there is no sound and complete axiomatization for join dependencies,[1] though axiomatization exist for more expressive dependency languages such as full typed dependencies.[2] However, implication of join dependencies is decidable.
Let
R
R1,R2,\ldots,Rn
R
The relation
r(R)
*(R1,R2,\ldots,Rn)
n | |
\bowtie | |
i=1 |
\Pi | |
Ri |
(r)=r.
A join dependency is trivial if one of the
Ri
R
2-ary join dependencies are called multivalued dependency as a historical artifact of the fact that they were studied before the general case. More specifically if U is a set of attributes and R a relation over it, then R satisfies
X\twoheadrightarrowY
*(X\cupY,X\cup(U-Y)).
Given a pizza-chain that models purchases in table Order = .The following relations can be derived:
Since the relationships are independent there is a join dependency as follows: *((order-number, customer-name), (order-number, pizza-name), (order-number, courier)).
If each customer has his own courier however, there can be a join-dependency like this: *((order-number, customer-name), (order-number, pizza-name), (order-number, courier), (customer-name, courier)), but *((order-number, customer-name, courier), (order-number, pizza-name)) would be valid as well. This makes it obvious that just having a join dependency is not enough to normalize a database scheme.