gpt4 book ai didi

relational-database - 在关系数据库中表示多态关联的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:17:10 25 4
gpt4 key购买 nike

假设表格的这种表示:

db parent/child tables

Object 是包含所有其他 4 个子表的 objectid 的“父”表。
'something' 表除了有一个 objectid 列之外,还将包括 linked_to_objectid 列。此列仅指向来自 object1 和 object2(而不是来自 object3)的 objectid。

我的问题是我每次插入一行时都必须检查,如果 linked_to_objectid 不是来自 object3 。

另一种方法是在对象表中添加另一列来描述 objectid 是什么类型的对象......但我觉得这是错误的。

我知道这个模型违反了正常的形式规则,但我找不到其他方法。
任何人都可以帮助我并找到最好的建模方法吗?

最佳答案

我认为您的答案是在表中使用互惠的主键/外键和主键的分区部分,例如:

 CREATE TABLE object_class (
id int not null unique, -- hand assigned
label text not null primary key
);

CREATE TABLE object (
object_id bigserial not null primary key,
class_id int not null references object_class(id),
....,
UNIQUE (object_id, class_id)
);

CREATE TABLE object1 (
object_id bigint not null,
class_id bigint not null,
.....
check(class_id = 1),
primary key (object_id, class_id),
foreign key (object_id, class_id) references object(object_id, class_id)
);

etc.

现在,如果您使用的是 PostgreSQL,您可能可以使用表继承和约束触发器来实现一些更简洁的东西,但这是相对高级的东西。

关于relational-database - 在关系数据库中表示多态关联的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com