Questions tagged «constraint»

一种声明性机制,例如检查或外键,用于在数据库中强制执行某些数据完整性规则。

4
实体关系问题
我有4个与此相关的表(这是一个示例): Company: ID Name CNPJ Department: ID Name Code ID_Company Classification: ID Name Code ID_Company Workers: Id Name Code ID_Classification ID_Department 假设我有一个classification带id = 20, id_company = 1。并且department具有id_company = 2(代表另一家公司)。 这将允许创建来自两家公司的工人,因为分类和部门分别链接到该公司。我不希望这种情况发生,所以我认为我的人际关系存在问题,我不知道该如何解决。



1
在使用pg_restore.exe之前禁用约束
当我尝试pg_restore.exe从数据库执行转储文件时,它会引发数十个错误,所有错误均相同: ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" 这显然是由于我在从转储文件(该文件来自生产数据库)还原数据库之前清空了数据库的事实...当然,如果一个引用表为空,则没有外键约束可以... 在我调用之前pg_restore.exe和之后,有没有一种方法可以针对所有表禁用约束和所有外键,然后重新启用约束和外键。 在SO中,我发现了一些有趣的东西:将约束检查推迟到提交时间。但是我认为在推迟约束之后我不能pg_restore.exe从内部打电话psql.exe。 也有这篇帖子,可以追溯到10年前,建议删除然后重新添加约束。或将pg_class重新触发的值更改为0,这对于约束也可能是可行的...但是,恐怕它比好的实践更容易被黑客入侵... 您有什么建议,这种情况下的最佳做法是什么?是否pg_dump.exe 与该-clean标志一起使用会创建一个转储,从而在还原数据库时绕过约束检查?

2
条件外键关系
我目前在两个实体之间有一个外键,我想使该关系以表之一的entityType为条件。这是表格的层次结构,这是通过FK从孩子到父母的折算完成的 Store / \ Employees \ TransactionalStores / | \ Kiosks | BrickMortars Onlines 我目前有从员工到商店的FK关系 ALTER TABLE Employees ADD CONSTRAINT Employee_Store FOREIGN KEY (TransStoreId) REFERENCES TransactionalStores(StoreId) 我想添加条件: WHERE TransactionalStores.storeType != 'ONLINE_TYPE' 这是否可能,或者我必须将TransactionalStores分为两个新的子类型(例如PhysicalStores和VirtualStores)

2
SQL Server可以在系统生成的约束名称中创建冲突吗?
我有一个可以在SQL Server 2008数据库(非群集)中创建数百万张表的应用程序。我希望升级到SQL Server 2014(群集),但在负载下却遇到错误消息: “数据库中已经存在一个名为'PK__tablenameprefix__179E2ED8F259C33B'的对象” 这是系统生成的约束名称。它看起来像是随机生成的64位数字。由于表格数量众多,我是否有可能看到冲突?假设我有1亿张表,那么在添加下一张表时,我计算出发生冲突的机会要小于1万亿分之一,但这假设分布是一致的。SQL Server是否有可能在2008年和2014年之间更改其名称生成算法以增加发生冲突的可能性? 另一个明显的不同是,我的2014年实例是一个成对的,但是我正在努力形成一个假设,说明为什么会产生上述错误。 PS:是的,我知道创建数百万张表很疯狂。这是我无法控制的黑匣子第三方代码。尽管有精神错乱,但它在2008版中仍然有效,现在在2014版中不再适用。 编辑:仔细检查后,生成的后缀似乎总是以179E2ED8开头-这意味着随机部分实际上只是一个32位数字,每次添加新表时,冲突几率仅为50分之一。与我看到的错误率更接近!

2
约束-一个布尔行为true,所有其他行为false
我有一列: standard BOOLEAN NOT NULL 我想强制执行True,其余所有都设置为False。根据此约束,没有FK或其他任何内容。我知道我可以用plpgsql完成它,但这似乎像是一把大锤。我更喜欢a CHECK或UNIQUE约束。越简单越好。 一行必须为True,不能全部为False(因此,插入的第一行必须为True)。 该行将需要更新,这意味着我必须等待检查约束,直到更新完成,因为所有行都可能先设置为False,然后再设置为True。 products.tax_rate_id和之间有一个FK tax_rate.id,但与默认税率或标准税率无关,用户可以选择默认税率或标准税率来轻松创建新产品。 PostgreSQL 9.5(如果重要)。 背景 该表是税率。税率之一是默认税率(standard因为默认税率是Postgres命令)。添加新产品时,将对产品应用标准税率。如果没有standard,则数据库必须进行猜测或进行各种不必要的检查。我认为,简单的解决方案是确保存在standard。 上面的“默认”是指表示层(UI)。有一个用于更改默认税率的用户选项。我或者需要添加额外的检查以确保GUI /用户不会尝试将tax_rate_id设置为NULL,或者只是设置默认税率。

