将多个 ID 存储到一列中
Store multiple ids into one column
主要思想是将区域中的多个 id 存储到一列中。示例
Area A id=1
Area B id=2
我想知道是否可以将我的客户可以服务的区域保存在一栏中。
例如,如果我的客户可以为他们提供服务以存储到一列中,我想像这样:
ColumnArea
1,2 //....or whatever area can service
然后我想使用 SQL 查询来检索包含此 ID 的客户。
Select * from customers where ColumnArea=1
有没有什么技术或想法可以做到这一点?
你真的不应该那样做。
在单个列中存储多个数据点是糟糕的设计。
详细解释请阅读Is storing a delimited list in a database column really that bad?,在这里你会看到很多理由为什么这个问题的答案是绝对是!
在这种情况下,您要做的是创建一个与现有 table 有关系的新 table。在这种情况下,您可能需要多对多关系,因为显然一个客户可以为多个区域提供服务,我假设一个区域可以由多个客户提供服务。
多对多关系是通过连接两个包含数据的 table 与另一个包含数据之间的连接的 table 生成的(A.K.A 桥 table). table 之间的所有直接关系都是一对一或一对多,并且存在桥梁 table 的事实允许两个数据 table 之间的关系是多对多关系。
所以你想要的数据库结构是这样的:
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)
然后您可以 select 区域 1 的客户,如下所示:
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
SELECT 1
FROM CustomerArea As CA
WHERE CA.CustomerId = C.CustomerId
AND AreaId = 1
)
主要思想是将区域中的多个 id 存储到一列中。示例
Area A id=1
Area B id=2
我想知道是否可以将我的客户可以服务的区域保存在一栏中。 例如,如果我的客户可以为他们提供服务以存储到一列中,我想像这样:
ColumnArea
1,2 //....or whatever area can service
然后我想使用 SQL 查询来检索包含此 ID 的客户。
Select * from customers where ColumnArea=1
有没有什么技术或想法可以做到这一点?
你真的不应该那样做。
在单个列中存储多个数据点是糟糕的设计。
详细解释请阅读Is storing a delimited list in a database column really that bad?,在这里你会看到很多理由为什么这个问题的答案是绝对是!
在这种情况下,您要做的是创建一个与现有 table 有关系的新 table。在这种情况下,您可能需要多对多关系,因为显然一个客户可以为多个区域提供服务,我假设一个区域可以由多个客户提供服务。
多对多关系是通过连接两个包含数据的 table 与另一个包含数据之间的连接的 table 生成的(A.K.A 桥 table). table 之间的所有直接关系都是一对一或一对多,并且存在桥梁 table 的事实允许两个数据 table 之间的关系是多对多关系。
所以你想要的数据库结构是这样的:
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)
然后您可以 select 区域 1 的客户,如下所示:
SELECT C.*
FROM Customers AS C
WHERE EXISTS
(
SELECT 1
FROM CustomerArea As CA
WHERE CA.CustomerId = C.CustomerId
AND AreaId = 1
)