mysql - 数据库设计: what fields are must for a user table in database?

标签 mysql database-table

我正在尝试为 MySQL 设计一个用户表。

现在,我的用户表看起来像这样

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME last_login,
DATETIME data_created
)

我还应该包括哪些其他字段,为什么需要它们?

我应该从上面排除哪些字段,为什么?

我应该为用户名和密码分配多少个字符,为什么?

我应该为 id 使用 BIGINT 吗?

预先感谢您的帮助。

已添加 我打算将此表用于社交网站,因此“用户”是指世界各地的人。

最佳答案

一些评论:

  1. BIGINT 没问题。我假设您将其用作代理键。在这种情况下,将其声明为

    BIGINT id主键auto_increment,

    Mysql 会在您执行插入时自动为您的 id 分配一个唯一的 int 值(不要为此字段指定任何值)。永远不要尝试通过选择最大 ID 并将其加 1 来实现此行为(我已经见过很多次了)。

  2. 用户名和密码的长度:这没什么大不了的,选择一个长度即可。对于这些东西,我倾向于将 255 长度的 varchar 标准化,但这并不是基于任何经验。

  3. 称你的表为“user”,而不是“users”。从概念上讲,表实现实体的方式与类实现实体的方式相同。您可能会创建一个名为“user”的类或数据结构,表名应与此相对应。

  4. 我创建的每个表都有两个时间戳,“created”和“last_updated”。你已经完成了一半:)

  5. 我认为我不会将 last_login 存储在用户表中,这很可能是您希望在单独的表中登录的内容。将所有登录事件(登录、注销、失败尝试、帐户锁定等)存储在日志表中是个好主意。这将使您更好地了解系统一直在做什么。

关于mysql - 数据库设计: what fields are must for a user table in database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621469/

相关文章:

hadoop - Hadoop 中使用 DBInputFormat 的多输入

android - 在 Android 上的 SQLite 中创建多个表

sql - 我应该将 Users 和 Staff 存储在同一张表中吗?

php - MySQL:使用单个输入搜索多列(GoogleMaps 样式)

java - 类似名称的查询不起作用

mysql - 不批量插入数据时是否需要重建索引?

MySql 查询花费大量时间

mysql - 从数据库中获取特定数据

mysql - 查询以查找Mysql中连续行之间的差异

sql - 表中没有数据时显示空值