2011-06-23 16 views
0

ブラウザベースのゲーム内でプレーヤーデータを保持するためのスキーマを設計しています。リレーショナルデータベース理論とキー

私は3つの関係を持っています。そのうちの2つには少なくとも2つの候補キーがありますが、3つ目の属性は{playerId、message、date}

です。この関係には1..1:0 ..関係があるため、一意の行は保持されませんつまり、各プレイヤーにはいくつものニュースタプルが存在する可能性があります。とにかくタプルを一意に識別できる必要はなく、属性のどれも実際に候補になることはできません。

私の質問は次のとおりです。リレーショナルモデルの状態が重複するタプルではなく、各リレーションにキーが必要であることを理解しています。上記の私のスキーマは、これらの制約の両方に矛盾しますが、私の目的のために働きます。ユニークなインデックス属性(IDなど)を追加するだけで済みますが、不要なようです。何か不足していますか?

お時間をいただきありがとうございます。

答えて

1

あなたが欠けているものは、複合主キーです。

複合主キーを使用したいdublicateエントリを取得しないように保存する場合は、

しかし、同じプレーヤーが同じ日に同じメッセージを送信すると思います.... この場合、複合主キーと競合します。 プライマリキーとしての仮想一意のIDは安全な方法です。

+0

はい、そうです。複合キーについて考えましたが、属性が候補キーでない場合は不可能です。この場合、idの主キーで各タプルをユニークにするという実質的な利点はありますか? – Lee

+0

主キーの利点は、各タプルを識別できることです。理由を削除したり編集したりする必要がない場合は、アプリを実行するために必要な理由がありません。しかし、私は常に、 "クリーン"なデザインを持つプライマリキーを定義します。 – steven

+0

OK steven、それは意味があります。あなたのご意見ありがとうございます。 – Lee

0

トリッキーな質問!私は明確な答えはありませんが、あなたは、タプル全体にユニティシティ制約がない場合、問題に遭遇するかもしれないと思います:いくつかのアプリケーションがアモックを実行し、同じタプルを1,000,000倍挿入しようとしているあなたのテーブル...