我正在创建一个用于调查的数据库表,我需要记录报告事件的人,这可能是来自供应商或用户表的记录。最简单的方法是在我的调查表中同时包含一个 suppleir 和一个用户 id 列,但这似乎是错误的,有什么更好的方法来做到这一点?
谢谢你。
我正在创建一个用于调查的数据库表,我需要记录报告事件的人,这可能是来自供应商或用户表的记录。最简单的方法是在我的调查表中同时包含一个 suppleir 和一个用户 id 列,但这似乎是错误的,有什么更好的方法来做到这一点?
谢谢你。
你可以有另外两个表 -IncidentsReportedBySupplier (IncidentID, SupplierID)
和IncidentsReportedByUser (IncidentID, UserID)
- 这将删除空列。
但这也有缺点。然后,您可能会遇到任何人都没有报告的事件。
我不知道为什么您的选择“似乎是错误的”。我通常更喜欢您的方法,而不是使用带有 FK 的列而不是多个表。您的方法虽然可能需要在另一列中使用空值,但更加直接和明显。无需任何文件。没有不必要和多余的表格......只是一个额外的列。
一般的经验法则,更少的表格 = 更少的关系你必须担心 = 更少的头痛。
如果供应商和用户表都具有互斥的唯一 ID 号,则可以有一个使用该 ID 作为“报告者”的列。
如果它们都具有可能具有重叠值的唯一 ID 号,则可以使用两列作为 ID,例如:
`reporter_id`,
`reporter_type`
其中类型可以是类似s
或u
反映表名的值。这也将消除您建议的方法创建的所有那些空值。
最后,如果他们两个表都没有唯一的 ID 号,给他们一个!关于人的数据表使用主键效果更好!