Re: 4NF and 5NF

From: Neo <neo55592_at_hotmail.com>
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
______p6
Received on Wed Jan 05 2005 - 07:03:33 CET

Original text of this message