自引用外键是什么意思?

2023-11-24

我检查了一个遗留数据库,发现了几个引用列自身的外键。引用的列是主键列。

ALTER TABLE [SchemaName].[TableName]  WITH CHECK ADD  
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id])
REFERENCES [SchemaName].[TableName] ([Id])

它有什么意义呢?


ALTER TABLE [SchemaName].[TableName]  WITH CHECK ADD  
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id])
REFERENCES [SchemaName].[TableName] ([Id])

这个外键完全是多余的,没有意义,删除它就可以了。当行匹配自身验证约束时,它永远不会被违反。

在分层表中,关系将存在于两个不同的列之间(例如Id and ParentId)

至于为什么它很可能是通过使用可视化设计器创建的,如果您右键单击对象资源管理器中的“键”节点并选择“新建外键”,然后关闭对话框而不删除创建的外键,然后创建一些打开表设计器中的其他更改并保存它会创建这种冗余约束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自引用外键是什么意思? 的相关文章

  • 带附件的数据库电子邮件(excel 文件/pdf 文件)?

    我必须从数据库向我的邮件 ID 发送一封带有附件的邮件 EXEC msdb dbo sp send dbmail profile name Adventure Works Administrator recipients email pro
  • 数据库不存在。确保名称输入正确

    为什么我会出现这个错误 如果您查看屏幕截图 您将看到数据库 仅当我连接到两个数据库引擎时才会发生这种情况 它仅检测下面数据库引擎中的数据库 而不检测突出显示的数据库 除了关闭应用程序并仅打开一个数据库引擎之外 还有其他方法可以使用我的数据库
  • 如何:使用 SQL Server 2008 创建自动更新修改日期的触发器

    很高兴知道如何创建一个自动更新的触发器modifiedDate我的 SQL Server 表中的列 Table 时间输入 Id PK UserId FK Description Time GenDate ModDate 触发代码 TR Ti
  • 错误代码:1822(当数据类型匹配且具有复合键时)

    得到一个 错误代码 1822 添加外键约束失败 丢失的 引用表中约束 subject ibfk 1 的索引 注册 当尝试创建subject桌子 问题是 错误并没有出现在上一张表上student 数据类型相同 并且定义了主键 两者都会出现此错
  • Visual Studio 2012 - 数据库发布向导已停止?

    我正在使用 VS 2012 和 SQL Server 2008 刚刚注意到服务器资源管理器中缺少 发布到提供商 选项 据此 数据库发布向导已停止使用 http forums asp net post 5122271 aspx http fo
  • 如何查询多个链接服务器?

    链接一些 SQL Server 2008 服务器 实例后 我想对这些服务器进行更通用的查询 我知道我必须像这样指定查询的命运 select from SRV INSTANCE dbname dbo foo 但是 我会针对多个链接服务器运行此
  • SQL Server 不使用索引将日期时间与非空进行比较

    我有一个与其他任何表都不相关的简单表 它有一个非 PK 列 它是一个日期 我已经为该列创建了一个非聚集索引 如果我提出这个查询 select from table where datecolumn is not null 但如果我删除 no
  • 复制数据库的最佳方法是什么?

    当我想要复制数据库时 我总是创建一个新的空数据库 然后将现有数据库的备份恢复到其中 然而 我想知道这是否真的是最不容易出错 最不复杂且最有效的方法 可以跳过创建空数据库的步骤 您可以在恢复过程中创建新数据库 这实际上是我所知道的克隆数据库最
  • 当我使用可变参数而不是常量参数时,为什么我的内联表 UDF 慢得多?

    我有一个表值内联 UDF 我想过滤该 UDF 的结果以获得一个特定值 当我使用常量参数指定过滤器时 一切都很好 并且性能几乎是瞬时的 当我使用可变参数指定过滤器时 它会花费明显更大的时间块 大约是逻辑读取的 500 倍和持续时间的 20 倍
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • 如何从代码隐藏运行存储过程(带参数 - 有返回值)?

    如何使用存储过程 带参数 具有类型的返回值int 从代码后面 我的存储过程如下所示 ALTER Procedure dbo sp Noskheh SumOfTotalPay Co ID int AS Declare Sum bigint B
  • ALTER TABLE 语句与 FOREIGN KEY 约束冲突

    为什么要添加外键tblDomare表导致此错误 ALTER TABLE 语句与 FOREIGN KEY 约束 FK tblDomare PersN 5F7E2DAC 冲突 冲突发生在数据库 almu0004 表 dbo tblBana 列
  • 如何在 SQL Server 中不循环更新列?

    出于性能角度的考虑 我只需要删除循环并使用一些联接或其他解决方案来更新 Result 表中的数据并获得循环返回的相同结果 标量函数 CREATE FUNCTION MultiplyerScl a INT b INT RETURNS INT
  • 消息 203,级别 16,状态 2,不是有效标识符

    我收到以下错误 消息 203 级别 16 状态 2 过程 getQuestion 第 18 行名称 select top 1 from tlb Question inner join tlb options on tlb options q
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 实体框架代码优先 - 外键约束问题

    我是 EF 代码优先主体的新手 目前不知道该怎么做 我有 2 个 POCO 类 public class Problem public int ProblemID get set public int UserID get set publ
  • 查询嵌套查询结果中两列的位置

    我正在编写这样的查询 select from myTable where X in select X from Y and XX in select X from Y X 列和 XX 列的值必须位于同一查询的结果中 select X fro
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • 在 SQL Server 中获取一周的第一天

    我试图按周对记录进行分组 将聚合日期存储为一周的第一天 然而 我用于四舍五入日期的标准技术似乎无法在几周内正常工作 尽管它可以在天 月 年 季度和我应用的任何其他时间范围内正常工作 这是 SQL select start of week d

