我正在试图找到一种为事件构建数据库的好方法。我有一个客户端,其中包含客户名称和促销代码列表。列表中的客户可以转到目标网页,填写促销代码并从他们想要参加的下拉字段中选择一个事件。他目前有4个活动准备好了。
在数据库中,我应该创建4个表,一个用于客户的每个事件,或者将客户与事件表分开(即...客户表和4个事件表)。未来可能会有更多事件,因此首选可扩展选项。
此外,每个客户只能大声最多4张票,他们只能使用促销代码一次。
谢谢!
答案 0 :(得分:2)
作为一般原则,您永远不应构建涉及在运行时添加/删除表的架构。您在客户和事件之间寻找的关系是多对多的,在MySQL中会使用联结表。示例模式如下所示:
规则如"每个客户只允许4张票"应该在代码级别而不是模式级别实现,因为它可能会发生变化,并且您的架构应该足够灵活以适应该更改,因为它可能会在customers表中为四个票证提供四列。/ p>
获取客户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
更有意义,因为您可能包含有关该票证的其他信息在那张桌子上购买。