🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1546閲覧

2次元?CSVの管理方法について

kou813

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2019/10/16 14:26

2次元?CSVの管理方法についてアドバイスをお願いできますでしょうか?

下記のような商品マスタcsvを管理することになりました。

ID,name,category,price
A1,aaa,1|32|38,100

カテゴリ部分が複数情報があり、1カラムに纏められております。
集約数が同じであれば問題ないのですが、
親a|子a|孫a|ひ孫a|親bのような関連があります。
5世代だったり、2世代だったりのデータがあります。

このようなcsvを管理する際は、
どのような方法があるのでしょうか?
また、この状態のcsvはなんと表現されているのでしょうか?
多対多のデータでしょうか?
検索しようにも状況が掴めておりません。

ツールもEXCELとVBAしかありませんので、
カテゴリマスタを用意して対応しようと考えております
CatID,CatName,CatClass

他にもっとよい回避策やアイディアはありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2019/10/16 15:10

「管理」って? メンテすること?
Orlofsky

2019/10/16 15:53

以下、質問に追記してください。 >集約数が同じであれば問題ないのですが、 集約数 って何? >親a|子a|孫a|ひ孫a|親bのような関連があります。 親・子・孫・ひ孫 ってどうやって判断するの?
kou813

2019/10/16 22:22

takasima20さん メンテではないです csvを取り扱うです Orlofskyさん >集約数 区切り文字|の数です 空白の場合も毎回4本であれば spritして当てはめればよかったのですが、親a |孫a |親bや親a |親b |親bのようなパターンがあります >判断方法 今のところないので、classを設けてリスト判定しようとしています。 数値の範囲や10の位のルールではなさそうです。 いつの間にやら増えてたり、 親nが作られたりするので、 リストで管理してもらおうと考えてます
Zuishin

2019/10/16 22:55

CSV で管理しなければならない妥当な理由があるのでなければ、XML JSON YAML などで管理すべきデータだと思います。
Zuishin

2019/10/16 22:57

あと、前任者にもっとしっかり聞いて、少なくとも自分が何をすべきかを把握してから質問してください。あなたが何をすべきかこちらではわかりません。自分でも何を質問していいかわからない状態でとりあえず投げてみたのではないですか?
takasima20

2019/10/16 23:32

うーん。どういった使われ方をするのかが具体的に分からないとアドバイスもしにくいと思います。
kou813

2019/10/16 23:57

Zuishinさん、takasima20さん そうですよね、なんだか強引に作られた形式ですよね こういった構造の状態のcsvを何と呼ぶのかもわかりません やりたい事は、カテゴリを分解して可読性を高めて配布などできるようにしたいです IDに親子孫カテゴリを分けて紐付けてあげたいです csv排出元に修正依頼が効けば話が早いのですが 集計側が何とかしなきゃいけない状況です
Zuishin

2019/10/17 00:03

CSV の中に CSV を入れて無理やり運用してるだけで、特に名前は無いと思います。CSV でなければならない理由が無いのであれば、JSON などに変換する方が使いやすくなりそうです。二次元データではないので、どのみち集計側がなんとかしなくてはいけません。テーブルを分けてもいいなら親子関係のテーブルを作って正規化できます。
KojiDoi

2019/10/17 08:31

> やりたい事は、カテゴリを分解して可読性を高めて配布などできるようにしたいです > IDに親子孫カテゴリを分けて紐付けてあげたいです 貴方の中にはビジョンがあるのでしょうが、読んでる方としては何をどこまでやりたいのかさっぱり分からないですね。 フェイクデータでいいので、こういうアウトプットを作りたいという見本を提示してみてください。
kou813

2019/10/20 02:48

Zuisinさん ありがとうございます こいうときにjsonは便利ですね 改修は今のところなくcsvのままなので親子関係のテーブルで対応したいと思います kojiDoiさん そうですよね、自分もいまいち質問の仕方がわかってない段階でも、あります 皆さんの回答で少し見えてきました
guest

回答2

0

このようなcsvを管理する際は、どのような方法があるのでしょうか?

方法としては色々あります。
一番簡単なのはVBAでCSVの列数を読み込んで該当するプログラムにデータを放り投げて、そっちで解析を行うことです。会社のようなので、まだ更新が行われているデータであれば、クラス単位で分けるのが一番容易で、誰でも理解しやすい設計だと思います。

また、この状態のcsvはなんと表現されているのでしょうか?

「非正規型」というデータですね。正規化がまったく行われておらず、1行の中に複数の繰り返し項目が存在するようなデータのことです。

他にもっとよい回避策やアイディアはありますでしょうか?

web系ならこの手のデータベースを扱うことが多いので、そういうを行う業者も多いと思います。
ご自身でやりたいなら、第三正規化までしっかりと勉強しましょう。

投稿2019/10/18 08:27

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kou813

2019/10/20 06:27

stdioさん まさにweb用の商品マスタです 非正規化されてないまま運用されてることがわかってきました SQLアンチパターンを調べ始めたくらいなので、"アンチパターンに出会ってしまったら"どう非正規データを解体していくかをもう少し調べたいと思います こういった経験則からくるアドバイスはとても参考になります!
stdio

2019/10/23 00:45

アンチパターンの場合、indexで管理する方法が一番楽だと思います。 分かりやすくいえば、商品番号と同じですね。商品番号を検索すると、企業の情報等が見れたりしますが、あれも企業番号で管理されているので、今回の場合は世代でまず分けましょう。 AGE00002(2世代)とかAGE00005(5世代)とかで切り分けるとアンチパターンが来た場合にも対応しやすいと思います。
guest

0

ベストアンサー

回答というより意見になりますが、思ったことを書かせていただきます。

【管理方法について】
最適な管理方法については、今後どのように運用したいかによって変わると思います。
今はCSVだけど今後はExcelのみで管理するのであれば、ご検討されている通りカテゴリマスタを用意するか、categoryのカラムを最大世代分(5つ)に分割した方がわかりやすいと思います。
しかし、今後もデータの更新がCSVで行われて、後続の処理をExcelで行うのであれば、CSVでの出力ルールを明確にした方が扱いやすいと思います。

【CSVの状態について】
ご提示されているcsvの状態を表現する用語は存じませんが、「1対多」や「多対多」の関係は、ルールに従えば欲しい組み合わせが一意に定まる状態を指すと思います。
一方、categoryのカラムは区切り文字(デリミタ)が「|」というルールがあるものの、要素の数と順番はデータ作成者しか判断できないように見えるので、「多対多」のような関係がそもそも定まっていない状態だと思います。
データベースの用語で表現するなら、「正規化されていない」データに該当すると思います。

投稿2019/10/17 12:27

AkihiroIshii

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kou813

2019/10/20 03:03

AkihiroIshiiさん ありがとうございます 正規化されてないデータですね 自分が読み取れてない可能性もあったので少し不安でした vbaをはじめプログラミングのスキルが低いので綺麗なデータしか扱えません 正規化されてないデータを防ぐ術も 乏しいのですが、なんとなく発生してしまう状況があり得るのもわかってきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問