在sql命令中定义1:0 ... 1关系

时间:2014-01-17 14:57:46

标签: sql sqlcommand sql-scripts

我想在sql命令中设置两个表。

我有一个Customer表和一个User Account表。

Customer没有或最多有1 User_account(0 ... 1)的关系。

USER_ACCOUNT始终会有CUSTOMER

如何通过SQL命令执行此操作?

编辑以下是我到目前为止所尝试的内容:

ALTER TABLE UserAccount DROP CONSTRAINT FKUserAccountToCustomer
GO

DROP TABLE Customer;
DROP TABLE UserAccount;
GO

CREATE TABLE Customer
(
    CustomerID INT NOT NULL IDENTITY,
    (...)
);
GO

CREATE TABLE UserAccount
(
    UserAccountID INT NOT NULL IDENTITY,
    CustomerID INT NOT NULL,
    (...)
);
GO

ALTER TABLE Customer ADD PRIMARY KEY (CustomerID);
GO

ALTER TABLE UserAccount ADD PRIMARY KEY(UserAccountID);
GO

IF NOT EXISTS (SELECT * FROM sysdiagrams WHERE name = 'FKUserAccountToCustomer')
BEGIN
    ALTER TABLE UserAccount
    ADD CONSTRAINT FKUserAccountToCustomer
    FOREIGN KEY(CustomerID)
    REFERENCES Customer(CustomerID)
END;

2 个答案:

答案 0 :(得分:1)

如果客户可以拥有0或1个用户帐户,则将UserAccount Id设置为与客户ID相同,并使用主键和外键约束强制执行,如下所示:

CREATE TABLE Customer
 (
   CustomerId     int  not null identity(1,1)
    constraint PK_Customer
     primary key clustered
   ,(...)
 )

CREATE TABLE UserAccount
 (
   UserAccountId  int  not null
    constraint PK_UserAccount
     primary key clustered
    constraint FK_UserAccount__Customer
     foreign key references Customer (CustomerId)
   ,(...)
 )

这样:

  • 如果没有先创建客户,则无法创建用户帐户
  • 您不能将两个或多个用户帐户分配给同一CustomerId
  • 如果“您的”CustomerId不在UserAccount中,那么您没有用户帐户

答案 1 :(得分:0)

您可以为CustomerId中的UserAccount创建一个唯一约束,以确保客户不能拥有多个帐户。

应该像这样可行

ALTER TABLE UserAccount ADD CONSTRAINT IX_Customer UNIQUE(CustomerId)