【问题标题】:Database Design - Same Entities with Different Attributes数据库设计 - 具有不同属性的相同实体
【发布时间】:2017-09-06 14:10:23
【问题描述】:

我正在开发一个货币交易平台。

发件人始终是具有某些属性的注册用户。

接收方可以是已经在平台上注册的用户(具有相同的属性),也可以是平台外的用户(在这种情况下,他们的银行账户信息需要保存在不同的表中)。

我遇到的问题是有一个外键来帮助识别接收者。

首先,我知道一个外键不能引用多个表,所以我在事务表中添加了两个外键,它们都可以为空并引用两种类型的用户。

这样,至少有一个外键有一个值,并有助于识别哪种类型的用户是接收者。

有没有更好的方法来做到这一点?

【问题讨论】:

  • @DamirSudarevic 没有多大帮助。如果有一个重复的问题,你能指出我吗?
  • @DamirSudarevic 就我而言,没有通用属性,所以如果我使用超级/子类型模式,我的 users 表将只有一个 id 属性。

标签: database database-design


【解决方案1】:

实现此目的的一种更安全的方法是将用户表合并到一个表中,其中包含注册用户和未注册用户的记录。然后,您的交易表将只有一个用于收件人的外键。

您需要将可能因用户是否注册而不同的字段分解到单独的个人资料表或表中。 users 可能最终包含一个registered_profilesunregistered_profiles 表的双外键。但是,这比 transactions 表中的双外键可靠得多,因为您知道如果用户同时拥有这两个外键,则始终偏爱已注册的配置文件。

一般来说,您希望尽可能限制不确定性的范围。对于交易而言,接收者是否已注册或未注册都无关紧要——这只对用户很重要。

【讨论】:

  • 你能举个例子吗?请记住,在我的情况下,注册和未注册用户没有共同的属性,所以如果我接受你的建议,我认为是超类型/子类型模式,用户表将只有一个 id 属性。正如我所说,请给我一个实际设计的例子。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 2013-05-14
  • 2017-10-10
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多