【问题标题】:Database reference multiple entity types from one table数据库从一个表中引用多个实体类型
【发布时间】:2012-04-02 18:04:42
【问题描述】:

所以,我正在创建一个 transaction 数据库表来存储商家和客户之间的交易。

客户有时会使用商店卡付款,有时会使用信用卡(本系统不使用现金)。

如何在数据库中对此进行建模。我目前的想法是事务表有一个用于商店卡交易的字段和一个用于信用卡交易的字段。然后,这些字段将引用两个单独的表来存储特定于付款方式的数据。

这意味着这些字段之一将始终为空,而另一个是对相应付款方式表的引用。

示例: 使用信用卡而非商店卡完成了交易。这意味着在 transaction 表中,store card 字段为空,而 credit card 字段包含对 credit 的引用卡交易表。此信用卡交易表存储与信用卡交易相关的数据,例如授权码交易ID

这让我感到困惑的原因是因为我在大学里被教导 NULL 值是不好的。但这不是需要它们的情况吗?

对于此类问题是否有一个术语,或者我应该使用什么查询来在 Google 中匹配它?

非常感谢,康纳。

【问题讨论】:

  • 他们在大学里应该教给你的是,过于简单的经验法则是不好的。空值不是不好。 0NF 不好。 2NF 几乎总是不好的。人烟稀少的表很可能是坏的。在表中发现空值的原因有很多。如果您正确使用它们,它们是完全合法的。

标签: database-design


【解决方案1】:

不要使用两个卡号字段

CardNumber 应该是一列并且包含来自任何交易的任何卡号。您应该在系统的某个地方有另一个表来跟踪已发出哪些“商店卡”。从事务表到“商店卡”表的连接将识别哪些交易是使用商店卡进行的,哪些是使用信用卡进行的。

【讨论】:

  • 嗨,甘尼,这是一个很好的建议,我会同意的。如何存储与 cc 交易相关的数据而不是存储卡交易。即授权码。我应该把它存放在哪里?交易表,商店卡为空?
  • Connor,我认为您应该将所有事务存储在一张表中。银行使用的软件一切都依赖于交易代码。各种交易都有单独的交易代码......这里要提到很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多