问题 单项选择题

以下是ORDER(订单)和LINE_ITEM表的结构:
ORDER
-------
ORDER_IDNUMBER(9)
CUSTOMER_ID NUMBER(9)
ORDER_DATE DATE
SHIP_DATEDATE
LINE_ITEM
-----------
LINE_ITEM_ID NUMBER(9)
ORDER_IDNUMBER(9)
PRODUCT_ID NUMBER(9)
QUANTITYNUMBER(5)
在LINE_ITEM表中的ORDER_ID列上有一个外键约束。该外键约束是指向ORDER表的,在如下有关完整性约束错误的陈述中,哪个是正确的

A.为了向ORDER表中插入一条记录,必须向LINE_ITEM表中插入一条记录
B.要修改ORDER表中的一条记录,主记录(Parent Record)必须已经存在于LINE_ITEM表中
C.要从LINE_ITEM表中移除这个约束,必须删除ORDER表中所有的记录
D.要删除ORDER表中的一条记录,必须删除LINE_ITEM表中的任何子记录(Child Record)

答案

参考答案:D

解析: 这一题是测试对外键约束以及外键约束对DML语句影响的理解。根据本题的叙述,可知LINE_ITEM表为子表而ORDER表为主表。
根据有关外键约束对DML语句和DDL语句影响的解释,可知在进行插入操作时,只有操作是在子表或从表这一端时才会产生违反引用完整性的问题,而操作在父表或主表端时则不会,所以可以确定选项A和C肯定不是正确的。
根据有关外键约束的介绍,可知外键约束是用来维护从表和主表之间的引用完整性的,而根据外键和引用完整性中所给出的引用完整性的定义,我们又可以知道外键必须或者为空值或者有相匹配的项,外键可以没有相对应的键属性(列)但不可以有无效的项,所以可以断定选项B肯定是错误的,因为即使在子表LINE_ITEM中主记录不存在也不会违反引用完整性约束。
实际上,到此为止我们已经可以确定只有选项D是正确的了。在删除主表的记录时可能会产生违反引用完整性的问题,这是因为要删除的记录已经被子表中一些记录的外键所引用,为了要删除主表的这一记录,必须先删除子表中所有依赖的子记录,所以选项D是正确的。

选择题
多项选择题