在SQL中,如何防止对用户重复值的表,而不是一个完整的表?

问题描述 投票:1回答:2

我想创建与T-SQL的表。用户是从用户表的外键。一个用户不能有“PHONE1”和“PHONE2”所在领域的两个相同的电话号码。然而,允许两个用户具有相同的电话号码。如何创建这样的领域,只为同一个用户ID外键是唯一的?

英语不是我的坚强的一面。我知道,它适用于所有的行。我需要它只能与具有相同用户ID外键行工作。所以,我听说我的设计可以通过使检查约束,使外键主键或正常化表将表添加电话号码得到改善。

比方说,有一个“用户”表,这将是“联系人”表。因此,在接触的用户ID是外键,可以进口更多然后一次。

CREATE TABLE Users
(
    UserId int NOT NULL PRIMARY KEY IDENTITY(1,1),
    -- ...
)

CREATE TABLE Contacts
(
    ContactId int NOT NULL PRIMARY KEY IDENTITY(1,1)
    UserId    int NOT NULL FOREIGN KEY FK_Users_Contacts REFERENCES Users ( UserId )
    Phone1    varchar(20),
    Phone2    varchar(20)
)
sql
2个回答
3
投票

你会希望有一个CHECK CONSTRAINT

ALTER TABLE [tableName]
    ADD CONSTRAINT CK_DiffPhones CHECK ( Phone1 <> Phone2 )

为您的特定DBMS的语法可能有所不同。

这么说,我觉得你的表设计可以提高。你应该正常化的电话号码,自己的表。


3
投票

你应该有手机1和手机2的值一个用户ID列中,记录比这个检查约束正常工作。第一次输入用户在手机1它将创建一个新的记录和第二时间,而不是用于电话2创造另一个记录的值,它会更新其拥有的手机1值和第一个记录,如果手机1和手机2是相同的值,然后将其会给因为检查约束的错误。

© www.soinside.com 2019 - 2024. All rights reserved.