首页 > 解决方案 > 处理外键数据

问题描述

我一般是新的 SQL,我的数据库的结构/设计可能是问题所在。从我的 Windows 窗体应用程序(VB.NET)插入表 1 的新数据行时,我不确定如何更新外键的值。当我插入数据时,如果键多于用户怎么办?我假设由于外键基于另一个表的主键,在这种情况下user_id,我不可能在(FK)中拥有比(PK)更高的user_id值。user_iduser_id

例子:

表格1

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

表 2

user_id(PK) | user_name | user_contact | user_address  | access_permission
------------+-----------+--------------+---------------+------------------
          1 |     Bryan |     11111111 | sampleaddress | group 1

编辑:想法是密钥有访问组,因此用户只能访问某些密钥组。

标签: sql-server

解决方案


也许我可以做一个简单的例子

假设我们有表 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))带有外键 in的那个user_id

要安全地将项目添加到表 2,您需要这样的查询。

insert into Table 1 (key_name, user_id)
select *some_name, user_id from Table 2
where ....

此查询不会插入任何不在表 2 中的 user_id,因此它是安全的。

那么什么会让你绽放~

假设我使用任意 user_id 插入表 1。

insert into Table 1 (key_name, user_id)
values (*some_name, 3)

糟糕,3不在表 2 中,sql 会引发错误,并阻止您执行此操作。


推荐阅读