考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

某电商订单表中的主键为订单号,根据业务常识判断不能存放于订单表中的字段是()
A. 客户ID
B. 产品名称
C. 付费时间
D. 产品金额
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

一个订单中可能存在多个产品,所以存放产品名称字段会破坏主键约束。同样的产品金额也不可以,订单金额是没问题的。所以选BD。

### 答案
B 产品名称
D 产品金额

### 题目解析
该问题基于数据库设计中的业务常识和规范化原则,判断哪些字段不适合存放于电商订单表中。订单表的主键是订单号,表示每个订单的唯一标识。以下是详细解析:

#### 1. **订单表的设计原则**:
- 订单表应只存储与订单直接相关的属性,即函数依赖于订单号(主键)的字段。
- 避免存储与其他实体(如客户、产品)相关的属性,以减少数据冗余和更新异常。
- 在电商系统中,订单表通常包含:订单号(主键)、客户ID(外键)、订单时间、付费时间、订单总金额等。
- 产品相关信息(如产品名称、产品单价)应存储在产品表或订单详情表中,因为一个订单可能包含多个产品。

#### 2. **选项分析**:
- **A 客户ID**:可以存放于订单表中。
- 理由:客户ID是订单的直接关联属性,每个订单对应一个客户。它作为外键引用客户表,符合业务常识和规范化设计。
- **B 产品名称**:不能存放于订单表中。
- 理由:产品名称是产品实体的属性,而非订单属性。一个订单可能包含多个产品,如果存储在订单表中,会导致以下问题:
- 数据冗余:如果多个订单包含相同产品,产品名称会被重复存储。
- 更新异常:如果产品名称更改,所有相关订单都需要更新,难以维护。
- 违反第一范式:订单表的一行代表一个订单,无法容纳多个产品名称。产品名称应存储在产品表中,并通过订单详情表关联。
- **C 付费时间**:可以存放于订单表中。
- 理由:付费时间是订单的直接属性,表示订单支付的具体时间。它函数依赖于订单号(主键),没有冗余或规范化问题。
- **D 产品金额**:不能存放于订单表中。
- 理由:这里的“产品金额”指产品的单价或单个产品的金额(而非订单总金额)。它属于产品属性或订单项属性,而非订单属性。问题包括:
- 依赖关系:产品金额不函数依赖于订单号(主键),而是依赖于具体产品(通过产品ID)。
- 业务逻辑:订单可能包含多个产品,每个产品的金额应存储在订单详情表中。订单表只应存储订单总金额(如总支付金额)。
- 如果存储在订单表中,会导致数据冗余和更新困难。

#### 3. **为什么是B和D?**
- **业务常识**:在电商系统中:
- 订单表管理订单级别的信息(如谁下单、何时支付、总金额)。
- 产品级别的信息(如产品名称、产品单价)应通过关联表(产品表、订单详情表)管理。
- **规范化原则**:
- 产品名称(B)和产品金额(D)都不函数依赖于订单号主键,因为它们与产品实体相关。
- 存储这些字段会导致部分依赖或冗余,违反数据库第二范式(2NF)或第三范式(3NF)。
- 因此,B和D是正确答案。

#### 4. **补充说明**:
- 如果“产品金额”被误解为订单总金额,则可能可以存放。但根据选项字面“产品金额”(product amount),它明确指代产品级别的金额,故不能存放。
- 付费时间(C)和客户ID(A)是合适的,不影响规范化。

综上,根据业务常识和数据库设计原则,不能存放于订单表中的字段是**B 产品名称**和**D 产品金额**。