Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 值可以是主键和外键吗?_Sql_Sql Server - Fatal编程技术网

Sql 值可以是主键和外键吗?

Sql 值可以是主键和外键吗?,sql,sql-server,Sql,Sql Server,我的SQL Server数据库中有以下表格 Customer是User的一个子类型,因此我在Customer和User之间进行了引用 我还想将我的客户链接到我的预订。我想使用Customer表中的外键作为此关系的主键。当我在SQL Server中写入时,在“(userid)”下会出现此错误: 无效列“userid” 我怎样才能建立这种关系 Create table [dbo].[User] ( [id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,

我的SQL Server数据库中有以下表格

Customer是User的一个子类型,因此我在Customer和User之间进行了引用

我还想将我的客户链接到我的预订。我想使用Customer表中的外键作为此关系的主键。当我在SQL Server中写入时,在“(userid)”下会出现此错误:

无效列“userid”

我怎样才能建立这种关系

Create table [dbo].[User]
(
    [id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,
    [name] varchar(50) NOT NULL,
    [password] nvarchar(100) NOT NULL, 
)

Create table [dbo].[Customer]
(
    [userid] int FOREIGN KEY REFERENCES [dbo].[User](id) NOT NULL,
    [street] varchar(40) NOT NULL,
    [housenumber] varchar(10) NOT NULL,
    [postalcode] varchar(10) NOT NULL,
    [phonenumber] varchar(20) NOT NULL,
    [email] varchar(30) NOT NULL,
)

Create table [dbo].[Reservation]
(
    [id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,
    [datum] date NOT NULL,
    [prijs] decimal NOT NULL,
    [levertijd] datetime NOT NULL,
    [ophaaltijd] datetime NOT NULL,
    [leverAdres] varchar(60) NOT NULL,
    [klantId] int FOREIGN KEY REFERENCES [dbo].[Customer](userid) NOT NULL
)

是的,这是可能的,像这样试试

Create table [dbo].[Customer]
(
  [userid] int not null,
  [street] varchar(40) NOT NULL,
  [housenumber] varchar(10) NOT NULL,
  [postalcode] varchar(10) NOT NULL,
  [phonenumber] varchar(20) NOT NULL,
  [email] varchar(30) NOT NULL,

  constraint PK_UserID primary key ([userid]),
  constraint FK_Customer_User foreign key (userid) references [User] (id)
)
但是我不得不说,
userid
对于名为
Customer

我想这样说:

Create table [dbo].[Customer]
(
  [CustomerID] int not null identity,
  [userid] int not null,
  [street] varchar(40) NOT NULL,
  [housenumber] varchar(10) NOT NULL,
  [postalcode] varchar(10) NOT NULL,
  [phonenumber] varchar(20) NOT NULL,
  [email] varchar(30) NOT NULL,

  constraint PK_CustomerID primary key ([CustomerID]),
  constraint FK_Customer_User foreign key (userid) references [User] (id)
)


Create table [dbo].[Reservation]
(
  [id] int PRIMARY KEY IDENTITY (1,1) NOT NULL,
  [datum] date NOT NULL,
  [prijs] decimal NOT NULL,
  [levertijd] datetime NOT NULL,
  [ophaaltijd] datetime NOT NULL,
  [leverAdres] varchar(60) NOT NULL,
  [klantId] int FOREIGN KEY REFERENCES [dbo].[Customer](customerid) NOT NULL

)

答案是肯定的。但是[dbo].[Customer](userid)必须是密钥。(PK或唯一约束。)在当前结构中,您必须在[dbo].[Customer]中使用id作为外键,就像这样。谢谢。我同意这是一个奇怪的名称,但我认为在同一个表中同时包含CustomerID和UserID会很奇怪,因为它们是具有不同名称的重复数据