如何将数组/对象插入SQL(最佳实践)

时间:2010-03-23 21:16:13

标签: sql arrays sqldatatypes

我需要将三个项目作为一个数组存储在一个列中,并能够在以后的函数中快速/轻松地修改该数据。

[---如果你信任我,你可以跳过这一部分 - ]

要清楚,我喜欢并且一直使用x_ref表,但是x_ref在这里不起作用,因为这不是一对多的关系。我正在制作一个项目管理工具,其中包括将用户分配给项目,并按每个用户每周为该项目分配数小时,有时在未来几周内分配数周。当然有很多项目,一个项目可以有很多团队成员,一个团队成员可以同时参与很多项目,但不是一对多,因为团队成员可以在同一个项目上工作很多周但是不同时间的不同时间。换句话说,每个对象确实是唯一的。此外/最后,任何团队成员都可以随时更改此数据 - 因此需要轻松操作。

基本上,我需要处理三个值(团队成员,我们谈论的那一周,以及多少小时)放入项目表中的项目行(项目团队成员列下)并视为一个项目 - 一个团队成员 - 实际上将成为项目所涉及的所有团队成员的一部分。

[ - 跳过,开始阅读这里:) - ]

因此,假设应用程序的一般模式和关系表不是完全废话,并且在这种情况下我们实际上是在墙上使用数组/对象作为此列的值,是否有最佳实践为了那个原因?像特定的SQL数据类型一样?特定的对象/数组格式? CSV? JSON? XML?大多数应用程序都在C#中,但(由于非常奇怪的原因,我不会解释)我们可以真正使用任何环境,如果有一个特定的处理这个井。

目前,我正在思考(webservice + JS / JSON)或PHP反序列化/序列化(但我在PHP解决方案中有点勾勒出来,因为使用ajax时看起来有点麻烦?)想想有人吗?

3 个答案:

答案 0 :(得分:3)

嗯,听起来你应该重新考虑你的架构,如果我理解你为什么不创建这样的:

Users
  ...
Projects
  ...

WorkItemTracking 
  UserId
  ProjectId
  Week // between 1 and 52, or a datestamp
  Hours // number of hours budgeted for this task this week

要查找用户在接下来的3周内所做的事情,

SELECT * form workItemTracking where userId = <id> and week between <weekstart> and <weekend>

这使您能够将多个用户分配给多个项目,并将项目分配给多个用户。它还使更新变得容易。这有意义吗?

答案 1 :(得分:0)

您可以将数组展平为文本列并使用一些特殊标记来分隔每个数据,例如字符串Joe/03/25将是数组someArray={'Joe','03','25'}。那会有用吗?

我承认这种方法可能存在问题。例如,如果您要在此列中搜索“Joe”,则必须使用...LIKE 'Joe%'。看起来不是很可索引的,所以你的查询会有点慢。

某些数据库(如Oracle)实际上允许数组类型作为列类型(我认为它们有时也称为嵌套表),而我认为(可能是错误的)您可以搜索和索引列中数组的元素。您没有指定使用哪个数据库供应商,因此您可能可以将其作为正确的数组,具体取决于您选择的技术。

答案 2 :(得分:0)

为了别人的疑惑...

“Damnit Byron你得到了我;我讨厌在interweb上看起来很傻哈哈。但你是对的 - 这真的是更好的解决方案。谢谢!”