用于创建表的最佳实践DDL是什么?单个语句包含所有对象或许多单独的语句创建和更改?

ang*_*ger 3 sql oracle ddl

是否有最接近其中一个例子的最佳实践?

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)

这两种情况一般会导致更好的结果吗?第一种选择更具可读性,但也许有理由认为后者更可取.

Wil*_*ung 5

绝对是个人喜好.我更喜欢在单一CREATE TABLE陈述中尽我所能,因为我发现它更简洁.我需要的大部分内容都在那里描述.

有时这是不可能的.假设您有两个表,每个表都有对每个表的引用,或者您希望首先加载包含大量数据的表,因此在加载表后添加其他索引.

您会发现很多从DB创建模式的工具会将它们分开(主要是因为它总是正确的 - 定义所有表,然后定义所有关系).

但就个人而言,如果可行,我发现在一个地方拥有这一切是最好的.


Jef*_*emp 5

在构建最终将由其他人运行的部署脚本时,我更倾向于分割脚本.如果出现问题,从日志中告诉究竟哪些操作失败会更容易一些.

我的表创建脚本通常只有NOT NULL约束.之后将添加PK,唯一和FK约束.

这是一个小问题,我没有特别反对在一个大的CREATE TABLE语句中将它们组合在一起.

您可能会发现您的工作场所已经有了标准.例如,我当前的客户端需要为CREATE TABLE提供单独的脚本,然后为约束,索引等提供更多单独的脚本.

当然,例外是索引组织表,它必须具有预先声明的PK约束.