単純なCRUDモデルを使用した単純なphpMVCフレームワークを使用しています。
モデルには任意のメソッドを追加できるため、join
sql-logicを使用して複雑なメソッドを追加できますが、結合なしでCRUDメソッドのみを試してみたいと思います。
そこで、たとえば、ユーザーのプロフィールに写真を追加する機能を追加したいと思います。
2(+1)= 3つのバリエーションをお勧めします:
1。写真のIDをユーザーテーブルに保持する:
User
モデル、およびusers
テーブル:
id | ログイン| メール| 写真|
- photosは写真のIDの配列です。
Photo
モデルとphotos
テーブル:
id | src
- 写真の表には、写真のIDとsrcのみが保持されており、誰の写真かはわかりません。
2.ユーザーのIDを写真テーブルに保持する(写真を所有するユーザーのIDとして)
モデルUser
とusers
テーブル:
id | ログイン| Eメール
- この表には写真に関する情報はありません
モデルPhoto
とphotos
テーブル:
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番目のバリエーションを追加しました。最高ですか?