我需要创建一个数据库模式来存储用户信息(id,name,p / w,email address ...等)。在调整这些字段时,我总是选择任意数量。有了这个说,我有两个问题:
1)这些领域的尺寸有哪些?我确信有一个最大的电子邮件地址长度,例如...等。
2)我现在需要存储用于购买信用卡的用户邮寄地址,包括国际邮寄地址。这是一个我不想挑选任意尺寸的区域。
有没有人知道一个好的架构?是否有可能的项目?
谢谢!
答案 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现在风靡一时,它使用无架构数据库引擎,例如MongoDB和CouchDB。它不是best solution for everything,但如果您非常关心拥有正确的模式,那么可能无模式数据库可能是一个不错的选择。