【问题标题】:How to insert an Array/Objet into SQL (bestpractice)如何将数组/对象插入 SQL(最佳实践)
【发布时间】:2011-01-31 00:19:46
【问题描述】:

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

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

需要明确的是,我一直喜欢并使用 x_ref 表,但 x_ref 在这里不起作用,因为这不是一对多的关系。我正在制作一个项目管理工具,除其他外,将一个用户分配给一个项目,并每周为每个用户分配小时数,有时甚至是未来数周的数周。当然有很多项目,一个项目可以有很多团队成员,一个团队成员可以同时参与多个项目,但它不是一对多的,因为一个团队成员可以在同一个项目上工作数周但有不同周的不同时间。换句话说,每个对象确实是独一无二的。此外/最后,任何团队成员都可以随时更改此数据 - 因此它需要易于操作。

基本上,我需要处理三个值(团队成员、我们谈论的星期以及多少小时)放入项目表中的项目行(在项目团队成员列下)并视为一个项目 - 一个团队成员 - 实际上将是参与该项目的所有团队成员的更大数组的一部分。

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

因此,假设应用程序的通用架构和关系表并非完全废话,并且在这种情况下我们实际上是碰壁使用数组/对象作为该列的值,是否有最佳实践为了那个原因?喜欢特定的 SQL 数据类型?特定的对象/数组格式? CSV? JSON? XML?大多数应用程序都是用 C# 编写的,但是(出于非常奇怪的原因,我不会解释)如果有一个可以很好地处理这个问题的特定环境,我们真的可以使用任何环境。

目前,我正在考虑 (webservice + JS/JSON) 或 PHP 反序列化/序列化(但我对 PHP 解决方案有点草拟,因为使用 ajax 时它似乎有点麻烦?)有人想过吗?

【问题讨论】:

    标签: sql arrays sqldatatypes


    【解决方案1】:

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

    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>
    

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

    【讨论】:

    • 该死的拜伦,你抓住了我;我讨厌在互联网上看起来很愚蠢哈哈。但你是对的 - 这确实是更好的解决方案。谢谢!
    • 大声笑没有问题。考虑通过回答几个问题来回馈。干杯!
    【解决方案2】:

    您能否将数组展平为一个文本列并使用一些特殊标记来分隔每条数据,例如字符串Joe/03/25 将是一个数组someArray={'Joe','03','25'}。这行得通吗?

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

    Oracle 等一些数据库实际上允许数组类型作为列类型(我认为这些有时也称为嵌套表),并且我认为(虽然可能是错误的)您可以搜索和索引列中数组的元素。您没有指定与哪个数据库供应商合作,因此您可能能够将其作为一个正确数组,这取决于您选择的技术。

    【讨论】:

      【解决方案3】:

      为了让其他人想知道...

      “该死的拜伦,你抓住了我;我讨厌在互联网上看起来很愚蠢哈哈。但你是对的 - 这确实是更好的解决方案。谢谢!”

      【讨论】:

        猜你喜欢
        • 2018-01-30
        • 2021-02-18
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        • 2018-06-25
        相关资源
        最近更新 更多