何时需要将约束放在主键和外键上?

时间:2017-01-19 21:00:29

标签: sql database

我是SQL新手,正在创建一小组表。这是代码:

CREATE TABLE Patients_T
          (PatientID            INTEGER(11,0)     NOT NULL,
           PatientName          VARCHAR2(30)      NOT NULL,
           PatientAddress       VARCHAR2(40),     NOT NULL,
           PatientPhone         INTEGER,          NOT NULL,
           CareCenterID         INTEGER(11,0)     NOT NULL,
CONSTRAINT Patient_PK PRIMARY KEY(PatientID))
CONSTRAINT Patient_FK FOREIGN KEY(CareCenterID) REFERENCES CareCenter_T(CareCenterID);

在阅读创建表的示例时,一些表会对主键和辅助键强制执行约束,如上所述。我不完全理解CONSTRAINT何时应放在主键或辅助键上?不应该总是在那里,因为你总是想要一个独特的主键吗?

2 个答案:

答案 0 :(得分:2)

你的问题充满了混乱。 "辅助键"不是"外键"。这是一个快速的概要。

  1. 您应该始终在表格上声明主键。最典型的方式是:

    PatientID INTEGER(11) PRIMARY KEY
    

    NOT NULL是可选的,因为它是主键定义的一部分。)

    这是在线版本。您也可以在CREATE TABLE语句中的另一行执行此操作:

    PatientID INTEGER(11) NOT NULL,
    . . .
    PRIMARY KEY (PatientId)
    

    或使用明确的CONSTRAINT声明:

    PatientID INTEGER(11) NOT NULL,
    . . .
    CONSTRAINT pk_patients_patientid PRIMARY KEY (PatientId)
    

    这三者基本相同。在某些情况下,命名约束可能很有用。

  2. 您想要声明外键。这些也可以是内联的(在大多数数据库中):

    CareCenterID INTEGER(11) NOT NULL REFERENCES CareCenter_T(CareCenterId)
    

    明确声明外键的目的是使数据库保证值一致。

  3. 如果另一列或一组列是唯一的,那么您应该将它们声明为唯一。

答案 1 :(得分:1)

约束不是密钥的补充,而是定义密钥。当您询问"何时应将CONSTRAINT置于主键或辅助键上?" 您对该情况的看法不正确。如果没有约束条件,您就不会拥有密钥。

换句话说,没有可以拥有没有约束的密钥的情况。如果没有约束,则无论您决定为列命名,都没有密钥。