Gym Appointments数据库架构

时间:2016-01-07 15:00:11

标签: php database symfony doctrine

我正在开发PHP / Symfony2 / Doctrine 2中的健身房管理应用程序。 我正在开发约会模块。 约会不能是具有特定event_date的单行(即将发生的日期),因为它每周持续几天,持续数周或数月。 如何通过以日历格式显示约会来设计实体以保持约会的约束,在某个月的每一天我都可以查看当天的约会?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

Appointment实体应该包含ID,描述符,start_date,end_date等信息。需要注意的重要一点是“开始”和“结束”,它会为您的Appointment提供跨越多天/月的灵活性。

在日历中,如果要显示其开始日期和结束日期介于1月1日到1月7日之间的事件,则它将是以下查询构建器对象:

// In EntityRepository for Appointments

$this->getQueryBuilder('a')
     ->where('a.startDate BETWEEN :start AND :end')
     ->andWhere('a.endDate BETWEEN :start AND :end')
     ->setParameters([
        "start" => '2016-01-01',
        "end"   => '2016-01-07'
     ])
     ->getQuery()
     ->getResult();

如果您只想要一天的事件并在同一天结束,那么您需要做的就是相应地调整参数。

答案 1 :(得分:0)

好的,这是一个好的开始。我认为它填补了你设定的所有限制。我使用了一些复合键,但这是为了简化表格。

由于您设置的约束:“因为它持续数周或数月的每周几天”是错误的查看方式。您必须将约会的每个条目存储在表中(如果您绝对想要它,可以使用xml文件,但最好的方法是使用您正在考虑的mysql)

在这里,您将每个日期存储在C_date表中,然后在Appointment_date中引用它们。这是预约时间。我会mabye已删除C_date并且insted将信息添加到appointment_date。

create table User(
    user varchar(32) NOT NULL PRIMARY KEY
); 


create table C_date ( 
    c_date DATE NOT NULL PRIMARY KEY 
);

create table Appointment(
    user varchar(32) NOT NULL, 
    trainer varchar(32) NOT NULL,
    CONSTRAINT FOREIGN KEY(user) REFERENCES User(user), 
    CONSTRAINT FOREIGN KEY(trainer) REFERENCES User(user),
    CONSTRAINT id PRIMARY KEY(user, trainer)
); 


create table Appointment_date( 
    user varchar(32) NOT NULL, 
    trainer varchar(32) NOT NULL,
    app_date DATE NOT NULL COMMENT "The time and date for the appointment",
    time TIME NOT NULL, 
    CONSTRAINT FOREIGN KEY(user, trainer) REFERENCES Appointment(user, trainer),
    CONSTRAINT FOREIGN KEY(app_date) REFERENCES C_date(c_date), 
    CONSTRAINT id PRIMARY KEY(user, trainer, app_date) 

);

enter image description here