我有一个包含三个表的数据库,分别称为cql> show version;
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
,foo
和bar
。 baz
的每个实例都引用bar
的实例,尽管在baz
表中可能没有引用baz
的实例。在大多数情况下,bar
的实例将引用foo
的实例(因此可以映射到bar
的实例。)但是在某些情况下,{{1}的实例}将直接引用baz
表。
在不存在foo
-baz
关系的简化版本中,我可以轻松地使foo
成为baz
表的主键的一部分,除了在barid
偶尔为null之外,我想在这里做这件事。
因此,foo
表中的示例可能如下所示:
barid
问题在于如何处理为foo
表创建主键。我应该使用唯一索引而不是约束吗?为了连接foo和fooid barid bazid
1 1 NULL
2 2 NULL
3 NULL 9
4 17 NULL
表,我还可以创建foo
的虚拟实例。在这种情况下,我可以添加一个bar
字段,这样我就知道是什么情况。我敢肯定有人会告诉我为什么这是个坏主意。
答案 0 :(得分:0)
在不了解应用程序和实现的情况下,无法直接回答该问题。请在下面查看为表之间的关系而创建的其他排列。
fooid barid bazid
1 1 NULL
2 2 NULL
3 NULL 9
4 17 NULL
5 18 6
6 14 6
6 18 10
该问题的通用答案是请不要创建伪值,而bar id主键将仅是fooid。如果fooid,barid和bazid总是唯一的,则添加唯一约束。