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