Questions tagged «referential-integrity»

30
外键怎么了?
我记得在播客014中听到乔尔·斯波尔斯基(Joel Spolsky)提到他几乎从未使用过外键(如果我没记错的话)。但是,对我来说,它们对于避免整个数据库中的重复和后续数据完整性问题至关重要。 人们为什么会有一些扎实的理由(避免按照堆栈溢出原则进行讨论)? 编辑: “我还没有创建外键的理由,所以这可能是我真正设置外键的第一个理由。”

4
使用空列创建唯一约束
我有一个具有这种布局的表: CREATE TABLE Favorites ( FavoriteId uuid NOT NULL PRIMARY KEY, UserId uuid NOT NULL, RecipeId uuid NOT NULL, MenuId uuid ) 我想创建一个类似于以下的唯一约束: ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId); 但是,这将允许多行具有相同的(UserId, RecipeId)if MenuId IS NULL。我想允许NULL在MenuId存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个。 到目前为止,我的想法是: 使用一些硬编码的UUID(例如全零)而不是null。 但是,MenuId每个用户的菜单都有FK约束,因此我不得不为每个用户创建一个特殊的“空”菜单,这很麻烦。 而是使用触发器检查是否存在空条目。 我认为这很麻烦,我喜欢尽可能避免触发事件。另外,我不信任他们以确保我的数据永远不会处于错误状态。 只需忘记它,然后检查中间件或插入函数中以前是否存在空条目,并且没有此约束。 我正在使用Postgres 9.0。 我有什么方法可以忽略吗?
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.