为约束函数传递参数
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,它们都拥有相同的卡车。
我有以下 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,它们都拥有相同的卡车。