0

我的观点如下:
我有一个存储事件的 MySQL 数据库。这些事件可能发生在一周中的不同日子。您可以说它如下所示:

Day | Active
Mon | yes
Tue | yes
Wed | no
Thu | no
Fri | yes
Sat | no
Sun | no

现在我不完全确定如何将其保存到数据库中。当然有几种可能性,但我认为我能想到的一切都有缺点:

  • 将它们存储为 7 个 Bool 类型的字段(似乎有很多类似的字段)
  • 将它们存储为 7 位数字(这样我只需要一个整数,但这需要一些努力来转换并且缺乏可读性)

在 C++ 中,这些数据可以存储到 std::bitset 中。我敢打赌,在 MySQL 中可以使用一些东西……请指点我:)

PS:
我不知道是否重要:数据将用PHP读取并作为JSON提供给外界。

4

3 回答 3

3

您可以使用 SET 类型(http://dev.mysql.com/doc/refman/5.0/en/set.html)。例如,这就是您的表格可能的样子:

+-------------+--------------------+
| event_name  | days               |
+-------------+--------------------+
| some event  | 'monday,friday'    |
+-------------+--------------------+
| another one | 'tuesday'          |
+-------------+--------------------+

从这种表中选择行很容易,并且对于潜伏在数据库中的任何人来说都是可读的。

于 2013-03-05T18:21:55.253 回答
2

你应该使用 int 的想法。在您的 php 中,您可以将掩码定义为常量,然后使用按位运算来确定设置了哪些标志。

所以而不是做类似的事情

myvar & 0x010

它看起来更像是在使用常数进行操作

myvar & IS_MONDAY
于 2013-03-05T18:19:15.700 回答
0

If your entry is merely to store weekly events with the input you provided, why not create a VARCHAR field and store it as a JSON string: { "Mon":"yes", "Tue":"yes", "Wed":"no", "Thu":"no", "Fri":"yes", "Sat":"no", "Sun":"no" }

于 2013-03-05T18:24:29.950 回答