将记录添加到主表时,postgresql 中的 'link tables' 是否应该自动更新?
Are 'link tables' in postgresql supposed to automatically update when records are added to primary tables?
Noob 问题 - 基本上我正在尝试获取一个 link table 用于自动更新的多对多关系。我真的不知道这是否应该发生,但我认为我也不应该手动将数据复制到其中。
下面是我的 DDL - 如果 glo.link_table
是这样制作的,并且我将数据添加到 glo.collectors
和 glo.natural_hazards
,不应该 glo.link_table
自动更新?现在,当我将数据复制到 glo.collectors
和 glo.natural_hazards
时,glo.link_table
没有做任何事情。我想当我向这两个 table 添加数据时,我希望 glo.link_table
喜欢添加记录。
--Drop if exsits & create
DROP TABLE IF EXISTS glo.collectors CASCADE;
-- Make collectors table
CREATE TABLE glo.collectors (
u_id serial,
user_name text NOT NULL,
password text NOT NULL,
email text NOT NULL,
agency text NOT NULL,
PRIMARY KEY (u_id)
);
--Drop if exsits & create
DROP TABLE IF EXISTS glo.natural_hazards;
-- Create natural hazards table
CREATE TABLE IF NOT EXISTS glo.natural_hazards(
nathaz_id SERIAL,
data_version text,
data_class text, -- class = foundational
agency text NOT NULL,
data_owner text,
data_url text NOT NULL,
keywords text,
spatial_ref text,
creation_date text,
data_description text,
data_purpose text,
fema_sfha text,
event_inundation text,
video_catalog text,
hazard_scale text,
PRIMARY KEY (nathaz_id)
);
--Drop if exsits & create
DROP TABLE IF EXISTS glo.link_table;
-- Create link table
CREATE TABLE IF NOT EXISTS glo.link_table(
u_id int REFERENCES glo.collectors (u_id) ON UPDATE CASCADE ON DELETE CASCADE,
nathaz_id int REFERENCES glo.natural_hazards (nathaz_id) ON UPDATE CASCADE,
CONSTRAINT link_table_pkey PRIMARY KEY (u_id, nathaz_id)
);
否 link_table 不会自动填充。这些列将以类似于 'foreign key' 的方式运行,并确保对可以插入这些列的内容有某种形式的约束。
link_table 中已存在的数据将受到这些列引用的表中数据更改的影响。但是这个数据必须单独插入。
column references documentation
为了自动将数据插入 link_table,我建议可能使用触发器。
Noob 问题 - 基本上我正在尝试获取一个 link table 用于自动更新的多对多关系。我真的不知道这是否应该发生,但我认为我也不应该手动将数据复制到其中。
下面是我的 DDL - 如果 glo.link_table
是这样制作的,并且我将数据添加到 glo.collectors
和 glo.natural_hazards
,不应该 glo.link_table
自动更新?现在,当我将数据复制到 glo.collectors
和 glo.natural_hazards
时,glo.link_table
没有做任何事情。我想当我向这两个 table 添加数据时,我希望 glo.link_table
喜欢添加记录。
--Drop if exsits & create
DROP TABLE IF EXISTS glo.collectors CASCADE;
-- Make collectors table
CREATE TABLE glo.collectors (
u_id serial,
user_name text NOT NULL,
password text NOT NULL,
email text NOT NULL,
agency text NOT NULL,
PRIMARY KEY (u_id)
);
--Drop if exsits & create
DROP TABLE IF EXISTS glo.natural_hazards;
-- Create natural hazards table
CREATE TABLE IF NOT EXISTS glo.natural_hazards(
nathaz_id SERIAL,
data_version text,
data_class text, -- class = foundational
agency text NOT NULL,
data_owner text,
data_url text NOT NULL,
keywords text,
spatial_ref text,
creation_date text,
data_description text,
data_purpose text,
fema_sfha text,
event_inundation text,
video_catalog text,
hazard_scale text,
PRIMARY KEY (nathaz_id)
);
--Drop if exsits & create
DROP TABLE IF EXISTS glo.link_table;
-- Create link table
CREATE TABLE IF NOT EXISTS glo.link_table(
u_id int REFERENCES glo.collectors (u_id) ON UPDATE CASCADE ON DELETE CASCADE,
nathaz_id int REFERENCES glo.natural_hazards (nathaz_id) ON UPDATE CASCADE,
CONSTRAINT link_table_pkey PRIMARY KEY (u_id, nathaz_id)
);
否 link_table 不会自动填充。这些列将以类似于 'foreign key' 的方式运行,并确保对可以插入这些列的内容有某种形式的约束。
link_table 中已存在的数据将受到这些列引用的表中数据更改的影响。但是这个数据必须单独插入。
column references documentation
为了自动将数据插入 link_table,我建议可能使用触发器。