主键由许多属性定义?

时间:2009-07-29 21:48:21

标签: postgresql primary-key

我可以根据三个属性定义主键吗?我正在使用Visual Paradigm和Postgres。

CREATE TABLE answers (
  time                          SERIAL NOT NULL, 
  "{Users}{userID}user_id"     int4 NOT NULL, 
  "{Users}{userID}question_id" int4 NOT NULL, 
  reply                        varchar(255), 
  PRIMARY KEY (time, "{Users}{userID}user_id", "{Users}{userID}question_id"));

picture可能会澄清问题。

3 个答案:

答案 0 :(得分:2)

是的,你可以,就像你展示的那样。(虽然我质疑你对2.和3.专栏的命名。)

来自docs

“主键也可以约束多个列;语法类似于唯一约束:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

主键表示列或列组可用作表中行的唯一标识符。 (这是主键定义的直接结果。请注意,唯一约束本身不提供唯一标识符,因为它不排除空值。)这对于文档目的和客户端应用程序都很有用。例如,允许修改行值的GUI应用程序可能需要知道表的主键才能唯一地标识行。

一个表最多只能有一个主键(虽然它可以有许多唯一且非空的约束)。关系数据库理论规定每个表必须有一个主键。 PostgreSQL不强制执行此规则,但通常最好遵循它。 “

答案 1 :(得分:0)

是的,你可以。 documentation.中只有这样的例子。但是,我不熟悉您正在使用的括号中的术语。您是否在创建数据库模式之前进行了一些变量评估?

答案 2 :(得分:0)

  1. 是的,你可以
  2. 如果你运行它 - 你会立刻看到它。
  3. 我真的,真的,真的建议重新考虑命名约定。包含序列整数的时间列?列名称如“{Users} {userID} user_id”?哦,我的。