4
在列上放置约束(索引)
如何修改具有索引的表的类型?我试图在一个空表上做一个alter列,以将类型从日期时间修改为varchar(15),并收到错误消息说它对列有依赖性(原来是索引)。 通过右键单击索引并编写脚本脚本,可以轻松地在本地解决此问题,但需要在无法访问索引名称的其他服务器上进行扩展。 有没有办法使脚本删除所有索引,让我在列上更改数据类型,然后读取索引?谢谢!

2
SQL Server 2005中对可空列的唯一约束
在这个我正在从事的项目中,我需要将一个特定的字段设置为唯一(不是问题!),但是如果该字段为null,则希望忽略约束。在Sql Server 2008中,我使用如下所示的过滤索引,但是在早期版本的SQL中不可用! CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC ON [User] (pinNr) WHERE UserName IS NOT NULL 但是我认为SQL Server 2005中不提供此功能。实际上,此博客文章指出,存在一种使用触发器检查唯一性的解决方法。有人有这样的例子吗?还是替代方案? 不幸的是,对于此特定客户端,无法升级到SQl Server 2008!

3
创建表时如何添加默认约束?SQL Server [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) 但是,我在默认约束附近收到一条错误消息,因为, 'for'附近的语法不正确

2
MySQL-删除具有外键约束且引用自身的行
我有一个表,用于存储用户在我的网站上发布的所有论坛消息。消息层次结构是使用嵌套集模型实现的。 以下是该表的简化结构: ID(主键) Owner_Id(对ID的外国主要参考) Parent_Id(对ID的外国主要参考) 左 好吧 级别 现在,表格看起来像这样: + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | Id | Owner_Id | Parent_Id | nleft | nright | nlevel | + ------- + ------------- + -------------- + ---------- + ----------- + ----------- + | 1 …

1
检查约束以强制执行###。###。####模式匹配
我希望有一个检查约束,可以对多部分代码强制执行此正则表达式模式: ^\d{3}\.\d{3}\.\d{4}$ ...三个数字,一个句号,三个数字,一个句号,四个数字 我是否需要创建CLR函数来实施模式匹配,并且可以在DDL中引用CLR函数吗? 有没有一种方法可以使用另一种方式来实施模式LIKE?

5
为什么此UPDATE会因唯一的键约束冲突而失败?
我是一个“偶然的” DBA,相对缺乏经验并且对此问题感到困惑。 运行MS SQL Server2012。问题在于此UPDATE语句: UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> 'A' 哪个应该只更新vReclaimable视图返回的tAccts表中的行。 vReclaimable视图基于tAccts表,并返回tAccts中的行的子集。 当我运行它时,它会失败并出现一个唯一的关键错误: (0 row(s) affected) …

1
将输入限制为几个不同的字符串
嗨,我似乎无法以我期望的方式在postgreSQL中获得约束。从pgadmin内部,我执行以下SQL查询。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; 执行后将转换为。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK …

2
外键约束违规问题
我确定了3种情况。 没有入学的学生。 有入学但没有成绩的学生。 具有入学和成绩的学生。 注册表上有一个触发器来计算GPA。如果学生有成绩,它将更新或在GPA表中插入一个条目;没有成绩,没有GPA表条目。 我可以删除没有注册的学生(#1)。我可以删除具有入学和成绩的学生(以上#3)。但是我不能删除没有注册但没有成绩的学生(#2)。我收到了参考约束违规。 DELETE语句与REFERENCE约束“ FK_dbo.GPA_dbo.Student_StudentID”冲突。在数据库“”,表“ dbo.GPA”的“ StudentID”列中发生了冲突。 如果我无法删除没有注册(也没有GPA条目)的新学生,那么我会理解违反约束的条件,但是我可以删除该学生。这是一个学生,没有注册并且没有成绩(我也没有GPA条目),我无法删除。 我已修补好扳机,因此可以继续前进。现在,如果您已注册,则无论如何触发器都会将您插入GPA表。但是我不理解潜在的问题。任何解释将不胜感激。 物有所值: Visual Studio 2013专业版。 IIS Express(VS2013内部)。 使用EntityFramework 6.1.1的ASP.NET Web App。 MS SQL Server 2014企业版。 GPA.Value可为空。 Enrollment.GradeID为空。 这是数据库的一个片段: - 编辑 - 这些表都是由EntityFramework创建的,我使用SQL Server Management Studio生成了这些表。 这是带有约束的创建表语句: GPA 表: CREATE TABLE [dbo].[GPA]( [StudentID] [int] NOT NULL, [Value] [float] NULL, CONSTRAINT …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.