dポイントプレゼントキャンペーン実施中!

MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか?

今は
AAA1 varchar(10) not null
BBB1 int(6) not null
CCC1 int(2) not null
AAA2 varchar(10) not null
BBB2 int(6) not null
CCC2 int(2) not null
 :
 :
AAA30 varchar(10) not null
BBB30 int(6) not null
CCC30 int(2) not null

みたいに書いています。

XXX OCCURS 30
AAA varchar(10) not null
BBB int(6) not null
CCC int(2) not null

のような書き方があればと思ったのですが。。

ご存知の方いらっしゃいましたら、
また他に良い方法をご存知の方いらっしゃいましたら
ご教示願います。

宜しくお願い致します。

A 回答 (3件)

まず、配列や構造体は、現時点ではMySQLでは実装していません。


そういった機能は、いつくかのRDBMSでは、独自仕様として実装しているものもあります。
標準SQLでは、SQL99では、配列、ユーザ定義型による構造体の定義が規定されており、MySQLでもいずれ実装されるかも知れませんが、操作性は必ずしもいいとは言えません。

>OCCURSの有無が聞きたかったのでキーや他項目は省かせていただきましたが。

そんな質問の仕方をすれば、「そんな機能はない」といった回答しか得られないし、キー項目などを省かれたら、具体的な代替手段の提示ができなかったり、せっかくのアドバイスが意味のないものになってしまいます。

普通に考えれば、

キー項目、キー内通番、AAA、BBB、CCC

といった構成を考えるのではないでしょうか?

何のためにデータベースに格納するのか、データベースに格納してどんな操作をしたいのかといったことがまったく不明ですが、極端な話をすれば、RDBMSにより一意性を保証してもらいたいキー、検索条件、ソートなどSQL上でどうしても指定が必要な列以外は、テーブル定義上はひとつの列にしておいて、アプリ側でフィールドを小分けするといった方法もあります。

この回答への補足

そんな機能が「ある」のか「ない」のかが聞きたいことでした。
「ある」のであれば利用したいし
「ない」のであれば無いなりのデータ構成なりアプリ側での対応なりは大丈夫です^^
ありがとうございました。

補足日時:2010/09/19 08:35
    • good
    • 0

なぜ、正規化しないのですか?

    • good
    • 0
この回答へのお礼

具体的にはどのようにでしょう?
OCCURSの有無が聞きたかったのでキーや他項目は省かせていただきましたが。
何か是正する余地がありましたらご教示願います。

お礼日時:2010/04/25 01:18

恐らくMySQLにはそのようなものはないかと思います。



自分でしたらPHPなどのプログラムでループを使うか、
一時的な物であればExcelのセルのコピーを使って
SQL文を作成すると思います。

意外とExcelを使うのも早いかもしれません。
下記のような形を書けばAAA1とBBB1を連続データとして下方向にコピーし、
その他の部分は通常のコピーを行い、
最後に全体をメモ帳などにコピペをすれば…
┌──┬───────────┬──┬────────┬…
│AAA1│varchar(10) not null,    │BBB1│int(6) not null,   │…
└──┴───────────┴──┴────────┴…
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問中の「書いてます」とか「書き方」に語弊がありました。
sql文に関しては問題ないです。ただテーブル定義がもっと綺麗にならないかなとか添え字が使えないかなと思いましてOCCURSのようなものがあるか質問させて頂きました。

お礼日時:2010/04/25 01:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!