- ベストアンサー
MySQLで項目の反復定義(COBOLでいうところのOCCURS)について
- MySQLで項目の反復定義(COBOLでいうところのOCCURS)について教えてください。現在、項目の反復定義は30個の項目を個別に記述していますが、より効率的な方法はありますか?
- MySQLには項目の反復定義(COBOLでいうところのOCCURS)の機能はありません。現在、30個の項目を個別に定義していますが、もっと簡潔な方法はないでしょうか?
- MySQLで項目の反復定義(COBOLでいうところのOCCURS)を行う方法について教えてください。現在、30個の項目を個別に定義していますが、もっとスマートな方法があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、配列や構造体は、現時点ではMySQLでは実装していません。 そういった機能は、いつくかのRDBMSでは、独自仕様として実装しているものもあります。 標準SQLでは、SQL99では、配列、ユーザ定義型による構造体の定義が規定されており、MySQLでもいずれ実装されるかも知れませんが、操作性は必ずしもいいとは言えません。 >OCCURSの有無が聞きたかったのでキーや他項目は省かせていただきましたが。 そんな質問の仕方をすれば、「そんな機能はない」といった回答しか得られないし、キー項目などを省かれたら、具体的な代替手段の提示ができなかったり、せっかくのアドバイスが意味のないものになってしまいます。 普通に考えれば、 キー項目、キー内通番、AAA、BBB、CCC といった構成を考えるのではないでしょうか? 何のためにデータベースに格納するのか、データベースに格納してどんな操作をしたいのかといったことがまったく不明ですが、極端な話をすれば、RDBMSにより一意性を保証してもらいたいキー、検索条件、ソートなどSQL上でどうしても指定が必要な列以外は、テーブル定義上はひとつの列にしておいて、アプリ側でフィールドを小分けするといった方法もあります。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
なぜ、正規化しないのですか?
お礼
具体的にはどのようにでしょう? OCCURSの有無が聞きたかったのでキーや他項目は省かせていただきましたが。 何か是正する余地がありましたらご教示願います。
- smileeeen
- ベストアンサー率70% (21/30)
恐らくMySQLにはそのようなものはないかと思います。 自分でしたらPHPなどのプログラムでループを使うか、 一時的な物であればExcelのセルのコピーを使って SQL文を作成すると思います。 意外とExcelを使うのも早いかもしれません。 下記のような形を書けばAAA1とBBB1を連続データとして下方向にコピーし、 その他の部分は通常のコピーを行い、 最後に全体をメモ帳などにコピペをすれば… ┌──┬───────────┬──┬────────┬… │AAA1│varchar(10) not null, │BBB1│int(6) not null, │… └──┴───────────┴──┴────────┴…
お礼
ありがとうございます。 質問中の「書いてます」とか「書き方」に語弊がありました。 sql文に関しては問題ないです。ただテーブル定義がもっと綺麗にならないかなとか添え字が使えないかなと思いましてOCCURSのようなものがあるか質問させて頂きました。
補足
そんな機能が「ある」のか「ない」のかが聞きたいことでした。 「ある」のであれば利用したいし 「ない」のであれば無いなりのデータ構成なりアプリ側での対応なりは大丈夫です^^ ありがとうございました。