【问题标题】:Primary key defined by many attributes?由许多属性定义的主键?
【发布时间】:2010-11-15 06:04:50
【问题描述】:

我可以根据三个属性定义一个主键吗?我正在使用 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 可以澄清这个问题。

【问题讨论】:

    标签: postgresql primary-key


    【解决方案1】:

    是的,正如您所展示的那样。(尽管我质疑您对 2. 和 3. 列的命名。)

    来自docs

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是软件的原因,VP。
      【解决方案3】:
      1. 是的,你可以
      2. 如果您运行它 - 您很快就会看到它。
      3. 我真的,真的,真的建议重新考虑命名约定。包含序列整数的时间列?像“{Users}{userID}user_id”这样的列名?天哪。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        • 2011-10-12
        • 1970-01-01
        相关资源
        最近更新 更多