8

MySQLのユーザーテーブルを設計しようとしています。

今のところ、私のユーザーテーブルは次のようになっています

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME last_login,
DATETIME data_created
)

他にどのようなフィールドも含める必要があり、なぜそれらが必要なのですか?

上記からどのフィールドを除外する必要がありますか、またその理由は何ですか?

ユーザー名とパスワードに何文字を割り当てる必要がありますか、またその理由は何ですか?

IDにBIGINTを使用する必要がありますか?

よろしくお願いします。

追加私はソーシャルウェブサイトのテーブルを使用するつもりなので、「ユーザー」は世界中の人々を意味します。

4

3 に答える 3

18

いくつかのコメント:

  1. BIGINTは大丈夫です。代理キーとして使用していると思います。その場合は、次のように宣言します

    BIGINT id主キーauto_increment、

    Mysqlは、挿入を行うたびに一意のint値をIDに自動的に割り当てます(このフィールドには値を指定しないでください)。最大IDを選択して1を追加することにより、この動作を実装しようとしないでください(これは何度も見ました)。

  2. ユーザー名とパスワードの長さ:これは実際には大したことではありません。長さを選択するだけです。私はこれらのことについて255の長さのvarcharを標準化する傾向がありますが、それは経験的なものに基づいていません。

  3. テーブルを「users」ではなく「user」と呼びます。概念的には、テーブルはクラスがエンティティを実装するのと同じ方法でエンティティを実装します。「user」と呼ばれるクラスまたはデータ構造を作成する可能性があり、テーブル名はこれに対応している必要があります。

  4. 私が作成するすべてのテーブルには、「created」と「last_updated」の2つのタイムスタンプがあります。あなたは途中です:)

  5. last_loginをuserテーブルに格納することはないと思います。これは、別のテーブルにログインする必要がある可能性があります。すべてのログインイベント(ログイン、ログアウト、試行の失敗、アカウントのロックなど)をログテーブルに保存することをお勧めします。これにより、システムが実行していることの可視性が大幅に向上します。

于 2011-04-11T13:02:26.650 に答える
4

1 /ユーザー名とパスワード:これらのサイズを自分で決定します。

2 / BIGINTは問題ありませんが、おそらく整数で十分です。ただし、UNSIGNEDにし、おそらくAUTO_INCREMENTにします。

3/ユーザーテーブルをできるだけ小さくしてみてください。

users (
BIGINT id,
VARCHAR(?) username,
VARCHAR(?) password,
VARCHAR(254) email,
DATETIME data_created
)

残りは、追加のテーブルに入れます。

logins (
BIGINT loginid
BIGINT userid
DATETIME last_login,
VARCHAR(15) IP_ADRESS
...
)

このように、usersテーブルは、新しいユーザーが追加または削除されたとき、または誰かがパスワードを変更したときにのみ変更されます。これは、誰かがログインしたときよりも頻度が低くなります。これにより、より優れたテーブルキャッシュが可能になります(MySQLは、テーブルへの書き込み時にテーブルキャッシュをクリアします)。

于 2011-04-11T12:50:54.903 に答える
0

それはすべてあなた自身のスペックに依存します。ユーザー名の場合は100を、パスワードの場合は使用するハッシュ関数の長さ(MD5の場合は32)を使用できます。

テーブルの主キーでAUTO_INCREMENTとともにINTEGER(10)を使用するのがより一般的です。

名前、名前、生年月日、居住地などを尋ねることができます。ユーザーに求めるすべてのデータは、構築しているプラ​​ットフォームにとって何らかの形で重要であると考えてください。

于 2011-04-11T12:51:08.557 に答える