sql - 根据 ID 引用更新另一个表中的值
问题描述
我有两个名为Jobs
&的表Tags
。在 Jobs 表中,我有一个名为 TagID 的列。我希望这是一个在标签表中引用 TagID 的 ID。
工作
|Id, CompanyName, Title, Link, TagId, PublishedDate, Country, City, Description|
标签
|Id, TagId, Tag|
基本上我想Jobs.TagId
引用Tags.TagId
并且当一个条目Jobs
被修改时我想要一个条目Tags
来尊重该更改(即,如果一个条目Jobs
被删除,那么标签中具有该作业 TagId 的所有条目也应该被删除)。
我试过的:
CREATE TABLE Tags(
Id int NOT NULL PRIMARY KEY,
TagID int NOT NULL,
Tag varchar(255) NOT NULL
)
CREATE TABLE Jobs (
Id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
CompanyName varchar(255),
Title varchar(255),
Link varchar(255),
TagID int UNIQUE NOT NULL CONSTRAINT FK_TagID FOREIGN KEY (Tags) REFERENCES Tags(TagID) ON DELETE CASCADE ON UPDATE CASCADE,
PublishedDate DateTime,
Country varchar(255),
City varchar(255),
Description varchar(MAX)
)
我想要实现的示例结构:
工作
|Id, CompanyName, Title, Link, TagId, PublishedDate, Country, City, Description|
|1, Apple, Senior Engineer, link, 12, 2019-12-13, USA, Michigan, Fun Job |
标签
|Id, TagId, Tag |
|1, 12, C++ |
|2, 12, C# |
|3, 12, Javascript|
现在,如果 Jobs.Id 1 被删除,TagId 为 12 的标签中的所有条目都应该被删除。我怎样才能实现这种行为?
现在我得到:
引用表“Tags”中没有与外键“FK_TagID”中的引用列列表匹配的主键或候选键。
解决方案
如果你真的想为非主键创建一个外键,它必须是一个对其有唯一约束的列。
来自在线书籍:
FOREIGN KEY 约束不必只链接到另一个表中的 PRIMARY KEY 约束;它也可以定义为引用另一个表中唯一约束的列。
CREATE TABLE Tags(
Id int NOT NULL PRIMARY KEY,
TagID int UNIQUE NOT NULL,
Tag varchar(255) NOT NULL
)
CREATE TABLE Jobs (
Id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
CompanyName varchar(255),
Title varchar(255),
Link varchar(255),
TagID int UNIQUE NOT NULL CONSTRAINT FK_TagID FOREIGN KEY REFERENCES Tags(TagID) ON DELETE CASCADE ON UPDATE CASCADE,
PublishedDate DateTime,
Country varchar(255),
City varchar(255),
Description varchar(MAX)
)
推荐阅读
- find - Episerver FIND 结果不在 CMS 中
- javascript - 如何在谷歌地图折线的中心设置折线标记?
- python - 在 ODOO 中覆盖 Create / Write 方法中的返回操作
- javascript - 根据来自另一个的事件过滤一个 ag-grid
- database - Neo4j:如何匹配关系?
- java - 在计算年复利时,为什么 Java 计算 interestRate/100 而不仅仅是 interestRate?
- react-native - 如何在每 1 分钟内获取坐标
- typescript - 打字稿装饰器 + 反映元数据
- java - 我的 Searchview 不起作用/给出 NullPointerException setSearchableInfo
- javascript - 无法停止重复 div 调用