我一般来说是新SQL,数据库的结构/设计可能是问题所在。我不确定如何从Windows窗体应用程序(VB.NET)插入表1的新数据行时如何更新外键的值。当我插入数据时,如果密钥多于用户该怎么办?我假设由于在这种情况下外键基于另一个表的主键user_id
,因此user_id
(FK)中的user_id
值不可能比{{1} }(PK)。
示例:
表1
user_id
表2
key_id(PK) | key_name | key_info | access_group | user_id(FK)
-----------+----------+----------+--------------+-----------
1 | key 1 | someinfo | group 1 | 1
2 | key 2 | someinfo | group 2 | 1
3 | key 3 | someinfo | group 3 | 1
4 | key 4 | someinfo | group 1 | 1
编辑:其想法是,密钥具有访问组,因此用户只能访问某些密钥组。
答案 0 :(得分:1)
也许我可以举一个简单的例子
让我们说表2
像这样
user_id(PK) | user_name
1 A
2 B
4 C
5 D
请注意,要在其他表中使用外键,您需要先设置表2 。
然后,您开始在Table 1(key_id(PK) | key_name | user_id(FK))
中创建带有外键的user_id
。
要安全地将项目添加到表2中,您需要这样的查询。
insert into Table 1 (key_name, user_id)
select *some_name, user_id from Table 2
where ....
此查询不会在表2中插入任何user_id,因此是安全。
那么什么会让你绽放〜?
比方说,我在表1中插入了任意user_id。
insert into Table 1 (key_name, user_id)
values (*some_name, 3)
糟糕,3
不在表2中,sql会引发错误,并阻止您这样做。