SQL Server:要在表中使用的数据类型

时间:2017-09-06 20:05:26

标签: sql-server sql-server-2014

可能要问一个愚蠢的问题,但我应该设置一个列,以便输入多个值?

示例:我有两个表,一个名为Application_users,另一个名为Products

Application_Users有一个id列。

我想要的是在Products中有一个名为Application_Users_id的列,我输入1,2,3,4

这个想法是,如果Application_User_id说3,他们只会看到Products.Application_Users_ID包含3的产品。

那么我使用什么数据类型,以便在列中输入1,2,3,4等值?

我已经尝试了NVARCHARINTEGER,但都没有工作(NVARCHAR有效,但我不会修改它,例如添加数字)。

请让我知道每个人都认为这是最好的方法。

由于 约翰

1 个答案:

答案 0 :(得分:2)

这可能是一个愚蠢的问题但你会惊讶于有多少开发人员犯了同样的错误。我经常会有一个准备粘贴的评论来解决它:

阅读Is storing a delimited list in a database column really that bad?,您会看到很多理由为什么这个问题的答案是绝对是的!

如果你真的去阅读这个链接,你会发现它是如此错误并经常使用Bill Karwin在他的书的第一章 - SQL Antipatterns:避免数据库编程的陷阱中解决它。

话虽如此,SQL Server支持XML列,您可以在其中存储多个值,但是当您想要使用它们时则不是这样。 XML列适用于存储属性包之类的东西,例如,您无法事先告知必须处理的数据类型。

<强> TL;博士; - 那你该怎么办?

您想要做的可能是Application_usersProducts之间的多对多关系。 创建多对多关系的方法是添加另一个表,它将成为两个表之间的“桥梁” - 让我们称之为Application_users_to_products
此表只有两列 - application_user_idproduct_id,每个列都是相应表的外键,两列的组合是桥表的主键。