我应该使用布尔型'confirmed_user'标志还是Confirmed Users表?

时间:2018-04-28 05:24:43

标签: sql database postgresql database-design relational-database

我想知道在数据库设计中哪个更正确。 假设我有以下模拟用户表:

User
id (big_integer)
name (string)
email (string)
password_digest (string)
confirmed (boolean)

用户通过电子邮件确认其帐户后,确认的字段设置为TRUE。 这是一个好的设计,还是我应该创建一个包含已确认的用户ID的表,例如:

Confirmed User
id (big_integer)
user_id (reference)

当我向查找表添加“启用”字段时,我面临同样的问题,例如:

City
id (big_integer)
name (string)
enabled (boolean)

对战:

Enabled City
id (big_integer)
city_id (reference)

该标志肯定会使数据更容易选择(不需要连接),但我会存储所有这些true / false值,实际上,我可以跳过它并且只存储与确认/启用相对应的值的值桌子(但这里加入)。

我知道存储所有布尔值在内存方面并不重要,但我想知道哪种方法在数据库设计中更正确,以及为什么。

1 个答案:

答案 0 :(得分:1)

您可以根据应用要求采取任何一种方法。

如果您需要的是true/false的{​​{1}}指示,请考虑将其包含在confirmed表中。在User表DDL中将默认值设置为false。适当时将其更新为User。这将是一个更平坦的设计,无需加入即可找到用户的true状态。

如果您创建单独的表confirmed,则可以使用它来维护用户的Confirmed_User标记设置为confirmed的历史记录。如果用户可以将true/false的值从confirmed更改为true并返回,则这可能有意义。您可以有一行记录每个事件。您可以跟踪与false相关联的其他详细信息,例如confirmationtime_of_confirmation等。这需要与description_of_confirmation表联接才能获得User状态用户。

相同的逻辑适用于confirmed表的enabled标志。