Re: 4NF and 5NF
Date: 4 Jan 2005 22:03:33 -0800
Message-ID: <1104905013.281000.256940_at_c13g2000cwb.googlegroups.com>
> department job part
> =============
> d1 j1 p1
> d1 j1 p2
> d1 j2 p1
> d1 j2 p2
> d2 j3 p2
> d2 j3 p4
> d2 j4 p2
> d2 j4 p4
> d2 j5 p2
> d2 j5 p4
> d3 j2 p5
> d3 j2 p6
>
> The solution is to split this table into two tables, one with
> (department, projects) in it and one with (department, parts) in it.
Below script shows an similar solution using an eXperimental Db:
// Create departments
CREATE *dept.item ~in = dir; CREATE *d1.cls = dept; CREATE *d2.cls = dept; CREATE *d3.cls = dept;
// Create projects
CREATE *project.item ~in = dir; CREATE *j1.cls = project; CREATE *j2.cls = project; CREATE *j3.cls = project; CREATE *j4.cls = project; CREATE *j5.cls = project; CREATE *j6.cls = project;
// Create products
CREATE *product.item ~in = dir; CREATE *p1.cls = product; CREATE *p2.cls = product; CREATE *p3.cls = product; CREATE *p4.cls = product; CREATE *p5.cls = product; CREATE *p6.cls = product;
// Create dept projects
CREATE d1.project = j1;
CREATE d1.project = j2;
CREATE d2.project = j3; CREATE d2.project = j4; CREATE d2.project = j5;
CREATE d3.project = j2;
// Create dept project products
CREATE (d1.project=j1).product = p1;
CREATE (d1.project=j1).product = p2;
CREATE (d1.project=j2).product = p1;
CREATE (d1.project=j2).product = p2;
CREATE (d2.project=j3).product = p2;
CREATE (d2.project=j3).product = p4;
CREATE (d2.project=j4).product = p2;
CREATE (d2.project=j4).product = p4;
CREATE (d2.project=j5).product = p2;
CREATE (d2.project=j5).product = p4;
CREATE (d3.project=j2).product = p5;
CREATE (d3.project=j2).product = p6;
// Find all products used by dept1's project2
// Finds p1 and p2.
SELECT (d1.project=j2).product=%;
// One view in tree appears as follows:
dept
__d1 ____j1 ______p1 ______p2 ____j2 ______p1 ______p2 __d2 ____j3 ______p2 ______p4 ____j4 ______p2 ______p4 ____j5 ______p2 ______p4 __d3 ____j2 ______p5 ______p6Received on Wed Jan 05 2005 - 07:03:33 CET