创建约束以确保一个表中的列中的值与不同表中的列中的值相同,需要什么T-SQL DDL?
我想不使用PK-FK关系来执行此操作。 这篇文章结尾的T-SQL DDL是我要解决的通用问题的示例。
在此示例中,我想知道如何在两个表之间添加相等约束,以确保该列中的值集: “ PersonMayDriveCar.personName” 始终等于列中的一组值 “ DriverLicense.personName”
CREATE SCHEMA "Equality Constraint"
GO
CREATE TABLE "Equality Constraint".PersonMayDriveCar
(
carVin nchar(4000) NOT NULL,
personName nchar(70) NOT NULL,
CONSTRAINT PersonMayDriveCar_PK PRIMARY KEY(personName, carVin)
)
GO
CREATE TABLE "Equality Constraint".DriverLicense
(
driverLicenseNr int NOT NULL,
personName nchar(70) NOT NULL,
CONSTRAINT DriverLicense_PK PRIMARY KEY(driverLicenseNr),
CONSTRAINT DriverLicense_UC UNIQUE(personName)
)
GO
答案 0 :(得分:1)
我看到您希望在不使用外键的情况下保持两个表之间的引用完整性。
根据我过去的经验,我使用触发器解决了此类问题。 因此,您可以在DriverLicense表上创建触发器,以确保如果所插入的driverLicenseNr在PersonMayDriveCar表中不存在,则将回滚对DriverLicense表的任何插入或更新。
您可以查看完整的示例:
https://www.mssqltips.com/sqlservertip/4242/sql-server-referential-integrity-without-foreign-keys/
答案 1 :(得分:0)
遵守约定:
person
表,该表是其他两个表的父表尝试一下:
Person
- id (PK)
- name
- other columns
PersonMayDriveCar
- person_id (FK to person)
- other columns
DriverLicense
- person_id (FK to person)
- other columns