我是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何时应放在主键或辅助键上?不应该总是在那里,因为你总是想要一个独特的主键吗?
答案 0 :(得分:2)
你的问题充满了混乱。 "辅助键"不是"外键"。这是一个快速的概要。
您应该始终在表格上声明主键。最典型的方式是:
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)
这三者基本相同。在某些情况下,命名约束可能很有用。
您想要声明外键。这些也可以是内联的(在大多数数据库中):
CareCenterID INTEGER(11) NOT NULL REFERENCES CareCenter_T(CareCenterId)
明确声明外键的目的是使数据库保证值一致。
如果另一列或一组列是唯一的,那么您应该将它们声明为唯一。
答案 1 :(得分:1)
约束不是密钥的补充,而是定义密钥。当您询问"何时应将CONSTRAINT置于主键或辅助键上?" 您对该情况的看法不正确。如果没有约束条件,您就不会拥有密钥。
换句话说,没有可以拥有没有约束的密钥的情况。如果没有约束,则无论您决定为列命名,都没有密钥。