处理外键数据

时间:2018-06-28 01:11:35

标签: sql-server

我一般来说是新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

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

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会引发错误,并阻止您这样做。