Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库设计:数据库中的用户表必须包含哪些字段?_Mysql_Database Table - Fatal编程技术网

Mysql 数据库设计:数据库中的用户表必须包含哪些字段?

Mysql 数据库设计:数据库中的用户表必须包含哪些字段?,mysql,database-table,Mysql,Database Table,我正在尝试为MySQL设计一个用户表 目前,我的用户表如下所示 users ( BIGINT id, VARCHAR(?) username, VARCHAR(?) password, VARCHAR(254) email, DATETIME last_login, DATETIME data_created ) 我还应该包括哪些其他字段?为什么我需要它们 我应该从上面排除哪些字段?为什么 我应该为用户名和密码分配多少个字符,为什么 我应该为id使用BIGINT吗 提前感谢您的帮助 增加 我将

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

目前,我的用户表如下所示

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME last_login,
DATETIME data_created
)
我还应该包括哪些其他字段?为什么我需要它们

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

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

我应该为id使用BIGINT吗

提前感谢您的帮助

增加
我将使用社交网站的表格,所以“用户”指的是全世界的人。

1/用户名和密码:自己决定你想要多大

2/BIGINT很好,尽管整数可能就足够了。但要使其无符号,也可能是自动递增的

3/试着让你的用户表尽可能小:

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME data_created
)
剩下的,你放进额外的桌子:

logins (
BIGINT loginid
BIGINT userid
DATETIME last_login,
VARCHAR(15) IP_ADRESS
...
)

这样,当添加或删除新用户时,或者当有人更改其密码时,您的用户表将只更改,这比有人登录时的更改频率要低。这允许更好的表缓存(当您写入表时,MySQL会清除表缓存)。

所有这些都取决于您自己的规格。对于username,如果愿意,可以取100;对于password,可以取想要使用的散列函数的长度(对于MD5,为32)

在表的主键上使用带自动递增的整数(10)更为常见

您可能需要询问姓名、姓氏、出生日期、居住地点等。您认为您向用户询问的所有数据对您正在构建的平台都应该很重要。

一些评论:

  • 比金很好。我想你用它作为代理密钥。在这种情况下,将其声明为

    BIGINT id主键自动递增

    每当您执行插入操作时,Mysql将自动为您的id分配一个唯一的int值(不要为此字段指定任何值)。不要试图通过选择max id并向其添加1来实现这种行为(我已经见过很多次了)

  • 用户名和密码的长度:这其实没什么大不了的,只需选择一个长度。我倾向于对255个长度的Varchar进行标准化,但这并不是基于任何经验

  • 将表称为“用户”,而不是“用户”。从概念上讲,表实现实体的方式与类实现实体的方式相同。您可能会创建一个名为“user”的类或数据结构,表名应该与之对应

  • 我创建的每个表都有两个时间戳,“已创建”和“上次更新”。你已经走到一半了:)

  • 我不认为我会将上次登录存储在用户表中,这可能是您希望在单独的表中登录的内容。最好将所有登录事件(登录、注销、尝试失败、帐户锁定等)存储在日志表中。这将使您更好地了解系统所做的工作


  • 您需要的字段在很大程度上取决于您没有提供的表的用途。请更新您的问题,谢谢。为什么使用BIGINT?我同意你的建议,但这只适用于拥有大量用户的系统。对于几千个用户来说,正常的表模式很好。感谢您的建议,并向我介绍了MySQL中的缓存策略。那么创建用户的人呢?我发现将名称的varchar length设置为255是一种不好的做法。当然,这一切都可以归结为惯例,但255往往被用户和程序员误用甚至滥用。你最好用谷歌搜索标准长度。i、 e.对于名称,组合字段的适当最大长度应为35或70。