Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何防止用户创建重复的配置文件?_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 如何防止用户创建重复的配置文件?

Sql server 如何防止用户创建重复的配置文件?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我对主键是如何工作的有点困惑,或者换句话说,它在唯一地标识每个记录和没有重复项的被授权人方面是如何有用的。例如,给一个用户一个唯一的UserID。无论如何,这将如何保证该表不会接受新用户输入与先前用户已有的名字和姓氏相似的名字和姓氏?具有唯一的UserId不会阻止具有非唯一的姓氏/姓氏的新条目。如果希望这些列是唯一的,则需要对这些列设置唯一约束。它们与UserId列无关 在名称列上放置唯一约束将是一个错误的选择。那里有很多乔恩·史密斯 拥有UserId允许您识别每一行。例如: id Fnam

我对主键是如何工作的有点困惑,或者换句话说,它在唯一地标识每个记录和没有重复项的被授权人方面是如何有用的。例如,给一个用户一个唯一的UserID。无论如何,这将如何保证该表不会接受新用户输入与先前用户已有的名字和姓氏相似的名字和姓氏?

具有唯一的UserId不会阻止具有非唯一的姓氏/姓氏的新条目。如果希望这些列是唯一的,则需要对这些列设置唯一约束。它们与UserId列无关

在名称列上放置唯一约束将是一个错误的选择。那里有很多乔恩·史密斯

拥有UserId允许您识别每一行。例如:

id   Fname   Lname
---------------------
1    Jon     Smith
2    Jon     Smith
3    Abe     Miessler

如果您试图插入ID为1、2或3的新记录,则您将违反唯一约束,并将看到错误。

如果您被绑定到整个“自然密钥”概念,则可以使用电子邮件地址。如果你想进入这场争论,欢迎你加入,双方都有很多支持的论据。我个人认为您应该只使用数据键,因为我喜欢直接使用数据。因此,我设计的一张桌子看起来像:

Uid      UserName     Fname    Lname
---------------------------------------------
1        JSmith       Jon      Smith
2        Jsmty        John     Smith
3        JSmythe      Jon      Smith
4        Jabetede     Jon      Smith

在Uid和用户名上强制一个唯一的约束。

我想用更简单的术语来说明这一点

例如,给一个用户一个唯一的UserID。无论如何,这将如何保证表不会接受新用户输入的与先前用户已有的名字和姓氏相似的名字?

设置表时,会创建一个UserID列,如下所示:

UserID INT NotNull标识1,1

标识的第一个参数是初始起始编号,第二个参数是每次要增加的数量。你可以做恒等式100,10,从100开始,每次递增10

设置主键:

主键用户ID

在执行插入操作时,从不包含UserID列,因为它会自动生成:

Insert into names (firstname, lastname) VALUES (@firstname, @Lastname)
现在,您可以拥有42个Bob Smith,但每一个都有其独特的价值

如果问题是他或她是否不能注册,那么UserID根本帮不了你。您可以:

1查询数据库,并向用户发送消息,确认是否存在真实的重复名称、地址等


2制作一个名称和地址的复合主键,它绝不允许重复。不建议这样做,因为与sql错误相反,您最好向用户发送一条友好的消息

,因为主键约束意味着唯一性—sql Server不会接受具有相同值的第二行—它将拒绝此类数据。但是,用户名的唯一性不会以任何方式影响名字或姓氏…将字段设置为唯一…我不建议将fname和lname设置为唯一。请使用电子邮件或用户名,主键已经是唯一的,此外,在sql server中,您还有标识列。大多数情况下,表的主键是由数据库自动生成的,每次添加记录时,主键的增量为1。数据库通常没有类似的概念。罗恩·约翰和小罗恩·约翰太相似了吗?罗纳德·约翰?约翰先生,Esq?罗恩·乔恩?这就是为什么清除邮件列表中的重复项如此困难的部分原因。但是,如何确保两个用户(两个Bob Smith)没有声明相同的身份?当你将UserID设置为这样的身份列1,1时,它将永远不允许插入。哦,我想我明白你的意思了。你是在问如何确保用户永远不会重复?我可能在这里使用了错误的术语“身份”。我的意思是,如果同一个鲍勃·史密斯创建了两个配置文件呢。要确保同一个人不能创建第二个配置文件,最合理的方案是什么?在这种情况下,复合键是必须的吗?啊,好的,这就解释了!。一个选择是在Bob Smith注册时进行检查,看看是否有其他信息匹配。意思是询问db,看看鲍勃·史密斯是否住在马萨诸塞州剑桥市埃尔姆街183号。但这与标识列或主键无关。