首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个数据输入SQL列

将多个数据输入SQL列
EN

Stack Overflow用户
提问于 2015-10-24 12:03:34
回答 3查看 68关注 0票数 1

我计划创建一个由以下属性组成的数据库

  1. id
  2. 名字
  3. 工作
  4. work_schedule

例如,我想输入看门人迈克,他每周三、周四和周日都工作。如何有效地将其输入SQL?我尝试使用数组(例如,work_schedule = 3,4,7)。但是,有什么方法更容易吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-24 12:14:22

使用按位运算。

使用此值常量

代码语言:javascript
运行
复制
Monday  = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday  = 64

那么,3,5,7的工作计划将是

代码语言:javascript
运行
复制
SET workschedule = 4 + 16 + 64;

并选择在周三找到工作

代码语言:javascript
运行
复制
SELECT *
FROM YourTable
WHERE workschedule  & 4  > 0 
票数 3
EN

Stack Overflow用户

发布于 2015-10-24 12:13:21

这其实是一个有趣的问题。有几种方法。我可以很容易地想到三个,其中任何一个可能适合在这种情况下。

  • 有一个单独的表WorkSchedule为每一天的可能组合,当有人可以工作。
  • 拥有一个单独的WorkerDays表,该表为每个工作人员和他可以工作的每一天都有一个单独的行。
  • 将信息存储在一行中。

中间一个是最“类似SQL”的,因为它是规范化的,并且应该灵活地满足大多数需求。

第三种选择似乎是你要走的路。一种典型的方法是每天存储一个单独的标志:MondayFlagTuesdayFlag等。

另一种方法是将标志存储在单个列中,使用位掩码来标识您想要的信息。当然,这取决于您正在使用的数据库的比特篡改功能。

如何对数据建模的实际选择取决于如何使用数据。你需要考虑会被问到的工作日问题的类型。

票数 1
EN

Stack Overflow用户

发布于 2015-10-24 12:11:13

首先,您正在使用关系数据库,所以不要使用:

代码语言:javascript
运行
复制
 work_schedule = [3,4,7]

数据库规范化:1 Normal Form

如果数据库满足以下条件,它将处于第一范式:

  • 只包含原子值
  • 没有重复的组

原子值是一个不可分割的值。

不要在一列中存储多个值,除非您将来想问如何分割CSV数据,以及为什么它如此缓慢。

一种方法是每天使用多个旗子:

代码语言:javascript
运行
复制
id
name
job
is_working_Monday
is_working_Tuesday
is_working_Wednesday
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33317971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档