記事とコメントをそれぞれ保存しているテーブルがあります。
<記事 postsテーブル>
・id
オートインクリメントで振っている数字のみのID
・post_id
ランダム英数字10文字のユニークID(以下オリジンIDとします)
◆インデックスはid
にPRIMARYで付いています
<コメント commentsテーブル>
・id
オートインクリメントで振っている数字のみのID
・post_id
動画につけたオリジンID
◆インデックスはid
にPRIMARYで付いています
を各々保存しています。
CakePHPで記事とコメントをアソシエーションしています。
主キーはpost_id
で、このオリジンIDで記事とコメントは紐付いています。
PHP
1// Model:Post 2class Post extends AppModel { 3 public $primaryKey = 'post_id'; 4: 5: 6} 7 8//Model:Comment 9class Comment extends AppModel { 10 public $belongsTo = array( 11 'Post' => array( 12 'className' => 'Post', 13 'type' => 'INNER', 14 'foreignKey' => 'post_id', 15 'conditions' => array('status' => 0), 16 'fields' => array( 17 'post', 18 'title', 19 'text', 20 'count', 21 'created' 22 ) 23 )); 24
上記を踏まえて質問です。
①まず、基本的に他の機能でもid
でデータをselectしたり、updateということはなく、だいたいはpost_id
でやっています。
やり始めた頃はインデックスもよく分からず、見よう見まねでDBのインデックス、主キーにid
を指定していましたが、
この状態ではインデックスは全く意味がないのでは?と思いました・・・。
複合インデックスは好ましくないと見かけたのですが、post_id
にもインデックスを付けることでインデックスの役割を果たしてくれるようになるのでしょうか?
②また、DBとCakePHP側で主キーが違うせいで色々ややこしくなっています。
下記のような状態はやはりよくないですよね・・・?
post_id
でしか記事とコメントを紐付けられないので、アソシエーションするならprimarykeyはpost_id
のままにしておくしかありません。でも下記のような問題も起きるので、
アソシエーションをやめてjoinにするのがいいのか・・・?と悩んでいます。
A.
id
をプライマリキーにsave()
で情報を上書きしようとすると、
CakePHP側ではpost_id
が主キーになっているため、そのid
は既に存在するから新しくcreateできないよ!と、
怒られて上書きができない。そのため、updateAll
しか使えない。
B.
findById()
ならid
のほうが主キーとして扱われるが、read()
だったらpost_id
が主キーとして扱われる。
突っ込みどころが多いと思いますが、どのようにするのが良いか意見頂けると幸いです。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/28 11:20
2016/07/28 12:12
2016/07/30 04:28