0

私はこれについて多くの議論を見てきました。これに関するあなたの提案を求めているだけです。基本的に使っているのはPHPとMySQLです。私はusers行くテーブルを持っています:

         users
------------------------------
uid(pk) | username | password
------------------------------
   12   |  user1   | hashedpw
------------------------------

ユーザーによる更新を格納する別のテーブル

                updates
--------------------------------------------
uid |        date         |     content
--------------------------------------------
 12 | 2011-11-17 08:21:01 | updated profile
 12 | 2011-11-17 11:42:01 | created group
--------------------------------------------

ユーザーのプロファイル ページには、ユーザーの最新の 5 つの更新が表示されます。質問は次のとおりです。

  1. updatesテーブルの場合、uid と日付の両方を uid を参照するuid持つ複合主キーとして設定できますか?users
  2. または、自動インクリメントし、主キーとして使用される別の列を作成する方がよいでしょうかupdates(一方、uid は uid の FK になりますusers)。
4

2 に答える 2

2

あなたのアイデア (1. の下) は、ユーザーが1 秒以内に 2 つの「更新」を実行できないという前提に基づいています。それは非常に貧弱な設計です。将来、どのような機能を実装するかはわかりませんが、1 回のクリックで 2 つのアクションが発生し、このテーブルに 2 行表示される可能性があります。

「更新」というのは、これをログ テーブルと見なすためです。そして、将来どこかに何を記録したいかは誰にもわかりません。

異常な主キーについては、そうしないでください。ほとんどの場合、すぐに戻ってきて、後で適切な自動インクリメントキーを追加するために多くの作業を行う必要があります。

于 2012-01-13T01:19:26.303 に答える
0

要件によって異なりますが、キー (uid、date、content) を作成できる 3 つ目の可能性があります。サロゲート キーを追加することもできますが、その場合は、1 つだけでなく、複合キーとサロゲート キーの両方を実装することをお勧めします。どちらかまたはどちらかを選ばなければならないと誤解しないでください。

サロゲートを追加することが有用かどうかは、それがどのように使用されているかによって異なります。必要でない限り、または必要になるまでサロゲートを追加しないでください。いずれにせよ、uid は users テーブルを参照する外部キーであると想定します。

于 2012-01-13T06:47:09.347 に答える