我有以下数据库用于健身俱乐部日历和预订系统。我得到了与omc_date,omc_week等相关的omc_courses详细信息。
现在我还要显示每个课程的预订总数。
我认为有两种方法可以做到,我想知道你的意见哪种方式更好,或者有更好的方法可以做到。
我的方法之一。
每当会员预订或取消预订时,在omc_courses.booked中添加或删除一个。
我的方法二。
按course_id计算omc_bookings,groups_by course_id并将此数字添加到omc_courses.booked。
提前致谢。
CREATE TABLE IF NOT EXISTS `omc_bookings` (
`booking_id` int(11) NOT NULL AUTO_INCREMENT,
`customer_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`date_enroll` date NOT NULL,
PRIMARY KEY (`booking_id`)
) .... ;
CREATE TABLE IF NOT EXISTS `omc_courses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_id` int(10) DEFAULT NULL,
`time` time NOT NULL,
`course_name` varchar(255) DEFAULT NULL,
`trainer_id` int(11) DEFAULT NULL,
`desc` varchar(255) DEFAULT NULL,
`capacity` int(11) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`order` int(11) DEFAULT NULL,
`booked` int(5) DEFAULT NULL,
`type` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ..... ;
there are more like omc_date, omc_week etc.
答案 0 :(得分:0)
我会做两个,因为它允许一个人作为另一个的验证 - 如果两个不匹配那么你在某个地方有一个bug。但如果你只有一个,你可能永远都不会发现这个错误。
答案 1 :(得分:0)
我会使用计数 - 为什么存储可以如此简单计算的值? (并且使用存储的值,您将面临危险,忘记在任何地方增加/减少您的数字,以便存储的数字根本不正确)
答案 2 :(得分:0)
我不会将数据存储在我可以通过查询获得的数据库中,除非在非常具体的情况下。在您的情况下,您无需在任何地方存储预订号码。只需在需要时运行COUNT查询。
答案 3 :(得分:0)
如果您可以在查询中获取信息,那么不要将其作为另一个表中的值添加,这会使您的数据库结构成为真正的关系数据库。
您当前的设置很好,您可以在这里找到课程表和预订表。因此,只需使用COUNT
子句中的课程ID和时间进行WHERE
查询即可过滤。
答案 4 :(得分:0)
自己回答:你是否需要数据库中的信息,永久性地,数据库运行的每一秒(然后将其存储在数据库中),或者只在一(或两个)特定情况下需要它(然后执行依靠你的结果)?