SQL: 复合主键作为外键

SQL: Composite primary key as foreign key

我在 postgres 中创建了一个关于纽约县 2010 年至 2019 年教育援助金额和犯罪率的数据库,这是两个表

CREATE TABLE NYAidCrimeTimeSeries 
(
    County VARCHAR(50),
    Year int,
    AidAmount int,
    Population int,
    JailPopulation int,
    CrimesReported int,
    PRIMARY KEY (County, year)
)

CREATE TABLE NYAidCrimeMean 
(
    County VARCHAR(50),
    AidAmount_mean int,
    Population_mean int,
    JailPopulation_mean int,
    CrimesReported_mean int,
    AidPerCap int,
    CrimesPerCap int,

    FOREIGN KEY (County) REFERENCES nyaidcrimetimeseries (County)
)

这可能吗?有复合主键作为外键?如果不行,我该往哪个方向努力呢?

外键的目的是保证一个 table 中的一个或多个键在另一个 table 中有对应的行。此上下文中的“a”是单数。而且,一般来说,外键应该使用主键。允许任何唯一键,但强烈建议使用主键。

您的数据模型正需要 counties table。至少:

create table counties (
     county_id int generated always as identity primary key,
     name varchar(255)
);

然后 county_id 可以成为其他 table 中的外键。好吧,事实上,也许汇总统计数据也可以是 counties.

中的列

嗯嗯。 . .您可能只是将外键定义放在了错误的位置。您希望 county 成为 NYAidCrimeMean 的主键,然后让 NYAidCrimeTimeSeries 引用 table.

如果您确实采用这种方法,我建议重命名 NYAidCrimeMean,因为 table 名称并不表示每个县一行。至少对那些不熟悉你的域的人来说是这样。