在表之间建立 1 对 1 的关系

Pro*_*ofK 5 foreign-key sql-server constraint

我有一张桌子Nurse

CREATE TABLE [dbo].[Nurse](
    [EmployeeId] [int] IDENTITY(1,1) NOT NULL,
    [WardId]     [int]               NOT NULL,
 CONSTRAINT [PK_Nurse] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

和一张桌子Employee

CREATE TABLE [dbo].[Employee](
    [Id]            [int] IDENTITY(1,1) NOT NULL,
    [Name]          [nvarchar](100)     NOT NULL,
    [StaffNumber]   [nvarchar](50)      NOT NULL,
    [Salary]        [money]             NOT NULL,
    [Address]       [nvarchar](max)     NOT NULL,
    [GenderId]      [int]               NOT NULL,
    [ContactNumber] [nvarchar](20)      NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

如何在两个表之间建立 1:1 的关系?

一名员工有一名护士,只有Nurse表与表分开,Employee因为它必须是关系的一部分,例如,只是任何员工,例如 aNurse属于 a Ward,而 a Doctor,也是一名员工,属于 a Department

ype*_*eᵀᴹ 11

我猜你的意思是:"every Nurse is an Employee"

这可以通过(保持Employee表格原样)来完成:

CREATE TABLE [dbo].[Employee](
    [Id] [int] IDENTITY(1,1) NOT NULL,        -- why not name this EmployeeId ?
    [Name] [nvarchar](100) NOT NULL,
    [StaffNumber] [nvarchar](50) NOT NULL,
    [Salary] [money] NOT NULL,
    [Address] [nvarchar](max) NOT NULL,
    [GenderId] [int] NOT NULL,
    [ContactNumber] [nvarchar](20) NOT NULL,
  CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
    ( [Id] )
 ) ;
Run Code Online (Sandbox Code Playgroud)

并更改Nurse表,使主键不是 anIDENTITY并且它有一个引用 的外键Employee (Id)

CREATE TABLE [dbo].[Nurse](
    [EmployeeId] [int] NOT NULL,                 -- not IDENTITY !
    [WardId] [int] NOT NULL,
  CONSTRAINT [PK_Nurse] PRIMARY KEY CLUSTERED 
    ( EmployeeId ),
  CONSTRAINT [FK_Employee_Nurse] FOREIGN KEY  
    ( EmployeeId )
    REFERENCES dbo.Employee ( Id )
) ;
Run Code Online (Sandbox Code Playgroud)


dru*_*zin 1

似乎您需要做的就是向 Nurse 表添加主键,并从 Nurse 表到 Employee 表添加唯一的外键关系;

CREATE TABLE [dbo].[Employee](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](100) NOT NULL,
    [StaffNumber] [nvarchar](50) NOT NULL,
    [Salary] [money] NOT NULL,
    [Address] [nvarchar](max) NOT NULL,
    [GenderId] [int] NOT NULL,
    [ContactNumber] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
))

GO
CREATE TABLE [dbo].[Nurse](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeId] [int] FOREIGN KEY REFERENCES EMPLOYEE(ID),
    [WardId] [int] NOT NULL,
 CONSTRAINT [PK_Nurse] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
))
GO
CREATE UNIQUE INDEX UQ_NURSE_EMPLOYEEID ON dbo.Nurse ( EmployeeId )
Run Code Online (Sandbox Code Playgroud)