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

Sql 创建表的最佳实践DDL是什么?包含所有对象的单个语句,还是创建和更改多个单独语句?,sql,oracle,ddl,Sql,Oracle,Ddl,是否有最接近这些示例之一的最佳实践 CREATE TABLE TABLE1 ( ID NUMBER(18) CONSTRAINT TABLE1_PK PRIMARY KEY, NAME VARCHAR2(10) CONSTRAINT NAME_NN NOT NULL ); 或 总的来说,这两种情况都会带来更好的结果吗?第一个选项更具可读性,但也许有理由认为后者更可取。在实际的create语句中为字段定义任何属性或默认值是个人的偏好。我注意到的一点是,您的第二条语句将不起作用,

是否有最接近这些示例之一的最佳实践

CREATE TABLE TABLE1 
(
ID   NUMBER(18)     CONSTRAINT TABLE1_PK PRIMARY KEY,
NAME VARCHAR2(10)   CONSTRAINT NAME_NN NOT NULL
);


总的来说,这两种情况都会带来更好的结果吗?第一个选项更具可读性,但也许有理由认为后者更可取。

在实际的create语句中为字段定义任何属性或默认值是个人的偏好。我注意到的一点是,您的第二条语句将不起作用,因为您没有指定id字段为
NOTNULL

我想我预先指定表的主键是提高可读性的个人最佳实践


<> P>创建表时要考虑的另一件事情是您希望如何识别、唯一或复合的项。code>altertable有助于事后创建复合键。

绝对是个人偏好。我更喜欢在单个
createtable
语句中尽可能多地使用它,因为我发现它更简洁。我需要的大部分东西都在这里描述了

有时候这是不可能的。假设您有两个表,每个表都有引用,或者您想先加载一个包含大量数据的表,所以在加载表后添加额外的索引

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


但就个人而言,如果可行的话,我发现将所有内容放在一个地方是最好的。

当构建最终将由其他人运行的部署脚本时,我更喜欢将脚本拆分一段时间。如果出现了问题,那么从日志中更容易判断到底是什么失败了

我的表创建脚本通常只有NOTNULL约束。之后将添加PK、unique和FK约束

尽管这是一个次要的观点,但我并不特别反对将其合并到一个大的CREATETABLE语句中

你可能会发现你的工作场所已经有了一个标准。e、 g.我当前的客户机需要为创建表编写单独的脚本,然后为约束、索引等编写更多单独的脚本


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

请定义“更好的结果”。除了尽可能避免问题之外,我没有任何具体目标。我没有使用oracle的背景,因此问题基于最佳实践。不正确-当您添加PK约束时,如果尚未声明,oracle会自动添加NOT NULL约束。
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));