• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:簡単に正規化したい)

テーブルの正規化とINSERT方法について

このQ&Aのポイント
  • プログラム素人の初心者が、カラムをいちいち作るテーブルのメンテナンスについて悩んでいます。テーブルを正規化し、INSERT文を効率的に実行する方法を知りたいです。
  • MYSQLでは、同じPRIMARY KEYを持つレコードをINSERTすることはできません。そのため、重複するPRIMARY KEYを回避する方法を教えてください。
  • PerlでIDごとにまとめてレコードを取得し、配列に格納する方法を知りたいです。具体的には、IDが1のレコードを全て取得する方法を教えてください。

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

  • ベストアンサー
回答No.2

なんかidの使い方に強い違和感がありますが、 > IDにPRIMARY KEYが付いているのですが2つ同じPRIMARY KEYはINSERTでききませんよね?どうすればいいでしょうか? primary keyにしなければよいのでは? CREATE TABLE hoge( id INT, item VARCHAR(255), value INT ); > IDごとにまとめて取得して配列に入れる方法はありますか? whereつきでselect文を発行すれば特定のidのものだけを取得出来ます。 select * from hoge where id = '1'; 例えば、こんな感じ? my $id = 1; my $rows = $dbh->selectall_arrayref('select * from hoge where id = ?', {Columns=>{id=>undef, item=>undef, value=>undef}}, $id); prepare、executeのスタイルを取りたいならこういう書き方もありですが。 sub GetRows { my ($dbh, $id) = @_; my $sth = $dbh->prepare('select * from hoge where id = ?'); $sth->execute($id); my @rows = (); while (my $row = $sth->fetchrow_hashref()) { push(@rows, $row); } $sth->finish; return \@rows; } 余談ですが、idというのは普通identityやidentificationの略で、固有の番号を示すのに使われると思うので、それで2つ以上のものが取得できるというのはちょっと違和感があります。idというよりむしろgroup_idなのでは。 groupで共通する内容はgroupのテーブルを作ってそこに入れ、group_idはgroupのテーブルのidを指す外部キーにしそうなものですが。

flash0
質問者

お礼

お答え頂きありがとうございます >whereつきでselect文を発行すれば特定のidのものだけを取得出来ます。 whereで指定した場合id全部取得できるんですね。1つしかできないと勘違いしていました >prepare、executeのスタイルを取りたいならこういう書き方もありですが。 すっごい勉強になりました。 >groupのテーブルを作ってそこに入れ、group_idはgroupのテーブルのidを指す外部キーにする idでやったことをgroup_idでやればいいのでしょうか?この場合idの意味ってありますか?ちなみにidは登録者番号です CREATE TABLE group( id INT PRIMARY KEY, group_id INT, item VARCHAR(255), value INT );

その他の回答 (2)

回答No.3

> whereで指定した場合id全部取得できるんですね。1つしかできないと勘違いしていました PerlのDBIについての説明にざっと目を通しておくと良いかもしれません。 http://dbi.perl.org/ http://search.cpan.org/~timb/DBI/DBI.pm また、"Perl DBI"で検索すると様々な方の解説記事を見つけられます。公式ドキュメントを読んでもピンと来ない場合は検索してみましょう。 > idでやったことをgroup_idでやればいいのでしょうか?この場合idの意味ってありますか?ちなみにidは登録者番号です 基本的にそういうことです。ただ、登録者番号ならregistrant_idなどと名付けるのでは。 行ごとに固有の番号が振ってあると、その行のデータを指定して取り扱うときになにかと便利だと思います。普通に考えて、データの複数ページにわたる表示、削除や変更をする場合、idがあったほうが楽ではありませんか。 例えば、Webのフォームなどで登録者IDごとにデータの一覧表示をして、削除するものをそこから選ぶ場合、IDさえフォームから送ってもらえると削除するものが一意に決まり、簡単に削除出来ますよね。また、IDで整列して表示すれば複数ページにわたっる表示が必要な場合に簡単に重複なく次のページを表示できます。

flash0
質問者

お礼

丁寧な回答ありがとうございました いろいろ勉強になりました 勉強不足なのを痛感しましたのでmysqlの本を買うことのしました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

上のhogeテーブルと下のhogeテーブルの相関関係がわかりません 同じものなのか、別の処理をしたいのか もう少し具体的な例を書いて、結果としてどういう集計を想定しているかによって テーブルの設計はかわってくると思います ちなみにプログラム初心者とのことですがperlが前提なのでしょうか?

flash0
質問者

お礼

テーブルはこれから作るところです 相関関係はなにもありません、例として表示しました 登録IDごとに、登録したアイテムを効率的にまとめて取得したいだけです 今回はperlです

関連するQ&A