0

認証にdeviseを使用していますが、ユーザー個人用フィールドをいくつか追加しましたが、アプリの開発を継続する正しい方法であり、適切なデータベース設計であるかどうかはわかりません...

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

別のテーブルを作成して、次のようなユーザーの個人フィールドを保存する必要があります。

  • ツイッター
  • フェイスブック
  • 位置
  • Webサイト
  • 名前
  • バイオ

または、現在の状態を維持するのは問題ありませんか?

4

2 に答える 2

1

これらの属性を別のテーブルに抽象化します。たぶん、このようなものを保持できる「プロファイル」テーブルを作成します。次に、ユーザーはプロファイルに属し、プロファイルにはユーザーが1つあります。

于 2012-07-05T17:57:21.697 に答える
0

データベースの正規化を確認する必要があります。場所、ウェブサイト、名前、略歴は冗長データが表示される可能性のある列ですが、非正規化の結果を危険にさらすため、2つのテーブルをリンクするのにJOINステートメントは必要ありません。これはリンクするよりも高速です。

于 2012-07-05T08:32:12.983 に答える