[英]Foreign key returns null
iam working on my first database in postgresql and I am stuck with a problem I cannot solve.我正在 postgresql 中处理我的第一个数据库,但我遇到了一个我无法解决的问题。 After implementing the database, I started inserting dummy data via data.csv files.
实现数据库后,我开始通过 data.csv 文件插入虚拟数据。 After doing i realized that my foreign keys always return null.
之后我意识到我的外键总是返回 null。 For example the foreign key from the table fact_werbepartner references to the primary key dim_ansprechpartner.
例如,fact_werbepartner 表中的外键引用了主键 dim_ansprechpartner。
My desired is that the foreign key inherits the primary key numbers so I can JOIN tables!我想要的是外键继承主键号,这样我就可以加入表了!
When selecting dim_ansprechpartner get the following information: [return values dim_ansprechpartner]选择 dim_ansprechpartner 时获取以下信息:[返回值 dim_ansprechpartner]
When selecting fact_werbepartner I get these null references: [return values fact_werbepartner]选择 fact_werbepartner 时,我得到这些 null 参考:[返回值 fact_werbepartner]
FYI: When I add the NOT NULL Constraint, I get the following error message: column "wp_ansprechpartner_fk" of relation "fact_werbepartner" contains null values ( which is kinda obvious..)仅供参考:当我添加 NOT NULL 约束时,我收到以下错误消息:关系“fact_werbepartner”的列“wp_ansprechpartner_fk”包含 null 值(这很明显。)
Stuck with this problem for hours?被这个问题困扰了好几个小时? How can I solve it?
我该如何解决?
[ERD Diagramm two tables] 【ERD Diagramm 两张表】
[ERD DIAGRAMM complete database] [ERD DIAGRAMM 完整数据库]
CREATE TABLE IF NOT EXISTS dim_ansprechpartner(
ap_partner_id_pk serial NOT NULL,
ap_partnername varchar(30) NOT NULL,
ap_Telefonnummer varchar(30),
PRIMARY KEY (ap_partner_id_pk)
);
CREATE TABLE IF NOT EXISTS fact_werbepartner(
wp_firmen_id_pk serial NOT NULL,
wp_firmenname varchar (50) NOT NULL,
wp_firmengroesse int,
wp_ansprechpartner_fk int NOT NULL,
PRIMARY KEY (wp_firmen_id_pk),
FOREIGN KEY (wp_ansprechpartner_fk)
REFERENCES dim_ansprechpartner(ap_partner_id_pk)
);
COPY dim_ansprechpartner(ap_Partnername, ap_Telefonnummer)
FROM 'C:\Users\xxxx\Desktop\mock data\dim_ansprechpartner.csv'
DELIMITER ','
CSV HEADER;
COPY fact_werbepartner(wp_firmenname,wp_firmengroesse)
FROM 'C:\Users\xxxx\Desktop\mock data\fact_werbepartner.csv'
DELIMITER ','
CSV HEADER;
A FOREIGN KEY
establishes a relationship between two tables and you don't have that. FOREIGN KEY
建立了两个表之间的关系,而您没有。 When you do COPY dim_ansprechpartner(ap_Partnername, ap_Telefonnummer)
the ap_partner_id_pk
is going to be automatically filled with integers.当您执行
COPY dim_ansprechpartner(ap_Partnername, ap_Telefonnummer)
时, ap_partner_id_pk
将自动填充整数。 Each time you do that it will be an incremented set of numbers unless you reset the sequence behind the serial
type.每次这样做时,除非您重置序列类型后面的
serial
,否则它将是一组递增的数字。 In any case when you do COPY fact_werbepartner(wp_firmenname,wp_firmengroesse)
the wp_ansprechpartner_fk
field will not be filled in, hence the NULLs
you see.在任何情况下,当您执行
COPY fact_werbepartner(wp_firmenname,wp_firmengroesse)
时,不会填写wp_ansprechpartner_fk
字段,因此您会看到NULLs
。 Since that is the FK to dim_ansprechpartner
there will be no relationship.由于这是
dim_ansprechpartner
的 FK,因此不会有任何关系。 You at some point need to make that relationship explicit.你在某些时候需要明确这种关系。 Either by adding
ap_partner_id_pk
in dim_ansprechpartner.csv
and wp_ansprechpartner_fk
in fact_werbepartner.csv
or by some other means.通过在
dim_ansprechpartner.csv
和wp_ansprechpartner_fk
中添加ap_partner_id_pk
在fact_werbepartner.csv
中或通过其他方式。 Postgres has no way of establishing that otherwise.否则 Postgres 无法确定这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.