创建数据库表

时间:2012-08-20 09:24:05

标签: sql database normalization database-table

我正在为调查创建一个数据库表,我需要记录报告事件的人,这可能是来自供应商或用户表的记录。最简单的方法是在我的调查表中同时使用一个flexir和一个用户id列,但这似乎是错误的,有什么更好的方法呢?

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用另外两个表 - IncidentsReportedBySupplier (IncidentID, SupplierID)IncidentsReportedByUser (IncidentID, UserID) - 这将删除空列。

但这也有缺点。然后,您可能会发生任何人未报告的事件。

答案 1 :(得分:-1)

我不知道为什么你的选择“似乎错了”。我通常更喜欢你的方法,而不是将一个带有FK的列放到多个表中。您的方法虽然在另一列中可能需要空值,但更为直接和明显。没有文件要求。没有不必要的冗余表......只是一个额外的列。

一般的经验法则,较少的桌子=较少的关系,你必须担心=减少头痛。

答案 2 :(得分:-2)

如果供应商和用户表都具有互斥的唯一ID号,则可以使用一个列将该ID用作"报告者​​。"

如果它们都具有可能具有重叠值的唯一ID号,则可以使用两列ID:

`reporter_id`,
`reporter_type`

其中类型可以是su之类的值,以反映表名称。这也将消除由您提议的方法创建的所有空值。

最后,如果他们两个表都没有唯一的ID号,请给他们一个!有关人员的数据表使用主键工作得更好!