由于您的数据未按字母顺序排序,因此您需要包含可让您控制排序顺序的表格。您需要一个来控制出租车的排序顺序。
create table cab_sort_order (
cab_type varchar(35) not null,
cab_type_sort_order integer not null,
primary key (cab_type)
);
insert into cab_sort_order values
('Toyota Etios', 1),
('Maruti Suzuki - SX4', 2),
('Airport Media', 3),
('Cab Meter Receipts', 4);
还有一个用于控制媒体选项的排序顺序。
create table media_option_sort_order (
media_option varchar(35) not null,
media_option_sort_order integer not null,
primary key (media_option)
);
insert into media_option_sort_order values
('Cab Exterior', 1),
('Sampling', 2),
('Leaflets / Flat & Sun Visor Cover', 3),
('Seat Flap & Sun Visor Cover', 4),
('Rooftop Carrier', 5),
('Raoad Show - 10 Cabs', 6),
('Boarding Pass', 1);
这两个表都在 5NF 中。
cab_media_options 的结构很简单。
create table cab_media_options (
cab_type varchar(35) not null,
media_option varchar(35) not null,
placement varchar(35) null,
price integer not null,
unit varchar(35) not null,
primary key (cab_type, media_option),
foreign key (cab_type) references cab_sort_order (cab_type),
foreign key (media_option) references media_option_sort_order (media_option)
);
insert into cab_media_options values
('Toyota Etios', 'Cab exterior', '4 doors + boot', 11000, 'Cab / Month'),
('Toyota Etios', 'Sampling', NULL, 2500, 'Cab / Month'),
('Toyota Etios', 'Leaflets / Flat & Sun Visor Cover', NULL, 2000, 'Cab / Month'),
('Maruti Suzuki - SX4', 'Cab exterior', '4 doors + boot', 12000, 'Cab / Month'),
('Maruti Suzuki - SX4', 'Sampling', NULL, 3000, 'Cab / Month'),
('Airport Media', 'Boarding Pass', 'Back Side of Pass', 600000, 'Month / All Cabs');
我不知道你所有的列是什么意思,但那个表可能也在 5NF 中。
要获取与链接图像匹配所需的数据,请将 cab_media_options 连接到控制排序顺序的两个表。
select cmo.*, cs.cab_type_sort_order, ms.media_option_sort_order
from cab_media_options cmo
inner join cab_sort_order cs
on cmo.cab_type = cs.cab_type
inner join media_option_sort_order ms
on cmo.media_option = ms.media_option
order by cs.cab_type_sort_order, ms.media_option_sort_order
您可以使用附加表来提高数据完整性。例如,您可以创建一个包含单列的出租车类型表。
Table: cab_types
cab_type
--
Toyota Etios
Maruti Suzuki - SX4
Airport Media
Cab Meter Receipts
然后在 cab_sort_order 中设置一个外键来引用 cab_types,并且(可能)将 cab_media_options 中的外键替换为引用 cab_types 的外键。
以这种方式提高数据完整性与规范化无关。(许多设计决策与规范化无关。)