网站的用户架构

时间:2010-09-29 18:30:22

标签: php mysql

我需要创建一个数据库模式来存储用户信息(id,name,p / w,email address ...等)。在调整这些字段时,我总是选择任意数量。有了这个说,我有两个问题:

1)这些领域的尺寸有哪些?我确信有一个最大的电子邮件地址长度,例如...等。

2)我现在需要存储用于购买信用卡的用户邮寄地址,包括国际邮寄地址。这是一个我不想挑选任意尺寸的区域。

有没有人知道一个好的架构?是否有可能的项目?

谢谢!

3 个答案:

答案 0 :(得分:1)

我会帮你解决第1部分的问题。一般来说,你不应该过分强调你的MySQL数据库字段的大小,你不必完全正确的数字 - 只要确保有人用合理的答案不会截断他们的数据。

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255),
`email` varchar(255),
`password` char(256)

请注意,对于密码,我有一个256位字符字段而不是varchar字段。那是因为你永远不应该将纯文本密码存储在数据库中。相反,您应该始终以密码格式存储密码,并为该密码提供某种独特的“盐”。您可以在线找到一些教程,密码字段的长度取决于您在密码上使用的哈希类型。

答案 1 :(得分:1)

还要考虑您将使用哪个数据库引擎以及主键是电子邮件,rowid还是任意数字。我通常使用上面建议的散列将密码保存在名为“security”的第二个表上。这是一个例子。

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` varchar(255) NOT NULL,
  `active` char(1) default 'Y',
  `created_date` INTEGER UNSIGNED default 0,
  `email` varchar(255) default NULL,
  `first_name` varchar(255) default NULL,
  `last_name` varchar(255) default NULL,
  `modified_date` INTEGER UNSIGNED default 0,
  PRIMARY KEY  (`user_id`, `active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

答案 2 :(得分:0)

这是一个非常难以回答的问题,因为在我看来,你应该允许的内容与IETF允许的内容之间存在差异。

允许的最大电子邮件地址为256个字符,其中包含电子邮件地址开头和结尾的斜杠(因此只有254个可用字符)。您可以在this page by Dominic Sayers上找到有关它的详细信息。

但是,任何合法用户实际上都有一个很长的电子邮件地址吗?

至于街道地址,我不相信在任何地方指定,但根据the world's longest website,最长的街道名称是72个字符。因此,如果您将字段设为100个字符,则您将有足够的空间容纳街道地址。

您不必非常关心让所有内容100%正确,您应该更关心您决定接受到数据库的数据质量(确保它是有效/干净的)。如果有人确实输入的内容太长,也要提供明确的拒绝消息 - 如果发生这种情况,请确保有一种简单的方法可以联系网站所有者。

有一件事我想注意,NoSQL现在风靡一时,它使用无架构数据库引擎,例如MongoDBCouchDB。它不是best solution for everything,但如果您非常关心拥有正确的模式,那么可能无模式数据库可能是一个不错的选择。