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)
似乎您需要做的就是向 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)
归档时间: |
|
查看次数: |
2611 次 |
最近记录: |