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 名称并不表示每个县一行。至少对那些不熟悉你的域的人来说是这样。
我在 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 名称并不表示每个县一行。至少对那些不熟悉你的域的人来说是这样。