体育俱乐部预订系统数据库设计

时间:2015-04-24 19:02:12

标签: mysql database database-design oracle11g

我正在设计一个数据库来预订俱乐部的运动场,可以像羽毛球场,乒乓球和每个运动设施预订1小时,一些俱乐部可以预订至少2小时,它会有所不同。每个俱乐部在同一场比赛中确实有超过1个球场。俱乐部的预订费用每天都有所不同,并且在一天之内也取决于时间,例如:星期天早上从早上5点到早上9点,费用是150,而从早上9点到下午5点,下午100点和下午5点到下午12点,200点。星期一早上的收费可能是早上5点到早上9点200点和早上9点到12点,可能是150等...

我正在设计一个系统,以便在查询数据库时,我应该能够在优化的时间内找到数据,以便跟踪查询过滤器。

  1. 我应该可以在没有任何问题的情况下更改游戏时间表,例如如果某个游戏在某一天特定日期预订了150,我应该能够进行更改,以便我可以增加费用。
  2. 在特定时间,我应该能够知道是否有任何法院可以预订
  3. 我为它设计了以下表格。

    {
      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的值来决定。

    任何人都可以建议更好的设计。

0 个答案:

没有答案