Oracle 11g OCP 051 题目涉及数据库管理系统中的表结构理解和SQL命令的分析。该部分要求考生理解外键约束和默认值在创建新表时的角色。题目给出了一个CREATE TABLE命令示例,试图创建一个新的名为new_sales的表,其结构包括prod_id、cust_id和order_date列,其中prod_id和time_id是从sales表中通过SELECT语句获取的,并且order_date列设置了默认值SYSDATE。
首先,我们需要了解关键概念:
1. 外键(Foreign Key):在数据库设计中,当一个表的某个字段引用另一个表的主键时,这个字段就被称为外键。在这个例子中,prod_id列是SALES表的外键,引用PRODUCTS表;同样,cust_id和time_id列分别是SALES表对外键CUST_ID和TIME_ID的引用,分别指向CUSTOMERS和TIMES表。
问题的核心在于分析CREATE TABLE命令中的行为:
A选项错误,因为实际上允许在列定义中指定默认值,如题目中所示的order_date DEFAULT SYSDATE。
B选项不正确,尽管命令中指定了NOT NULL约束,但CREATE TABLE命令本身并不传递这些约束到新表,除非显式声明。
C选项看似合理,但根据题目描述,命令中的列名与SELECT子句中的列匹配,所以这不是阻止新表创建的原因。
D选项是正确的答案。当创建新表new_sales时,虽然没有明确提及外键约束,但因为prod_id、cust_id和time_id都是外键,它们在原sales表中的外键约束会自动传递到新表中。这意味着新表new_sales将包含这些列,并且它们的外键关系会得到维护,即使order_date列没有直接提及外键。
总结来说,正确答案是D,表示新的new_sales表会成功创建,并且从sales表继承了prod_id和cust_id的外键约束,尽管order_date列没有直接的外键关联,但它作为SELECT语句的一部分,其默认行为也会被考虑在内。对于数据库管理员或开发者来说,理解这种行为至关重要,特别是在设计和迁移数据表时。