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