问题标签 [database-integrity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 数据完整性和数据一致性之间有什么区别吗?
我对data consistency
and有点困惑data integrity
。来自Oracle 数据库概念:
来自维基百科
data consistency
那么和 和有什么区别data integrity
呢?
提前致谢。
mysql - 外键约束应该抱怨,但不知何故不是
除其他外,我有三个表account
:address
和account_address
。该account_address
表有一个account_id
和一个address_id
。这是您的标准多对多关系。
我有一个令人困惑的情况,我有一个account_address
指向account
不存在的记录。由于我有一个account_address.account_id
指向的外键account
,这应该不会发生,对吧?
现在让我证明这应该是不可能的事情正在发生。首先,我将向您展示我的表定义:
看?FOREIGN KEY (account_id) REFERENCES account (id)
.
现在这里有一些查询表明约束失败:
该查询给了我以下结果:
因此,显然地址 15116 附加到六个不同的帐户(一个帐户,有趣的是与地址具有相同的 id)。但是看看这个:
没有结果!我的 DBMS 不应该在某个时候告诉我我的外键约束失败了吗?!
我只看到两种可能性:
- 我误解了我所看到的
- 我的 DBMS 在根本上行为不端
我当然希望 #1 是这种情况,但我不知道我可能会误解什么。这对我来说是一个最高级别的谜。任何想法将不胜感激。
database-design - 关于复合主键的问题
示例表:
假设id
和tenant_id
在每个表上组成复合主键,这ticket_id
是一个外键,Ticket
这个设置会保护我免受 a TicketItem
hastenant_id=1
和ticket_id=5
where the Ticket
with id=5
has的情况tenant_id=2
吗?简而言之,数据库是否允许我将 2 个表中的行(每个表都有不同的)链接tenant_id
在一起,破坏我的数据,还是它可以保护我免受这种情况的影响?
另外,上面的例子看起来像是对复合主键的“好”使用吗?
mysql - MySQL:在自己的触发器中更新表
显然 MySQL 有一个非常烦人的限制,即不能更新为同一个表定义的触发器内的表。
我正在使用 MySQL 5.1 版,但出现错误:“无法更新存储函数/触发器中的表,因为它已被调用此函数/触发器的语句使用”。
我所拥有的是:
这是一个分层的文件夹结构。文件夹有一个名称,可能还有一个父文件夹(如果没有,则parentId
为零)。
删除文件夹时,我需要更改其中parentId
的所有子文件夹,以免它们成为不存在文件夹的子文件夹。
它相当简单(几乎微不足道):
但是,MySQL 不允许使用这种简单的触发器,因为正如我上面所说,您无法在其自己的触发器中更新表。
有没有办法通过以某种方式模拟它的效果来实现这样的触发器?
PS:请不要建议按顺序发送两个语句(DELETE 和 UPDATE)。如果没有其他可能,这显然是最后的解决方案。
编辑:
我正在使用 MyISAM 引擎(性能原因),所以我不能使用外键。
mysql - MySQL 5.5 继承关系模型中的完整性约束问题
我有以下数据库关系模式,旨在将 EMP 超类型与两个 FULL_TIME_EMP 和 PART_TIME_EMP 子类型一起建模:
我遇到的问题是完整性问题,即我想确保全职员工在 FULL_TIME_EMP 表中只能有相应的行,同样,兼职员工在 PART_TIME_EMP 表中只能有相应的行。
正如您将从下面的屏幕截图中看到的那样,没有强制执行此完整性约束。
这是 EMP_TYPE 表:
和 EMP 表:
PART_TIME_EMP 表:
最后是显示完整性违规的 FULL_TIME_EMP 表!
有没有办法通过改变我的数据库模型设计来强制执行这种完整性约束,还是我必须求助于触发器?
问候,
database - Oracle 中的完整性约束
假设一个名为的表SuplProd
具有列supplier
和product
两个条目:(Sony Ericcson, Xperia)
和(Apple, iPhone)
。
我想创建一个名为Orders
columnssupplier
和product
的表quantity
。
但是,我希望(supplier, product)
表的组合Orders
仅限于包含来自SuplProd
.
例如,该条目(Sony Ericcson, Xperia, 1)
将对表有效,Orders
而(Apple, Xperia, 1)
不会。
这在 Oracle 中怎么可能?
sql - 你的意见?- 通过 LinkTypeId 链接表
我有一个网络应用程序,将文件和注释链接到客户、用户、项目等。最初,我有诸如 customerNote、userNote、projectNote 等表。
设计注意事项:
1:我不想管理 N 个平方表(超过 100 个 customerNote、userNote、projectNote、... customerFile、projectFile...等表)
2:我不想使用动态 SQL(TableName 来自LinkType)
3:我看不到使用链接表的干净方法(没有 100+ N 平方链接表)
现在,我有一个包含 LinkId 和 LinkTypeId 的 Note 表。LinkId当然是client|User|Project|etc表的PK;LinkTypeId 指向链接的类型。
所以这:
SELECT * FROM customerNote WHERE Id = 1210
SELECT * FROM userNote WHERE Id = 3281
现在变成了这样:
SELECT * FROM Note WHERE LinkId = 1210 AND LinkTypeId = 2
(2 是客户)
SELECT * FROM Note WHERE LinkId = 3281 AND LinkTypeId = 3
(3 是用户)
我喜欢这种方法的简单性,并且我已经将它们包装到我到处调用的函数中。
我的问题是:
1:如果没有参照完整性,我会有什么性能或其他问题?
2:这会导致可扩展性问题吗?
3:有没有优雅的解决方案?
这是我的第一篇 SO 帖子,我提前感谢大家的帮助。
database - 如何更新更多关于在推进中添加关系的表格
我试图找出在更改外键依赖项时更新其他相关表的最佳位置。
准确地说,我有一张名为“flat”的桌子和另一张名为“room”的桌子,其中包含
flat_id: {type: INTEGER, foreignTable:flat, foreignReference: id, required: true }
除了方法 Room::SetFlatId(),Propel (1.3) 也给了我 Room::SetFlat()
但是当我向公寓添加房间时,我想自动更改一些其他相关的表,以保持比数据库定义更高级别的一致性。我想我会覆盖 Flat::addRoom(Room $room) 来调用它的父级,然后进行这些进一步的更改。
但是我遇到了一个问题,因为由于需要“flat_id”列,所以在保存 Room 对象之前总是会调用 SetFlatId() 和 setFlat() 之一。
但是在保存 Room 对象之前,它没有 id,因此我的扩展 addRoom 无法工作,因为没有 room_id 来识别其他表中的相关记录。
这似乎表明我不能将代码放入 Flat::addRoom() 中,这取决于已保存的 Room。但是我可以把我的代码放在哪里?
显然,我可以只要求在制作或更改 Room 对象后手动调用它;但由于它实际上在做的是维护一种更高级别的数据库完整性,所以我不愿意这样做。我可以将它放入一种或两种“保存”方法中;但从逻辑上讲,只有在 Room 和 Flat 之间的关联发生更改时才需要运行它。
这段代码应该去哪里?
django - IntegrityError 重复键值违反唯一约束 - django/postgres
我正在跟进我之前提出的一个问题,在该问题中我试图寻求从愚蠢/写得不好的 mysql 查询到 postgresql 的转换。我相信我成功了。无论如何,我使用的是手动从 mysql 数据库移动到 postgres 数据库的数据。我正在使用如下所示的查询:
我有理由相信这很好用。然而,这又引出了一个新问题。尝试提交时,我从 django 收到一条错误消息,指出:
我查看了此处发布的一些回复,但我还没有找到解决问题的方法(尽管相关问题已经引起了一些有趣的阅读)。我在我的日志中看到了这一点,这很有趣,因为我从不明确调用 insert-django 必须处理它:
但是,尝试运行会导致重复键错误。实际错误在下面的代码中抛出。
我已经检查了序列等,它们似乎是有序的。在这一点上,我不确定该怎么做——我认为这是 django 的结果,但我不确定。任何反馈将不胜感激!
python - django完整性错误,多对多关系
那是我的models.py:
添加用户工作得很好:
尝试添加链接时出现完整性错误:
我错过了什么?