Bare at se på sko, har du én enhed:sko. Den har to direkte egenskaber:størrelse og farve. Domænet for hver af disse attributter skal være strengt defineret, hvilket angiver opslagstabeller for dem. Der er to indirekte attributter, pris og mængde, men disse er attributter mere for hver kombination af størrelse/farve end for en sko selv.
Dette foreslår én enhedstabel:Sko; to opslagstabeller:Størrelser og farver; og en tre-vejs skæringstabel:ShoeStyles:
create table ShoeStyles(
ShoeID int not null,
SizeID smallint not null,
ColorID char( 1 ) not null,
Price currency,
Qty int not null default 0,
constraint FK_ShoeStyles_Shoe foreign key references Shoes( ID ),
constraint FK_ShoeStyles_Size foreign key references Sizes( ID ),
constraint FK_ShoeStyles_Color foreign key references Colors( ID ),
constraint PK_ShoeStyles primary key( ShoeID, SizeID, ColorID )
);
Således vil f.eks. kombinationen ('Penny Loafer', '10 1/2', 'Tan') have en bestemt pris og mængde på hånden. Størrelsen 11 Tan vil have sin egen pris og mængde, ligesom 10 1/2 Burgandy.
Jeg vil anbefale en visning, der slutter sig til tabellerne og præsenterer resultaterne i en mere brugbar form som vist ovenfor i stedet for f.eks. (15, 4, 3, 45.00, 175). Triggere på visningen kunne tillade al adgang for applikationen gennem visningen, så appen forbliver agnostisk over for det fysiske layout af dataene. Sådanne visninger er et ekstremt kraftfuldt værktøj, som bidrager væsentligt til robustheden og vedligeholdelsen af de underliggende data og af selve appen, men som er sørgeligt underudnyttet.