有没有办法避免重复外键的定义?

Ste*_*and 5 postgresql foreign-key syntax

我想知道这个例子

CREATE TABLE cities (
        city     varchar(80) primary key,
        location point
);

CREATE TABLE weather (
        city      varchar(80) references cities(city),
        temp_lo   int,
        temp_hi   int,
        prcp      real,
        date      date
);
Run Code Online (Sandbox Code Playgroud)

cityas的定义在varchar(80) 这里重复。是否有允许不重复的 PostgreSQL 语法varchar(80),仅基于references cities(city)以创建天气表?

Erw*_*ter 6

没有办法做到这一点。而且,坦率地说,我认为没有必要。
请记住,引用列和引用列不必共享相同的数据类型。它们只需要=在它们之间定义一个运算符。

如果您的目标是缩短语法,则可以省略引用列的列(或列列表)(如果它是 PK):

CREATE TABLE weather (
    city      text references cities,
    temp_lo   int,
    ...
Run Code Online (Sandbox Code Playgroud)

示例中的数据类型兼容但不相同(textvs. varchar(80)),假设引用的列是表的主键cities

我引用手册CREATE TABLE

如果省略 refcolumn,则使用 reftable 的主键