sql-server - 处理外键数据
问题描述
我一般是新的 SQL,我的数据库的结构/设计可能是问题所在。从我的 Windows 窗体应用程序(VB.NET)插入表 1 的新数据行时,我不确定如何更新外键的值。当我插入数据时,如果键多于用户怎么办?我假设由于外键基于另一个表的主键,在这种情况下user_id
,我不可能在(FK)中拥有比(PK)更高的user_id
值。user_id
user_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
编辑:想法是密钥有访问组,因此用户只能访问某些密钥组。
解决方案
也许我可以做一个简单的例子
假设我们有表 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 会引发错误,并阻止您执行此操作。
推荐阅读
- docker - 在无根 docker 中部署 docker 应用程序
- node.js - 配置nginx后无法发送POST请求
- java - 链表中的迭代
- reactjs - Props 传递和获取 NaN
- typescript - 异步函数返回类型强制 Promise< T | undefined> 而不是 Promise
- vba - 有没有办法确定用户是否使用 PowerPoint VBA 选择了形状或表格?
- python-3.x - ctx.voice_client.pause() 导致机器人离开语音通话而不是暂停音频
- javascript - 如何自动打开和下载网页?
- python-3.x - 如何通过 task_id 访问 Celery 链结果?
- java - 上传文件(Mac OS 到 USS)可能会损坏 I