我需要创建一个数据库模式,用于存储用户信息(id、姓名、密码、电子邮件地址等)。在设置这些字段的大小时,我总是随意选择。因此,我有两个问题:
1)这些字段的好尺寸是什么?例如,电子邮件地址的最大长度肯定是有限制的。
2)现在我需要存储用户邮寄地址以进行信用卡购买,包括国际邮寄地址。这是我不想随意选择大小的领域。
是否有人知道一个好的模式?也许有一个项目可以做到这一点吗?
谢谢!
我来帮你处理第一部分。通常情况下,你不必过于担心MySQL数据库字段的大小,你不需要完全准确地得到数字 - 只需确保有合理答案的人不会使他们的数据被截断即可。
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255),
`email` varchar(255),
`password` char(256)
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
这是一个非常棘手的问题,因为在我看来,您“应该”允许的内容与IETF认为可以允许的内容之间存在差异。
最大允许的电子邮件地址长度为256个字符,其中包括电子邮件地址开头和结尾的斜杠(因此只有254个可用字符)。您可以在Dominic Sayers的此页面上找到详细的信息。
但是,真正有这么长的电子邮件地址的合法用户会有吗?
至于街道地址,我不认为有具体规定,但是根据世界上最长的网站,最长的街道名称为72个字符。因此,如果您将字段设置为100个字符,您将有足够的空间输入街道地址。
你不必过于担心每件事情都要做到百分之百正确,你应该更关注你决定接受进入数据库的数据质量(确保它是有效/干净的)。此外,如果有人输入了太长的内容,请提供清晰的拒绝信息,并确保网站所有者可以轻松联系到。
我想指出的一件事是,NoSQL现在非常流行,它使用无模式数据库引擎,例如MongoDB和CouchDB。这并不是适用于所有问题的最佳解决方案,但如果你非常关注正确的模式,可能无模式数据库是一个不错的选择。