DB設計とかSQL。SNSやTwitterのつながりやはてブのお気に入り、被お気に入りなどをDBで管理したいときはどのようなテーブルを作ったら良いでしょうか。実際どのようなテーブルを用意するのか、SQLをベタに書くとした場合、お友だち一覧を取得するSQLクエリ、お友だちを追加するクエリはどのようなものになるのかなど知りたいのですが。関係テーブルのようなものを作ればいいのかな、というなんとなく頭に浮かぶものはあるのですが、専門の方の意見をお聞きしたいので

回答の条件
  • 1人5回まで
  • 登録:2009/05/15 02:48:03
  • 終了:2009/05/17 20:59:37

ベストアンサー

id:memo77 No.1

memo77回答回数238ベストアンサー獲得回数202009/05/15 08:08:12

ポイント70pt

1.つながりやはてブのユーザーの関連性を記録する仕組みを作りたい

2.つながりやはてブに似た仕組みを作りたい


どちらでしょうか。


1ならぱっと考え付くところではこんな感じですね。

T_IDRelation

フィールド名 内容
Relation_ID 主キー
ServiceID サービスの種類
UserID_From 主ユーザーもしくはグループ
User_ID_To 従ユーザーもしくはメンバー
RelationType 一方的フォローとか相互フォローとかグループ/メンバー形式とか
RelationState 今現在この関連性がどういう状態にあるか
Start_DT 関連の発生した日付
End_DT 関連の終了した日付

2ならこんな感じですね。

T_IDRelation

フィールド名 内容
Relation_ID 主キー
UserID_From 主ユーザーもしくはグループ
User_ID_To 従ユーザーもしくはメンバー
RelationState 今現在この関連性がどういう状態にあるか
Start_DT 関連の発生した日付
End_DT 関連の終了した日付


どちらにしても時系列での関係変化を取りたければ、変化したときに上書きではなくRelationStateを書き換えて積み上げとか。


お友達一覧取得SQL(1でも2でも)

SELECT User_ID_To
FROM T_IDRelation
WHERE User_ID_From = '取得したいユーザーのID'

関係性登録SQL(2のケース)

INSERT INTO (User_ID_From,User_ID_To,RelationState,Start_DT)
SELECT '主ユーザー','従ユーザー',1,Now()
id:dedara

丁寧にありがとうございます。

とても参考になります

2009/05/17 20:59:18

その他の回答(1件)

id:memo77 No.1

memo77回答回数238ベストアンサー獲得回数202009/05/15 08:08:12ここでベストアンサー

ポイント70pt

1.つながりやはてブのユーザーの関連性を記録する仕組みを作りたい

2.つながりやはてブに似た仕組みを作りたい


どちらでしょうか。


1ならぱっと考え付くところではこんな感じですね。

T_IDRelation

フィールド名 内容
Relation_ID 主キー
ServiceID サービスの種類
UserID_From 主ユーザーもしくはグループ
User_ID_To 従ユーザーもしくはメンバー
RelationType 一方的フォローとか相互フォローとかグループ/メンバー形式とか
RelationState 今現在この関連性がどういう状態にあるか
Start_DT 関連の発生した日付
End_DT 関連の終了した日付

2ならこんな感じですね。

T_IDRelation

フィールド名 内容
Relation_ID 主キー
UserID_From 主ユーザーもしくはグループ
User_ID_To 従ユーザーもしくはメンバー
RelationState 今現在この関連性がどういう状態にあるか
Start_DT 関連の発生した日付
End_DT 関連の終了した日付


どちらにしても時系列での関係変化を取りたければ、変化したときに上書きではなくRelationStateを書き換えて積み上げとか。


お友達一覧取得SQL(1でも2でも)

SELECT User_ID_To
FROM T_IDRelation
WHERE User_ID_From = '取得したいユーザーのID'

関係性登録SQL(2のケース)

INSERT INTO (User_ID_From,User_ID_To,RelationState,Start_DT)
SELECT '主ユーザー','従ユーザー',1,Now()
id:dedara

丁寧にありがとうございます。

とても参考になります

2009/05/17 20:59:18
id:hijk05 No.2

hijk05回答回数1307ベストアンサー獲得回数232009/05/15 19:15:42

基本は、正規化していく。この作業は機械的にできるので、DB設計の知識があるかどうかだけ。

性能に問題がなければ、正規化されたテーブルを使用するが、性能に問題があれば、ここから

非正規化して最適化を考える。

----------

はじめての設計をやり抜くための本 概念モデリングからアプリケーション、データベース、アーキテクチャの設計まで (エンジニア道場)
はじめての設計をやり抜くための本 概念モデリングからアプリケーション、データベース、アーキテクチャの設計まで (エンジニア道場)吉原 庄三郎

翔泳社 2008-12-11
売り上げランキング : 52430

おすすめ平均 star
star初心者向けのガイダンスとして
starシステム開発において「設計」をしていく上での手引書
star設計の流れとポイントが分かる

Amazonで詳しく見る
by G-Tools

------

4534032501業務別データベース設計のためのデータモデリング入門
渡辺 幸三
日本実業出版社 2001-07-01

by G-Tools

  • id:memo77
    なんかUserIDとUser_IDと混ぜこぜになっちゃってますが、ただのミス。
    意図してやってるわけではありません。どちらかに統一したほうがいいです。
    あとRelation_IDはオートインクリメントのフィールドのつもりでINSERT文を書いてます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません