我正在尝试对工作流(状态和活动)进行建模以创建“规则”。
让我给你举个例子。
主要的“对象”让我们说是“车辆要求”,我会有这张表:
idRequirement, idVehicle,DateOfRequirement, idStatus, LastUpdate
1 2 2012-01-02 10:20:00, 1 ,2012-01-02 10:20:00
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,因为寄存器刚刚创建,DateOfRequirement 和 LastUpdate 是相同的,LastUpdate 将在每次状态更改后更新。
状态表
idStatus,Status
1 New
2 Vehicle Assigned
3 Closed
Run Code Online (Sandbox Code Playgroud)
活动表
idActivitie, Activitie
1 Create Vehicle Requirement
2 Assign Vehicle
3 Close requirement.
4 ReAssign Vehicle.
5 Confirm
Run Code Online (Sandbox Code Playgroud)
直到上表我都没有问题,但我的问题是,例如:
我知道如果当前状态不是“车辆已分配”(idStatus=2),我无法关闭要求(在“车辆要求”上更新到 idStatus=3)。
我可以通过代码来做到这一点(或者我认为是这样),但是无论如何都可以将这种规则建模到表格中吗?我的意思是一个表格,我在其中检索下一个 idStatus 和要执行的活动(以保存每个需求及其活动的“kardex/历史”),例如检查活动或当前状态?
规则还将根据时间和状态设置 3 个“警报”。例如,分配车辆的“绿色”限制时间为 30 分钟或更短,黄色“警报”在创建需求后将在 31 到 45 之间(状态为新),红色警报将在 45 分钟后显示状态为“新”
idRequirement,Vehicle,CurrentStatus,NextStatus, Alert
1 N/A New Vehicle Assigned Green
Run Code Online (Sandbox Code Playgroud)
39 分钟后,它会是这样的:
idRequirement,Vehicle,CurrentStatus,NextStatus, Alert
1 N/A New Vehicle Assigned …
Run Code Online (Sandbox Code Playgroud) 注意:我使用 MSSQL 2008,但我想它对许多其他数据库引擎有效 我有这个表“用户”:
用户 ID 用户国家 ID 1 用户 1 1 2 用户 2 2 3 用户 3 3 4 用户 4 4 5 用户 5 4 6 用户 6 3
而这张表“国家”
CountryID 国家 1 MX 2 美国 3 CAN 4 英格兰
如您所见,每个用户都属于一个国家。
如果我想知道,我在用户表上至少拥有一个用户的所有不同国家/地区,现在我执行以下查询:
select distinct country
from Users inner join
countries on users.CountryID=countries.CountryID
Run Code Online (Sandbox Code Playgroud)
并实现下一个结果集:
能够 英国 MX 美国
这确实是所有不同的国家,其中我在 muy 表 Users 上至少有一个用户。
我的疑问是,是否可以在不使用“DISTINCT”的情况下实现上述结果集,我的意思是只使用 JOINS 和条件?
这是 de DDL 脚本:
使用 [测试] 走 /****** 对象:表 [dbo].[用户] 脚本日期:09/21/2012 16:21:14 …