0

単純なCRUDモデルを使用した単純なphpMVCフレームワークを使用しています。

モデルには任意のメソッドを追加できるため、joinsql-logicを使用して複雑なメソッドを追加できますが、結合なしでCRUDメソッドのみを試してみたいと思います。

そこで、たとえば、ユーザーのプロフィールに写真を追加する機能を追加したいと思います。

2(+1)= 3つのバリエーションをお勧めします:

1。写真のIDをユーザーテーブルに保持する:

Userモデル、およびusersテーブル:

id | ログイン| メール| 写真|

  • photosは写真のIDの配列です。

Photoモデルとphotosテーブル:

id | src

  • 写真の表には、写真のIDとsrcのみが保持されており、誰の写真かはわかりません。

2.ユーザーのIDを写真テーブルに保持する(写真を所有するユーザーのIDとして)

モデルUserusersテーブル:

id | ログイン| Eメール

  • この表には写真に関する情報はありません

モデルPhotophotosテーブル:

id | src | ユーザーID

  • この写真を所有しているユーザーの情報が保持されるため、ユーザーが3枚の写真を持っている場合、このテーブルには3つのレコードがあります。

3. 3つのテーブルの方法:

テーブルusers

id | ログイン| メール(*この表の写真に関する情報はありません)

テーブルphotos

id | src(*誰の写真かについての情報はありません)

テーブルuser-photo

id | user_id | photo_id(*写真の関係の表)

SQL配列を解析するべきではないので、2番目の方法の方が単純だと思います。これは単純なCRUDアクションです。

しかし、最初の方法は速いですか?まず、ユーザーの情報を取得する場合、写真のIDを認識し、photosテーブルからid-主キーで写真を取得します。しかし、2番目の方法では、photosテーブルから写真を取得しますuser_id-主キーではないので、遅くなるはずです。

おすすめは何ですか?そのような問題には絶対に別の解決策があるのでしょうか?

PS面倒な説明で申し訳ありませんが、私はしばらく英語で質問をしていませんので、私の悪い英語を訂正してください;)

更新: 3番目のバリエーションを追加しました。最高ですか?

4

1 に答える 1

1

すでにご存知のように、最初のオプションは使用しないでください。SQLではうまく機能しません。

オプション2と3の間で、次のことを考慮してください。

  • 各画像が1人のユーザーにのみ関連している場合は、オプション2で十分です。オプション3は、不必要な複雑さを追加するだけです。

  • 各画像を複数のユーザーに関連付けることができる場合は、オプション3を使用する必要があります。

したがって、私が知る限り、あなたはオプション2を探しています。

于 2012-04-16T00:17:30.953 に答える