是否有最接近其中一个例子的最佳实践?
CREATE TABLE TABLE1
(
ID NUMBER(18) CONSTRAINT TABLE1_PK PRIMARY KEY,
NAME VARCHAR2(10) CONSTRAINT NAME_NN NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
要么
CREATE TABLE TABLE1
(
ID NUMBER(18),
NAME VARCHAR2(10) CONSTRAINT NAME_NN NOT NULL
);
ALTER TABLE TABLE1 ADD CONSTRAINT TABLE1_PK
PRIMARY KEY (ID)
USING INDEX (CREATE UNIQUE INDEX IDX_TABLE1_PK ON TABLE1 (ID));
Run Code Online (Sandbox Code Playgroud)
这两种情况一般会导致更好的结果吗?第一种选择更具可读性,但也许有理由认为后者更可取.
绝对是个人喜好.我更喜欢在单一CREATE TABLE陈述中尽我所能,因为我发现它更简洁.我需要的大部分内容都在那里描述.
有时这是不可能的.假设您有两个表,每个表都有对每个表的引用,或者您希望首先加载包含大量数据的表,因此在加载表后添加其他索引.
您会发现很多从DB创建模式的工具会将它们分开(主要是因为它总是正确的 - 定义所有表,然后定义所有关系).
但就个人而言,如果可行,我发现在一个地方拥有这一切是最好的.
在构建最终将由其他人运行的部署脚本时,我更倾向于分割脚本.如果出现问题,从日志中告诉究竟哪些操作失败会更容易一些.
我的表创建脚本通常只有NOT NULL约束.之后将添加PK,唯一和FK约束.
这是一个小问题,我没有特别反对在一个大的CREATE TABLE语句中将它们组合在一起.
您可能会发现您的工作场所已经有了标准.例如,我当前的客户端需要为CREATE TABLE提供单独的脚本,然后为约束,索引等提供更多单独的脚本.
当然,例外是索引组织表,它必须具有预先声明的PK约束.