0

我正在使用设计进行身份验证,并且我添加了一些用户个人字段,我不确定这些字段是否是继续开发我的应用程序的正确方法,并且是正确的数据库设计......

users   CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `email` varchar(255) NOT NULL DEFAULT '',
 `encrypted_password` varchar(255) NOT NULL DEFAULT '',
 `reset_password_token` varchar(255) DEFAULT NULL,
 `reset_password_sent_at` datetime DEFAULT NULL,
 `remember_created_at` datetime DEFAULT NULL,
 `sign_in_count` int(11) DEFAULT '0',
 `current_sign_in_at` datetime DEFAULT NULL,
 `last_sign_in_at` datetime DEFAULT NULL,
 `current_sign_in_ip` varchar(255) DEFAULT NULL,
 `last_sign_in_ip` varchar(255) DEFAULT NULL,
 `created_at` datetime NOT NULL,
 `updated_at` datetime NOT NULL,
 `username` varchar(255) NOT NULL DEFAULT '',
 `twitter` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 `facebook` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 `website` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 `bio` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `index_users_on_email` (`email`),
 UNIQUE KEY `username` (`username`),
 UNIQUE KEY `index_users_on_reset_password_token` (`reset_password_token`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

我应该创建另一个表并存储用户的个人字段,例如

  • 推特
  • Facebook
  • 地点
  • 网站
  • 姓名
  • 生物

还是保持它们现在的样子就可以了?

4

2 回答 2

1

我会将这些属性抽象到另一个表中。也许创建一个“个人资料”表,您可以在其中保留这样的内容。然后一个用户将属于_to Profile,而一个Profile has_one User。

于 2012-07-05T17:57:21.697 回答
0

您应该检查数据库规范化。location、website、name 和 bio 是可能出现冗余数据的列,但我会冒险非规范化的后果,因此您不需要 JOIN-Statement 来链接两个表,这比链接它们要快。

于 2012-07-05T08:32:12.983 回答