创建一个具有访问权限的迷你数据库,我遇到了这个问题:
对于背景,我有两个表:
Table: Items and Table: Actions
ID(PK) Name ID(PK) Name
------------------ ----------------
1 Thing1 1 Move
2 Thing2 2 Delete
3 Thing3
我创建了一个查询,列出了每个项目的可用操作:
Query: AvailableActions
Item_ID Action_ID
------------------------
1 2 //Thing1 can be deleted
2 1 //Thing2 can be moved
2 2 //Thing1 can be deleted
(no more records)
现在我要填充第三个列出对象历史记录的表
Table: History
ID(PK) Item_ID Action_ID
----------------------------------
1 1 2
2 1 2
3 2 1
4 2 2
所以我正在尝试为Action_ID创建一个查找字段,其中我只能选择所选项的允许值。但是,无论是在设计模式还是SQL模式下,我都无法获得该字段的值。
你有任何提示吗?
答案 0 :(得分:0)
在整理用户界面(拖地......)之前,请确保您在表格上有所需的约束(...修复泄漏),例如ANSI-92 Query Mode SQL DDL:
ALTER TABLE History ADD
CONSTRAINT fk__history__AvailableActions
FOREIGN KEY (Item_ID, Action_ID)
REFERENCES AvailableActions (Item_ID, Action_ID);
...假设您已在AvailableActions (Item_ID, Action_ID)
上拥有所需的唯一约束。
答案 1 :(得分:0)
如果您想要一个可以应用于项目X的操作列表,那么您可以使用以下命令生成:
SELECT Actions.ID, Actions.Name FROM Actions INNER JOIN AvailableActions
ON Actions.ID = AvailableActions.ActionID WHERE Actions.Item_ID = X
当你谈到删除“Thing 1”时,你是否真的打算从表中删除记录,或者为其他东西(如磁盘文件)记录代理。如果你真的删除它,你将无法在Items和AvailableActions之间建立PK / FK关系,如果这是你的意图。
答案 2 :(得分:0)
正如我在评论中所说,我实现这一目标的唯一方法是在“项目”表单中添加子表单。 (无法仅使用结构指定此项,因为那些Available_actions是根据相同的历史记录表计算的)