• ベストアンサー

ファイルへデータ登録

こんにちは。以下の内容アドバイス頂戴できれば幸いです。 これまでPHPとMySQL組み合わせで、少しずつ触ってきましたが、DBを使わずファイルを用いた場合、どのようなアルゴリズム?ファイル構成?になるのかが分からず、投函させていただきました。 どのようなものを作りたいかと申しますと・・MySQLを利用した場合、 テーブル:category no category1 1  北海道 2  青森 3  岩手  ・  ・ 以上、カラムnoは、auto_increment テーブル:shikugunn no c_no category2 1  1  札幌市 2  1  帯広市 3  1  釧路市 4  2  青森市 5  2  十和田市  ・  ・ 以上、カラムnoは、auto_increment。c_noはcategoryテーブルのno テーブル:member no c_no name  mail 1  1  まゆみ ○○@○○.com 2  3  みゆき △△@△△.com 3  2  ひとし △○@□○.com と、住んでいる都道府県、市区郡、名前、アドレスを登録させる場合、1つのデータベースでも構わないと思いますが、以上のようなデータベースになるかと思います。 また、上記データをブラウザ上で都道府県の名称から市区郡名、そして名前、アドレスを登録出来るようにし(修正・削除可とする)、同じくブラウザ上にて、検索機能を設けたいと思っております。 ここで、質問の本題に入りますが、これまでファイルにてデータを登録するようなプログラムを触ったことがなく、DBを使わずファイルへデータを書き込むような場合、データは1つのファイル内に書き込むべきなのでしょうか?それともDBのテーブル構成のように複数に分けるのでしょうか? また、ファイルにデータを書き込んだとき、ファイル内のデータはどのような形式で保存されるのでしょうか? 先にも申しましたが、ファイルを用いてデータを登録といった経験がなく、作成にあたりイメージが浮かばずに居る次第です。 上記のほかファイルを利用する際の注意点など、どんなことでも結構です。アドバイス頂戴できれば嬉しいです!宜しくお願い致します!

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

使い方のイメージがないと設計も難しいでしょうけど、基本的には(DBでいうところの)テーブルごとにファイルを分ける方向でいいと思います。リレーション回りを作りこもうとするとスクリプトに負荷をかけることになりますが、そもそも「DBを使わない」という時点で複雑なリレーションは諦めざるを得ないでしょう。 保存方法は基本的にテキストファイルですね。CSVはANo.1の方も書かれていますが「奥が深い」ので(RFCを読んでみてください)、個人的にはタブ区切りの方が使いやすいと思います。タブコード(\t)はフォームからPOSTされてこないので確実に区切り文字として使えます。 なおtextareaからPOSTされる改行コードはnl2brしたあとで抹消しないといけません(必要に応じて元に戻します)。また(当然ですが)行末にはPHP_EOLを付加します。

mayu_chap
質問者

お礼

shimixさんへ はじめまして、こんばんは。 具体的なアドバイスをありがとう御座います! DBを使うことで簡単に行えることでも、ファイルを利用した場合は簡単にはいかないのですね。 ちょっとくじけそうですが、shimixさんのアドバイスをイメージしながら、改めて勉強してみようかと思います。 ありがとう御座いました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

>データは1つのファイル内に書き込むべきなのでしょうか?それともDBのテーブル構成のように複数に分けるのでしょうか? べき論で言えば、DBと同じほうが簡単ではありますが、リレーションを張ったり、FKが必要な場合はファイルだと面倒ですね。PHPでぐりんぐりんブン回すことになります。 ま、お好きなように ってのが正直なところ。 >ファイルにデータを書き込んだとき、ファイル内のデータはどのような形式で保存されるのでしょうか? それは貴方が決めること。どのように保存させたいのかを貴方が決めて実装すれば良いだけ。 一般的にはCSVが手っ取り早いかな けど、CSVのフォーマットって丁寧に一つ一つ吟味してゆくと奥深いですよ。

mayu_chap
質問者

お礼

inu2さんへ はじめまして、こんばんは。何だか難しそうですね。。 早速のご回答ならびに貴重なご意見をありがとう御座いました。

すると、全ての回答が全文表示されます。

関連するQ&A