我前几天正在考虑规范化,而且我想到了,我想不出一个数据库中应该有1:1关系的时间.
名称:SSN?我将它们放在同一个表PersonID:AddressID?同样,同桌.
我可以提出一个很多或者很多的例子:很多(有适当的中间表),但从不是1:1.
我错过了一些明显的东西吗
我有一个SQL-Server 2008数据库和一个使用外键约束来强制引用完整性的模式.按预期工作.现在,用户创建原始表的视图以仅处理数据的子集.我的问题是过滤某些表中的某些数据集而不是其他表中的某些数据集会违反外键约束.
想象一下两个表"一"和"两个"."one"只包含值为1,2,3的id列."两个"引用"一个".现在,您可以在两个表上创建视图.表"one"的视图不会过滤任何内容,而表"one"的视图会删除除第一行之外的所有行.你最终会在第二个视图中找到无处可见的条目.
有什么方法可以避免这种情况吗?你能在视图之间有外键约束吗?
回应一些评论的一些澄清:
我知道即使通过视图插入,底层约束也将确保数据的完整性.我的问题在于使用视图的语句.这些语句是在考虑原始表的情况下编写的,并假设某些连接不会失败.使用表时,此假设始终有效 - 但视图可能会破坏它.
首先创建视图时加入/检查所有约束是因为大量的引用表而导致的.因此,我希望避免这种情况.
我知道如何使用以下类型的代码在Mongoose实体之间建立一对多的关系:
friends: [{type: ObjectId, ref: 'User'}]
Run Code Online (Sandbox Code Playgroud)
但是如果我想只有一对一的关系怎么办 - 比如这个用户与哪个客户有关?
我在SQLite中有两个表,对一对多关系进行建模:
CREATE TABLE parent (
id INTEGER PRIMARY KEY,
payload TEXT
);
CREATE TABLE child (
id INTEGER PRIMARY KEY,
flag BOOLEAN,
parent_id INTEGER,
FOREIGN KEY(parent_id) REFERENCES parent (id) ON DELETE CASCADE ON UPDATE CASCADE,
);
Run Code Online (Sandbox Code Playgroud)
有没有把一个办法CHECK CONSTRAINT上child.flag,所以总有一个且只有一个True在所有child任何parent?
sql ×3
foreign-keys ×1
mongodb ×1
mongoose ×1
node.js ×1
one-to-one ×1
sql-server ×1
sqlite ×1
t-sql ×1
views ×1