我应该在我的网站数据库中保存哪些数据?

时间:2015-10-29 03:09:04

标签: mysql database

我即将推出一个网站,我正在使用MySQL数据库来存储数据。我想确保我不会忘记保存以后可能有用的任何东西。我目前有两个表,userseventsusers只是网站的注册用户,events是用户可以按计划创建的事件。这是我为每张桌子存储的内容:

usersid(int(11)),email(varchar(75)),password(varchar(10000)),first (varchar(35)),last(varchar(35)),reg_date(时间戳),(其他一些东西)

eventsid(int(11)),description(文本),day(int(11)),month(int( 11)),year(int(11)),hour(int(11)),minute(int(11)),creator(int(11) )

你认为我应该添加任何东西吗?对我的桌子一般有什么建议吗?我对MySQL很陌生。

修改:我还在created表格中添加events行,其中包含创建表格的日期。我也可能会添加一个edited行,我会在用户编辑事件时放置旧描述(但不确定)。

2 个答案:

答案 0 :(得分:1)

您已涵盖所有基础知识,通常包含在用户表中的其他主题;

  • 用户名或首选显示名称
  • 性别,也可以从标题推断(先生,夫人,小姐等)
  • 地址,人们往往过于复杂,除非你真的需要知道街道名称,邮政编码等明确地将整个事物保存到文本/ blob字段,可以用于邮件输出等。
  • 联系电话/手机

重要安全领域

  • 我不确定为什么你需要1000个字符的密码,我怀疑你可能没有哈希,这不好,请哈希!
  • 考虑添加额外的盐'专栏,使用独特的盐显着提高了密码安全性
  • 跟踪自上次成功登录后失败的登录尝试

您可以自动收集的信息,这可能有助于营销

  • 上次登录IP - 可用于确定用户地理位置
  • 登录次数,此用户的活跃程度
  • 上次登录日期,对安全性和识别陈旧帐户非常有用,但也可以让您轻松查看过去一天,一周内登录的次数等。

答案 1 :(得分:0)

让我们立刻解决这个问题,不要存密码!这就是密码被盗的方式。仅存储密码的正确盐渍哈希。使用内置的SHA2或更好的bcrypt

Read all about how to do it right here

关于类型的一些注释。

  • 不要使用TIMESTAMP,请使用DATETIME。 TIMESTAMP很古怪,从1970年到2038年的范围有限。
  • 将日期作为单个DATETIME列存储在事件表中。这将占用更少的空间,您可以使用MySQL's (weird and quirky but better than nothing) date functions
  • 考虑对所有id使用UNSIGNED BIGINT,尤其是事件。 20亿似乎很多,但是当你用完时它很糟糕。我已经发生了这件事。
  • 不要使用有限长度的VARCHAR,只需使用TEXT即可。这一切都需要大约相同的磁盘空间。您的数据模式不应该强制执行业务规则。