我正在设计一个数据库来预订俱乐部的运动场,可以像羽毛球场,乒乓球和每个运动设施预订1小时,一些俱乐部可以预订至少2小时,它会有所不同。每个俱乐部在同一场比赛中确实有超过1个球场。俱乐部的预订费用每天都有所不同,并且在一天之内也取决于时间,例如:星期天早上从早上5点到早上9点,费用是150,而从早上9点到下午5点,下午100点和下午5点到下午12点,200点。星期一早上的收费可能是早上5点到早上9点200点和早上9点到12点,可能是150等...
我正在设计一个系统,以便在查询数据库时,我应该能够在优化的时间内找到数据,以便跟踪查询过滤器。
我为它设计了以下表格。
{
create database test;
use test;
create table city(
city_id bigint(20) not null auto_increment,
city_name varchar(128) not null unique key,
primary key(city_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table club(
club_id bigint(20) NOT NULL AUTO_INCREMENT,
club_name varchar(512) not null,
city_id bigint(20) not null ,
city_name varchar(128) not null,
address varchar(1024) not null,
postal_code varchar(12) not null,
description text,
primary key(club_id),
foreign key city_id references city(city_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table game(
game_id int not null auto_increment,
game_name varchar(64) not null,
game_description text,
primary key(game_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table club_game(
club_game_id bigint(20) not null auto_increment,
club_id bigint(20) not null,
game_id int not null ,
primary key(club_game_id),
foreign key (club_id) references club(club_id),
foreign key (game_id) references game(game_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table club_game_offer(
club_game_offer_id bigint(20) not null auto_increment,
club_id bigint(20) not null,
game_id int,
offer_in_percentage double not null,
offer_start_date timestamp,
offer_end_date timestamp,
primary key(club_game_fee_id),
foreign key (club_id) references club(club_id),
foreign key (game_id) references game(game_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table club_game_schedule(
club_game_schedule_id bigint(20) not null auto_increment,
club_id bigint(20) not null,
game_id int not null,
start_time timestamp not null,
end_time timestamp not null,
fee double not null,
day varchar(128),
game_court_count int not null,
primary key(club_game_schedule_id),
foreign key (club_id) references club(club_id),
foreign key (game_id) references game(game_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
create table booking(
booking_id bigint(20) not null auto_increment,
club_game_schedule_id bigint(20) not null,
date_of_booking date not null,
offer_id bigint(20) not null,
amount_paid double not null,
primary key(booking_id),
foreign key (offer_id) references club_game_offer(club_game_offer_id),
foreign key (club_game_schedule_id) references club_game_schedule(club_game_schedule_id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
}
本设计中的问题是我必须在club_game_schedule表中为每小时输入一次。除了检查法院的游戏可用性之外,我必须检查该位置的预订表中的条目号,然后根据game_court_count的值来决定。
任何人都可以建议更好的设计。