gpt4 book ai didi

MySQL架构: null columns vs.加入

转载 作者:搜寻专家 更新时间:2023-10-30 20:46:36 24 4
gpt4 key购买 nike

我有一个应用程序,其中有重复事件。因此,一个事件可以按天重复,“每 n 天”,按周重复,“每 n 周的周一/周二/周三等”,按月重复,“每 n 个月的 1 号、2 号、3 号等”。

从表格设计的角度来看,处理此问题的最佳方法是什么?我可以想到两种方法,但我不确定哪种方法更好。

1) 以上 5 列,1 列用于日,2 列用于周和月。无论哪个未被使用都将为空。在我的应用程序中,我可以看到空值并选择忽略它们。

2) 有第二个表,比如 events_dateinfo 或其他东西,我会加入查询。

似乎选项 2 可能更“规范化”,但不是这样,但是对于这样一个简单的事情,它是否让您觉得矫枉过正?另外,如果我选择选项 2,有没有办法将行转换为列 - 即,为特定事件选择 2 周属性并将它们视为列?

最佳答案

如果我理解正确的事件可以有不止 1 个时间表(这就是为什么你想要“将行转换为列”)。

在这种情况下,您需要的不是 2 个表,而是 3 个表;第三个必须是联结表。如果您将来需要此方案,您可以轻松添加新的时间表。所以,像这样:

table events (event_id, event_name, description)
table schedules (sch_id, schedule)
table event_schedule (event_id, sch_id)

据我所知,MySQL 中没有 PIVOT 的可能性,但是您可以在 SELECT 中使用 GROUP_CONCAT() 函数;每个事件将排成一行,一个事件的所有时间表将在一列中。

SELECT e.event_name AS Event, GROUP_CONCAT( s.schedule SEPARATOR ', ') AS Schedule
FROM events e
(LEFT) JOIN event_schedule es
ON e.event_id = es.event_id
JOIN schedules s
ON s.sch_id = es. sch_id
GROUP BY e.event_name;

关于MySQL架构: null columns vs.加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com