読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

PHP Framework Fight! DBについて

see also.


PHPフレームワークファイト終了のお知らせ - 肉とご飯と甘いもの @ sotarok



連投。

仕様について、id:Yudoufuたんと話あった結果、非常に単純にTwitterの機能をエミュレートすればよくない?ということになりました。

ただ、リレーション張ってもらったり、その辺の扱いのうまさも見たいよね、ということもありますので、以下のようになりますた。

MySQLです。

バージョンは5系でお願いします。ベンチは5.0で取ります。
テーブルの構成は以下のとおり。リレーション張るのでInnoDBで。DB構成はそろえてください>< カラム名は好きに決めてもらってOKですが、項目はそろえてください。じゃないとDB周りでベンチに差がでます。



えっと、これで大体わかりますか?><
イミフとか、なんだこの設計死ねばいいのにとかあったらツッコミください><

あと、ゆどうふさんには言ったんですが、プロフィール画像の保存方法ですが、IDにしたがってファイル名生成しちゃえば、別にimageカラムいらなくね?と言うことなんです。私が実装するとしたら、そうしちゃうんですが(極端な話、user_id が 15の人のプロフィール画像は 15.jpg でよくね?という話)、一応ファイル名を保持したい人がいるかもしれないということで、imageカラムは入れてあります。default nullでおkです。

ちなみに、画像は静的にファイルを置いてアクセスさせる方法もあるんですが(Twitterの場合はそうですよね。amazonの鯖においてる)、PHPを経由して読み込ませるという感じでいいでしょうか?

MySQL の CREATE TABLEの例

こんなかんじ。多分これで用は足りるはず!!(サンプルですお mysqldump結果)

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_name` varchar(100) collate utf8_unicode_ci NOT NULL,
  `email` varchar(255) collate utf8_unicode_ci NOT NULL,
  `password` varchar(64) collate utf8_unicode_ci NOT NULL,
  `image` varchar(255) collate utf8_unicode_ci default NULL,
  `private_flag` tinyint(4) NOT NULL default '0',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `delete_flag` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `followers` (
  `user_id` int(11) unsigned NOT NULL,
  `follow_id` int(11) unsigned NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY  (`user_id`,`follow_id`),
  KEY `follow_id` (`follow_id`),
  CONSTRAINT FOREIGN KEY (`follow_id`) REFERENCES `users` (`id`),
  CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `statuses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned NOT NULL,
  `reply_user_id` int(10) unsigned default NULL,
  `comment` varchar(255) collate utf8_unicode_ci NOT NULL,
  `created_at` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

カラム名について

カラム名は、サンプルです。別にこの通りじゃなくてもおkです。各フレームワーク好きなようにしてください。ORMで命名規則がある場合はそれに従ってもらってかまいません。

ただ、後々、テストデータを入れるために(ベンチのたびにデータを初期化します。)、初期データにしたがってデータをダンプしたものを用意してもらいます。その辺頭にいれといてください!

なんかちょっと

イベントが大きくなって気負ってるところがあるのでw、軽々しく仕様出せなくなってる俺ガイルんですが。。

PostgreSQLでもいいですか?(追記)

という質問をいただきましたが、もちろん、ダメです。DBでベンチに差が出ては困るので。
よろしくお願いします><
もちろんsqliteもらめええ

追記:Oracleもらめえええええ!