为MySQL设计用户表

时间:2012-02-08 03:26:07

标签: mysql database database-design

我正在为我当前的项目设计一个用户表。我想在用户表中添加一列,我可以存储用户是否被删除的信息。我正在考虑只添加一个日期时间列,因此如果设置了日期,则意味着在此日期和时间删除了用户。其他常见的方法是添加额外的删除标志1或0.我是否需要从性能/可伸缩性角度查看它的删除标志?

3 个答案:

答案 0 :(得分:2)

我会添加deleteFlag和lastUpdate列。每当deleteFlag值更改时,您可以将lastUpdate列设置为NOW()。因此,您将知道用户是否被删除/取消删除以及何时删除。添加两个这样的列不应该影响性能。

答案 1 :(得分:0)

从性能和可扩展性的角度来看:

如果您对已删除的时间戳列编制索引,则应用程序会缩放,因此存在其他布尔列不应产生太大差异。单列应该很好,如果你厌倦了必须使用条件:

WHERE deleted_date IS NOT NULL

...始终确定哪些用户处于活动状态,您可以考虑为其创建视图:

CREATE VIEW active_users AS
(
SELECT
  username,
  name,
  email
FROM users
WHERE deleted_date IS NOT NULL
);

从易用性的角度来看

我可能会使用额外的布尔列来使查询更加整洁。但是,它会增加应用程序代码的复杂性,以便记住更新这两列。或者,您可以创建一个触发器来设置布尔值更新为1时的时间戳。

答案 2 :(得分:0)

我会将datetime用作标志字段。如果您有很多用户,请使用非阻塞表格更改:oak-online-alter-table