,你需要包括让你控制的排序顺序表。您需要一个控制出租车的排序顺序。
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外键。
以这种方式提高数据完整性与规范化无关。 (许多设计决定与标准化无关。)