Само като погледнете обувките, имате едно цяло:обувки. Има два преки атрибута:размер и цвят. Домейнът на всеки от тези атрибути трябва да бъде строго дефиниран, което показва справочни таблици за тях. Има два непреки атрибута, цена и количество, но това са атрибути повече на всяка комбинация от размер/цвят, отколкото на самата обувка.
Това предполага една таблица с обекти:Обувки; две справочни таблици:размери и цветове; и една тристранна пресечна таблица: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 )
);
Така например комбинацията („Penny Loafer“, „10 1/2“, „Tan“) ще има определена цена и количество на ръка. Размерът 11 Tan ще има собствена цена и количество, както и 10 1/2 Burgandy.
Бих препоръчал изглед, който обединява таблиците и представя резултатите в по-използваема форма, както е показано по-горе, вместо, да речем, (15, 4, 3, 45.00, 175). Тригерите в изгледа могат да позволят целия достъп на приложението през изгледа, така че приложението да остане агностично по отношение на физическото оформление на данните. Такива изгледи са изключително мощен инструмент, който значително допринася за устойчивостта и поддръжката на основните данни и на самото приложение, но които се използват крайно недостатъчно.