字段相关时的数据库结构

时间:2013-12-15 22:32:37

标签: mysql database normalization

我正在使用MYSQL存储有关用户订单的数据。使用PayPal,某些订单只有一个交易ID,而其他订单只有一个配置文件ID。数据库设计是否很差,为txn_id和profile_id提供单独的字段,其中一个或另一个是NULL,具体取决于顺序?

3 个答案:

答案 0 :(得分:1)

不,这根本不是糟糕的设计。

根据具体情况,您的情况中有一个是NULL。当您尝试强制执行一个NULL或至少一个不是NULL时,就会出现问题。要有效地执行此操作,您需要使用触发器来检查值。

答案 1 :(得分:0)

如果始终只有一个id或另一个,您可以考虑使用两个字段,一个是id_type,另一个是id_value(如果它们具有相同的数据类型)。

这可能会使查询更简单。

答案 2 :(得分:0)

您基本上有两种选择:

  1. 两个字段,一个用于Transaction,另一个用于Profile
  2. 交易和个人资料的一个字段,并有另一个字段来标识是否是转换ID或个人资料ID
  3. 我更喜欢1号(基本上与你的相同),因为你保持了字段的正确命名而不是通用的命名。此外,如果COALESCE()NULL,您可以始终使用NULL或那种函数来检索非Transction ID

    在这方面,这也意味着您应该拥有一个不依赖于Profile ID或{{1}}的人工主键