事件票务系统的数据库架构

时间:2015-05-19 19:18:30

标签: php mysql database

我正在试图找到一种为事件构建数据库的好方法。我有一个客户端,其中包含客户名称和促销代码列表。列表中的客户可以转到目标网页,填写促销代码并从他们想要参加的下拉字段中选择一个事件。他目前有4个活动准备好了。

在数据库中,我应该创建4个表,一个用于客户的每个事件,或者将客户与事件表分开(即...客户表和4个事件表)。未来可能会有更多事件,因此首选可扩展选项。

此外,每个客户只能大声最多4张票,他们只能使用促销代码一次。

谢谢!

1 个答案:

答案 0 :(得分:2)

Jay是正确的,一个完整的答案会很长,但我会提供一些启动指针,因为它听起来像是你对数据库架构很陌生。

作为一般原则,您永远不应构建涉及在运行时添加/删除表的架构。您在客户和事件之间寻找的关系是多对多的,在MySQL中会使用联结表。示例模式如下所示:

  • 客户
    • id(主键)
    • 电子邮件,姓名等
  • 事件
    • id(主键)
    • 姓名,时间等
    • id(主键)
    • customer_id(index)
    • event_id(index)
    • date_purchased等。

规则如"每个客户只允许4张票"应该在代码级别而不是模式级别实现,因为它可能会发生变化,并且您的架构应该足够灵活以适应该更改,因为它可能会在customers表中为四个票证提供四列。

获取客户ID 1参加的活动:

SELECT DISTINCT events.*
FROM tickets
LEFT JOIN events ON tickets.event_id = events.id
WHERE tickets.customer_id = 1

让客户参加活动ID 1:

SELECT DISTINCT customers.*
FROM tickets
LEFT JOIN customers ON tickets.customer_id = customers.id
WHERE tickets.event_id = 1

联结表的一种常见格式是组合两个表名,如events_customers中所示,但在这种情况下调用它tickets更有意义,因为您可能包含有关该票证的其他信息在那张桌子上购买。