我有一张桌子,我想在其中存储所选天数列表(周日至周六)但为了保持简单,我希望以1到7的整数存储。
做一些研究我找到了两种方法来正确处理这个问题"正确"。
为每一天创建布尔列..."星期一" ="错误"如果没有选择等。
我真的不喜欢这个......太多列了
另一种方法是拥有一个只包含复合键的表
例如day_event
dayID eventID
所以如果
事件1有第1天2 3
并且事件2有第2天5它会是这样的
day : event
1 : 1
2 : 1
2 : 2
3 : 1
5 : 2
然后我可以从day_event中选择* eventID = 2等等,以获取我的日期列表.... 但我真的不喜欢这样......只是为了存放几天?
对我而言,拥有一个类似于' days'的字符串列似乎更简单,更实用。喜欢" 1,2,3"和" 2,5"分别是错误的 可能是。
还有其他解决方案吗?
答案 0 :(得分:2)
您可以将其存储为SET
column,定义如下:
CREATE TABLE table_name
(
/* ... */
`column_name`SET(
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
),
/* ... */
);
一个集合就像一个位掩码,所以(例如)星期一和星期三可以同时在列值中激活。
集合限制为总共64位(即64个值) - 在您的情况下不是问题。
在你的情况下,SET类型非常合适,因为你甚至可以用很少的开销来过滤这个列(与其他选项相比,表格中的字符串这几乎是开销的0)。
SELECT *
FROM `table_name`
WHERE `column_name` = 'Monday,Wednesday'