【问题标题】:Store multiple ids into one column将多个 id 存储在一列中
【发布时间】:2018-12-02 09:29:02
【问题描述】:

主要思想是将多个区域的 id 存储到一列中。示例

Area A  id=1
Area B  id=2

我希望是否可以将我的客户可以服务的区域保存到一栏中。 例如,如果我的客户可以为他们两个都提供服务以存储在一个列中,我想像这样:

ColumnArea
1,2 //....or whatever area can service

然后,如果包含此 ID,我想使用 SQL 查询来检索此客户。

Select * from customers where ColumnArea=1

有什么技术或想法可以做到吗?

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:

    你真的不应该那样做。
    在单个列中存储多个数据点是糟糕的设计。 如需详细解释,请阅读Is storing a delimited list in a database column really that bad?,您会在其中看到很多理由说明为什么这个问题的答案是绝对是的!

    在这种情况下,您要做的是创建一个与现有表有关系的新表。在这种情况下,您可能需要多对多关系,因为显然一个客户可以服务多个区域,而我假设一个区域可以由多个客户提供服务。

    多对多关系是通过连接两个包含数据的表与另一个包含数据之间连接的表(A.K.A 桥接表)生成的。所有表之间的直接关系要么是一对一的,要么是一对多的,并且存在桥表这一事实允许两个数据表之间的关系是多对多的关系。

    所以你想要的数据库结构是这样的:

    Customers Table
        CustomerId (Primary key)
        FirstName
        LastName
        ... Other customer related data here
    
    Areas Table
        AreaId (Primary key)
        AreaName
        ... Other area related data here
    
    CustomerToArea table
        CustomerId
        AreaId
        (Note: The combination of both columns is the primary key here)
    

    然后您可以像这样选择区域 1 的客户:

    SELECT C.*
    FROM Customers AS C
    WHERE EXISTS
    (
        SELECT 1
        FROM CustomerArea As CA
        WHERE CA.CustomerId = C.CustomerId
        AND AreaId = 1
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2014-05-16
      • 2019-12-14
      • 2022-10-20
      相关资源
      最近更新 更多