C# 在mssql中存储整数列表的最佳选择

C# 在mssql中存储整数列表的最佳选择,c#,asp.net,sql-server,list,C#,Asp.net,Sql Server,List,我想知道哪种方法是在sql列中存储整数列表的最佳方法。 ……即。“1,2,3,4,6,7” 编辑:这些值表示SQL表中的其他ID。这一排看起来像 [1] [2] id,listOfOtherIDs 到目前为止,我研究的选择包括: 分隔值为“可分解”的varchar,即通过逗号或制表符 单独包含所有值的XML 为每个值使用单独的行 哪种方法是最好的方法 谢谢, Ian记录的单个元素只能引用一个值;这是一个基本的数据库设计原则 您必须更改数据库的设计:为每个值使用一行。 你可能想好好读一读 如第一范

我想知道哪种方法是在sql列中存储整数列表的最佳方法。 ……即。“1,2,3,4,6,7”

编辑:这些值表示SQL表中的其他ID。这一排看起来像

[1] [2]

id,listOfOtherIDs

到目前为止,我研究的选择包括:

  • 分隔值为“可分解”的varchar,即通过逗号或制表符
  • 单独包含所有值的XML
  • 为每个值使用单独的行
  • 哪种方法是最好的方法

    谢谢,
    Ian

    记录的单个元素只能引用一个值;这是一个基本的数据库设计原则

    您必须更改数据库的设计:为每个值使用一行。 你可能想好好读一读

    如第一范式的描述所示:

    第一种范式表示,在表中的每一行和每一列相交处,都存在一个值,而不是一个值列表。例如,不能在名为Price的字段中放置多个价格。如果将行和列的每个交点视为一个单元格,则每个单元格只能包含一个值


    虽然Jeroen的答案适用于“多值”属性,但在某些情况下,多个逗号分隔的值实际上可能代表一个大值。像路径数据(在地图上)、整数序列、素数因子列表等等都可以存储在逗号分隔的varchar中。我认为最好解释一下您到底存储了什么,以及您需要如何检索和使用该值

    编辑:


    看看你的编辑,如果你所说的id是指另一个表的PK,那么这听起来像是这个表和你正在存储id的那个表之间真正的M-N关系。这些内容实际上应该存储在单独的动名词中,顺便说一句,这是一个表,其中每个表的PK都作为FKs,从而链接两个表的相关行。因此,Jeroen的答案非常适合您的情况。

    您应该更新您的问题,并解释此INT列表到底代表什么。最有可能的情况是,很明显(如Jeroen所说)您做错了,并且该列表应该是另一个表中的许多条目。关于您的编辑:您需要使用我的答案。ID表示指向不同表的链接应该用作外键,如果它们都分组在一个字段中,则不能这样做。+1,好的一点。因为他建议自己把这些值放在不同的记录中,所以我没有考虑这个选项。谢谢。我懂了。但有些人甚至坚持将主要因素列表存储在多行中