1

我需要表示一个名为 E-Report 的表单,用户将在其中添加数据。

每个 E-Report都会有一个QAP,每个 E- 都会QAP有两个或更多Defects

这些缺陷将在此表中显示:

在此处输入图像描述

第一次,这个表会有两个缺陷,用户可以从 QAP 中添加更多的缺陷,或者如果他/她认为有必要插入新的缺陷。

用户将检查或不检查CRS,和列CRF,我会将这些数据保存在表格中。MAMIEReportDefect

顺便说一句,QAP数据Defect将在网络服务中,我需要将其下载到我的 Android 设备上。我无法修改这两个表以添加更多数据。

为了表示我设计了这个 Visio:

在此处输入图像描述

因为我无法将数据添加到Defect表中,所以我创建了EReportDefect表来存储CRS、、和用户数据,并存储用户创建的新缺陷CRFMAMI

为了表示Defect用户添加的新内容,我设置EReportDefect.defectId为 NULL 并EReportDefect.description存储新的缺陷描述。

这些新缺陷将没有价值EReportDefect.defectId和价值EReportDefect.description

它是否正确?我可以有一个带有 NULL 值的外键列吗?你知道更好的方法吗?

4

1 回答 1

3

可以为空的外键是完全可以接受的。

考虑以下情况,设计用于由用户响应的消息表。

CREATE TABLE Messages 
(
  MessageId int,
  MessageText varchar(256),
  AnsweredByUserId int
)

现在,当第一次创建初始未答复消息时,AnsweredByUserId 将为 NULL。这完全没问题。该消息尚未得到答复,因此我们不希望在其中找到值。

当有人确实回答了消息时,我们希望将他们的 UserId 放入 AnsweredByUserId,并且我们希望在发生这种情况时强制执行引用约束(例如,我们希望确保我们插入的 UserId 确实存在于我们的 Users 表中)。

总之,在正确的情况下有一个 NULLABLE 外键很好。

于 2012-10-02T09:25:28.097 回答