为约束函数传递参数

Passing parameters for a constraint function

我有以下 table 加入 driver 和卡车 table,以便将卡车分配给 driver。我需要在同一天限制属于同一 driver 的条目,并且不要包含相同的卡车代码。

CREATE TABLE Assignments(
    ID_CxC CHAR(3) NOT NULL PRIMARY KEY,
    truck_code char(3) NOT NULL REFERENCES Trucks(truck_code),
    driver_code char(5) NOT NULL REFERENCES Drivers(driver_code),
    [date] DATE NOT NULL
);
INSERT Assignments
VALUES(1,1,1,'06-11-2021');
INSERT Assignments
VALUES(2,2,2,'06-11-2021');
INSERT Assignments
VALUES(3,3,3,'06-11-2021');
INSERT Assignments
VALUES(4,4,4,'06-11-2021');
INSERT Assignments
VALUES(5,5,5,'06-11-2021');
INSERT Assignments
VALUES(6,6,6,'06-11-2021');
INSERT Assignments
VALUES(7,1,1,'06-11-2021');
INSERT Assignments
VALUES(8,2,2,'06-11-2021');
INSERT Assignments
VALUES(9,3,3,'06-11-2021');
INSERT Assignments
VALUES(10,4,4,'06-11-2021');

建议创建一个布尔函数来传递 dateval、truckval 和 driverval,以及 returns 以下内容。

Not Exists (Select id_CxC From Assignments
            Where Date = Dateval and Driver=Driverval
              And Truck<>Truckval)

我已经尝试创建一个返回位数据类型的函数,但老实说我对用户创建的函数缺乏了解,我将如何传递函数的参数?

有没有更简单的方法来解决整个情况?

您显然有两个不同的实体 -- 但它们是相关的。你有一个类似“任务”的东西,其中 driver 有一辆卡车一天或多天。然后你有一个类似“旅行”的东西,其中 driver 使用卡车(你目前称之为“任务”)。

所以,我将其建模为:

CREATE TABLE assignments (
    ID_CxC CHAR(3) PRIMARY KEY,
    truck_code char(3) NOT NULL REFERENCES Trucks(truck_code),
    driver_code char(5) NOT NULL REFERENCES Drivers(driver_code),
    date DATE NOT NULL,
    UNIQUE (driver_code, date)
);

请注意,每个 driver 每个日期只有一行。瞧!只有一辆卡车。

CREATE TABLE trips (
    ID_trip INT IDENTITY(1, 1) PRIMARY KEY,
    AssignmentId CHAR(3) NOT NULL REFERENCES Assignments(ID_CxC)
);

然后您可以根据需要为 driver 添加任意数量的行程,但对于给定的 driver,它们都拥有相同的卡车。