我有一个数据库表,例如:
----[Statuses]----
StatusID
Name
------------------
使用数据示例:
----[Statuses]----
1
Quote created
2
Quote accepted
3
Quote sent
4
Quote confirmed
5
Quote declined
-------------------
现在我想在界面中将其显示为多项选择,因此将所有这些记录置于彼此之下并带有一个复选框 - 但是,某些选项不是多项选择,例如'引用已确认&# 39;并且'报价下降'不可能都是真的。
最大的问题是这个表是可变的 - 用户可以添加更多状态 - 否则我就能创建触发器。
我如何在记录级别强制执行此类规则?有没有办法,通过在此表中添加一个或多个列,使其工作?
修改 我将就我的问题添加更完整的设计:
还有另一张表,例如:
---[Projects]---
ProjectID
Projectname
Projectcode
Projecttype
----------------
为了记录用户选择的内容,需要联结表:
------------------[Projects_Statuses]---------------
ProjectID
StatusID
DateChecked (date when the user clicked the status)
UserChecked (user that clicked the status)
-----------------------------------------------------
通过加入表
可以得到以下结果SELECT *
FROM Projects_Statuses PS
INNER JOIN Statuses S ON PS.StatusID = S.StatusID
INNER JOIN Projects P ON PS.ProjectID = P.ProjectID
结果:
--------------------[Project_Statuses]-----------------
Project_StatusID: 1 | 2
DateChecked: 1/9/2015 | 1/9/2015
UserChecked: User1 | User1
ProjectID: 1 | 4
Projectname: Nameless Project | Nameless Project
Projectcode: P122-323 | P122-323
Projecttype: Type 3 | Type 3
StatusID: 5 | 4
StatusName: Quote declined | Quote confirmed
-------------------------------------------------------
这正是我想要阻止的组合:报价无法同时确认和拒绝。它是一个或两个选项。
答案 0 :(得分:1)
'报价确认'和'报价下降'不可能都是真的。
通常,这是由维护数据库的软件检查的那种条件。
但是,您可以尝试这样的事情:
Status
------
StatusID
StatusType
ExclusiveStatus
这些行看起来像这样:
1 Quote created 0
2 Quote accepted 0
3 Quote sent 0
4 Quote confirmed 1
5 Quote declined 1
然后你可以编写一个触发器来阻止使用多个非零状态。