我计划创建一个由以下属性组成的数据库
例如,我想输入看门人迈克,他每周三、周四和周日都工作。如何有效地将其输入SQL?我尝试使用数组(例如,work_schedule = 3,4,7)。但是,有什么方法更容易吗?
发布于 2015-10-24 12:14:22
使用按位运算。
使用此值常量
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64那么,3,5,7的工作计划将是
SET workschedule = 4 + 16 + 64;并选择在周三找到工作
SELECT *
FROM YourTable
WHERE workschedule & 4 > 0 发布于 2015-10-24 12:13:21
这其实是一个有趣的问题。有几种方法。我可以很容易地想到三个,其中任何一个可能适合在这种情况下。
WorkSchedule为每一天的可能组合,当有人可以工作。WorkerDays表,该表为每个工作人员和他可以工作的每一天都有一个单独的行。中间一个是最“类似SQL”的,因为它是规范化的,并且应该灵活地满足大多数需求。
第三种选择似乎是你要走的路。一种典型的方法是每天存储一个单独的标志:MondayFlag、TuesdayFlag等。
另一种方法是将标志存储在单个列中,使用位掩码来标识您想要的信息。当然,这取决于您正在使用的数据库的比特篡改功能。
如何对数据建模的实际选择取决于如何使用数据。你需要考虑会被问到的工作日问题的类型。
发布于 2015-10-24 12:11:13
首先,您正在使用关系数据库,所以不要使用:
work_schedule = [3,4,7]数据库规范化:1 Normal Form
如果数据库满足以下条件,它将处于第一范式:
原子值是一个不可分割的值。
不要在一列中存储多个值,除非您将来想问如何分割CSV数据,以及为什么它如此缓慢。
一种方法是每天使用多个旗子:
id
name
job
is_working_Monday
is_working_Tuesday
is_working_Wednesday
...https://stackoverflow.com/questions/33317971
复制相似问题