随机推荐

  • 为什么mysql max_allowed_pa​​cket自动重置为1m

    I set SET GLOBAL max allowed packet 16777216 并且 mysqld max allowed packet 16M 我通过下面的命令检查了 max allowed pa cket SHOW VARIA
  • 持久保存到 Azure 表存储时使用 POCO

    我计划在我的 ASP NET 5 MVC 6 应用程序中使用 Azure 表存储 并添加了WindowsAzure StorageNuGet 包 但当我注意到我所有的 entnty 模型都需要继承时 我真的很失望Microsoft Wind
  • Laravel Dusk - 类配置不存在

    最近将 5 3 项目升级到 5 4 一切看起来都不错 今天我开始实现 Dusk 但是在运行示例测试时遇到了问题 footy finance 5 4 php artisan dusk PHPUnit 6 0 0 by Sebastian Be
  • ggplot2 版本 0.9.3.1 不会加载到 R 3.0.2 中

    我不小心删除了旧版本的ggplot2 所以我下载了新版本 当我使用时 library ggplot2 我收到以下错误 Error in loadNamespace i c lib loc libPaths versionCheck vI i
  • 减少 Java 8 中的一元运算符列表

    在 Java 8 中减少 UnaryOperators 列表直到它们代表一个我可以调用 apply 的 UnaryOperator 的首选方法是什么 例如我有以下内容 interface MyFilter extends UnaryOper
  • 文件扩展名 .DB - 它到底是什么类型的数据库?

    我有一个带有 DB 文件扩展名的数据库文件 我一直在谷歌上搜索 它看起来像 SQLite 我尝试使用 SQLite 和 SQLite3 驱动程序连接到它 但收到错误 文件已加密或不是数据库 所以我不知道文件是否已加密或者它不是 SQLite
  • CSS:两个 50% 流体列不考虑最小宽度

    我正在尝试使用this用两个 50 列宽代替的布局 但似乎当右列达到其 最小宽度 时 它会进入左列下方 有没有办法使用 垫片 技术来设置包装器的最小宽度 以便两列都停止调整大小 因此 消除了右列发现自己位于左列下方的问题 我的页面如下 di
  • 如何在 Perl 中设置文件读取缓冲区大小以针对大文件进行优化?

    我知道 Java 和 Perl 在读取文件时都非常努力地寻找一种适合所有默认缓冲区大小的方法 但我发现它们的选择越来越过时 并且在更改默认选择时遇到问题珀尔 以 Perl 为例 我相信它使用8K默认情况下的缓冲区 类似于Java的选择 我无
  • printf() 的执行和分段错误

    include
  • 检索和修改 XMLHttpRequest 的内容

    我正在为 Firefox Safari Chrome 开发一个浏览器插件 它将拦截页面上的数据 针对正则表达式运行它 然后如果匹配 则重新格式化它 我使用以下方法在页面加载上进行此操作 var meth replaceInElement f
  • 调用未定义的函数 pg_connect() - Wamp

    我想连接到 PostgreSQL 我使用 wamp 64 位 我这里有 阿帕奇2 4 2 PHP 5 4 3 mysql 5 5 24 我还在 php ini 中取消注释 php pgsql 和 php pdo pgsql 但我无法连接 它
  • C# 验证电子邮件地址是否存在

    关于这个帖子关于电子邮件验证 使用 C 你会怎样 发出 VRFY 命令 发出 RCPT 命令 我想您会发现 在很多情况下 这些功能会故意对您撒谎 以击败垃圾邮件发送者 如果有一种方法可以确认电子邮件的真实性 而不是让用户点击验证 或取消订阅
  • atoi 是一个标准函数。但伊托亚不是。为什么?

    为什么会有这样的区别 我遇到了可怕的问题 假设itoa将在stdlib h最后链接了一个自定义版本itoa使用不同的原型 从而产生一些疯狂的错误 那么 为什么不是itoa不是标准函数 它出什么问题了 为什么标准偏向它的孪生兄弟atoi No
  • 为什么对 sysfs 设备属性文件上的“poll”调用没有正确阻止?

    我有一个简单的sysfs 设备属性它显示在我的下面sysfs目录 并调用read返回内核空间变量的值 我想打电话poll在此属性上允许我的用户空间线程阻塞 直到属性显示的值发生变化 我的问题是poll似乎并没有阻止我的属性 它不断返回POL
  • Angular 2:ngFor 完成时回调

    在 Angular 1 中 我编写了一个自定义指令 repeater ready 来使用ng repeat当迭代完成时调用回调方法 if scope last true timeout gt scope parent parent eval
  • 成员函数的部分特化[重复]

    这个问题在这里已经有答案了 可能的重复 部分模板专业化的 无效使用不完整类型 错误 为什么我可以这样做 template
  • Azure WebJobs SDK ServiceBus 连接字符串“AzureWebJobsAzureSBConnection”丢失或为空

    我在 Visual Studio 2015 中创建了一个 Azure Function App 该应用程序具有服务总线队列的触发器 当我在本地运行该应用程序时 它运行得很好 它能够从服务总线队列 通过名为 AzureSBConnection
  • Firebase 推送通知在 iOS 13 上不起作用

    Firebase 推送通知无法在 iOS 13 上运行 但在 iOS 12 4 中运行良好 有什么解决办法吗 编辑 2019 年 10 月 4 日 静默推送通知在 iOS 13 上不起作用 快速修复解决方案 如果您在 iOS 版本 13 2
  • reinterpret_cast 为 void* 不适用于函数指针

    我想将函数指针重新解释为 void 变量 函数指针的类型将是Class void 下面是示例代码 class Test int a int main Test p void a void f reinterpret cast
  • 自引用外键是什么意思?

    我检查了一个遗留数据库 发现了几个引用列自身的外键 引用的列是主键列 ALTER TABLE SchemaName TableName WITH CHECK ADD CONSTRAINT FK TableName TableName FOR