在SQL Server的列中存储id的数组/元组的正确方法是什么

blu*_*ear 4 sql sql-server arrays

我正在重新设计一个本地IP管理站点,需要一些帮助.目前,存在与某个子网ID相关联的外键建筑物ID,以便客户端知道子网所在的建筑物.然而,已经出现的问题是子网可能被分成多个建筑物.现在,子网到构建范式已不再适用,我无法正确管理此方法.

立即想到的一个选项似乎很糟糕,就是将构建ID字段更改为逗号分隔的构建ID字符串.它很快而且有效,但它让我感觉很糟糕.

我们想到的另一个想法是创建一个BuildingIDTuple表,其中可能存在多个行,将子网ID映射到buildingid.

subnet id | building id
------------------------
    1     |      2 
    1     |      3
Run Code Online (Sandbox Code Playgroud)

这种方法看起来更干净,更具有前瞻性,但我也可以想象sql查询会引起很多麻烦.

我认为理想的方法是在子网表中有一个构建ID的数组,但我不认为存在这些.

那么,设计我正在做什么的最佳方式是什么?任何帮助将非常感谢!

Ger*_*nck 9

只需创建额外的表,所需的连接将永远不会那么复杂.

解析以逗号分隔的列表或任何会让您头疼的事情.


Rac*_*erX 5

永远不会在一个数据库列中存储一组值!把它们分成一个新表,每个值作为一个单独的行!! 否则,您将成为每次查询时将这些CSV值拆分出来的奴隶.你的BuildingIDTuple桌子是要走的路.查询并不困难,但您需要支持为每个子网返回的可能多行.