質問

何があるの接合テーブル間での第1:mの1:mの関係は以下のデータベース?

altテキストhttp://dl.getdropbox.com/u/175564/db/db-simple.png

書籍 ジョー Celkoの木の階層アプリケーションのためのSmarties その理由は独自の関係1:mです。例えば、以下のテーブルresrictユーザーにも同じ問題を回、同じ答えを回れます。

最初の1:mの関係

users-questions
===============
user_id REFERENCES users( user_id )
question_id REFERENCES questions ( question_id )
PK( user_id, question_id)           // User is not allowed to ask same question twice 

第1:mの関係

questions-answers
=================
question_id REFERENCES questions( question_id)
answer_id REFERENCES answers( aswer_id )
PK( question_id, answer_id )       //  Question is not allowed to have to same answers

この利益につ独自性は納得がんばらないといけないと思い自分のコードには大きなチャレンジとなっているというのが納得いかない限の可能性を有する質問や答えに同じIDのdbかんでもPHPの使用を禁止する。

役に立ちましたか?

解決

その通常データの重複が原因ます。

あなたの推論については、そうあなたは、ビジネス層でこれを強制することができますが、あなたがミスをした場合、それは大量のコードを破ることができました。あなたが持っている問題は、データモデルが唯一のいくつかのテーブルを有していても良いです。あなたはラッキーです。あなたは構造の意味を理解することはできませんし、あなたが非常に簡単に問題に実行することができ、あなたのGUI層でdenormalisedテーブルを維持するために、すべてのロジックを配置する必要があれば、あなたのデータモデルは、成長します。物事が自分のパフォーマンスを破壊するロックを使用せずにSQLデータベースのためのGUI上でスレッドセーフで作ることは困難であることに注意してください。

DBMSは、これらの問題に対処するのに非常に非常に優れています。あなたはクリーンなデータモデルを維持し、必要なスピードを提供するためにインデックスを使用することができます。あなたの目標は、右のそれを最初に取得すること、そしてあなたが(パフォーマンスなどのために)そうする明確な必要性を見ることができる場合にのみ、あなたのテーブルをdenormalise必要があります。

は信じられないかもしれませんが、それはあなたのアプリケーションに来るとき正規化されたデータを持つことは難しく、あなたの人生を容易ではないになり、多くの状況があります。ご質問と回答で一つの大きなテーブルを持っている場合たとえば、あなたはそれが一意であるかどうかを確認するためのコードを記述する必要があります。あなたは主キーを持つテーブルを持っている場合、あなたは、単に書く

insert into table (col1, col2) values (@id, @value) --NOTE: You would probably 
--make the id column an autonumber so you dont have to worry about this
あなたがいない質問と答えに配置されている場合は、そこに非一意の値を持っている場合、または

データベースが挿入を防止することができます。あなたがする必要があるのは、挿入が働いたかどうかのチェック、より多くの何もないです。どちらあなたは以下のコードであると思いますか?

他のヒント

でも、ユニークな関係をもうナンセンスにいるかのようにこDBMSesが定義することができ独自のキー以外にその有効なタイプを利用します。自分の世界では、マッピングテーブルのような人がどのようにを実装する多対多関係で、使う、といった一対多の関係は狂気の—うまいか の関係として使用される一対多くのがん実際に の実施 が多い。

賛成しかねだってある独自の化合物のキーの永続化層ができるので、実施のためのアプリケーションレイヤれています。永続化層性制約としては多くの困難な複製などは、MySQLの能力を活用し INSERT ... ON DUPLICATE KEY UPDATE.

とはいいましても、結合テーブルのために多くのことがあるようには見えませんの追加も有益として@混乱は、そのような末実施のた多対多です。がジョー Celkoはスマートな男の人がこのように正確な答えを語って?

一つの可能性があると考えました.その実施のための結合テーブルには多くのことを完全に分離回答からの依存します。

たとえば、追加した、 Dogs メールフィルタリング Deities 表に示す。いうのは皆さんご存知の通り犬できないとして登録ユーザーさんがメールアドレスは、神がない登録ユーザーがりのさるとしあきだいえっと下にします。も犬神がまだ質問がないとするために実施する犬-質問表は、神-質問表に示す。理論的にはまだまだ多対多で、実際にはいできるように複数の一manys.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top