如何确保不同表中的两列具有相同的值

时间:2019-03-02 14:12:15

标签: tsql constraints

创建约束以确保一个表中的列中的值与不同表中的列中的值相同,需要什么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

2 个答案:

答案 0 :(得分:1)

我看到您希望在不使用外键的情况下保持两个表之间的引用完整性。

根据我过去的经验,我使用触发器解决了此类问题。 因此,您可以在DriverLicense表上创建触发器,以确保如果所插入的driverLicenseNr在PersonMayDriveCar表中不存在,则将回滚对DriverLicense表的任何插入或更新。

您可以查看完整的示例:

https://www.mssqltips.com/sqlservertip/4242/sql-server-referential-integrity-without-foreign-keys/

答案 1 :(得分:0)

遵守约定:

  1. 使用FK。就这么简单。
  2. 请勿将这些表与FK链接在一起,因为它们都是...的子表。
  3. 创建一个person表,该表是其他两个表的父表

尝试一下:

Person
- id (PK)
- name
- other columns

PersonMayDriveCar
- person_id (FK to person)
- other columns

DriverLicense
- person_id (FK to person)
- other columns