简体   繁体   English

外键返回 null

[英]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]
1

When selecting fact_werbepartner I get these null references: [return values fact_werbepartner]选择 fact_werbepartner 时,我得到这些 null 参考:[返回值 fact_werbepartner]
2

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?我该如何解决?

CSV Files CSV 文件

[ERD Diagramm two tables] 【ERD Diagramm 两张表】
4

[ERD DIAGRAMM complete database] [ERD DIAGRAMM 完整数据库]
5

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.csvwp_ansprechpartner_fk中添加ap_partner_id_pkfact_werbepartner.csv中或通过其他方式。 Postgres has no way of establishing that otherwise.否则 Postgres 无法确定这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM