前提
利用者に親品番を検索させて、部品品番を表示するWEBアプリがあります。
PHPとMySQLで作られています。
現在、DBの中は以下の図のようになっています。
親品番 | 図面ID | 部品A | 部品B | 部品C | 部品D |
---|---|---|---|---|---|
id_01 | Z_01 | A-001 | A-002 | A-003 | |
id_02 | Z_01 | A-001 | A-002 | A-003(2007年以前),A-004(2008年以降) | |
id_03 | Z_02 | A-001 | A-002 | A-003 | 表側:A-005, 裏側:A-006 |
図面ID | 部品Aのカテゴリ名 | 部品Bのカテゴリ名 | 部品Cのカテゴリ名 | 部品Dのカテゴリ名 |
---|---|---|---|---|
Z_01 | キャップ | 瓶 | ラベル | |
Z_02 | キャップ | 瓶 | ラベル | 特殊シール |
部品A~Dは親品番の部品で、
部品の数・部品のカテゴリ名は、親品番がどの図面IDを持つかによって異なります。
部品品番は親品番ごとに異なります。
品番ごとの部品数、図面ごとのカテゴリ数については十分なカラムを準備しています。
部品品番にカテゴリ名が連動している訳ではないようです。
このDBを最初作ったときの話では1つのカテゴリに対し1つの部品ということでしたが、
複数部品を登録したい、品番以外の文字情報を登録したいという要望があり、
現在、複数品番についてはコンマ区切りで登録、
品番以外の文字情報についてはPHP側でそれ専用に処理することで解決しています。
どうもやりづらい、管理がしんどいと思ってきましたが、
つい先日このやり方がバッドノウハウだということを知りました。
現在悩んでいること・疑問
- 下の改善案で考え方は正しいでしょうか。
- 部品の組み合わせや図面のカテゴリ名について他の部署の人にエクセルで編集してもらい、
その後csvにしてDBにインポートしています。
そのときのエクセルの編集しやすさだけを考えるなら、列持ちのままにした方がいいような気もします。
- この流れ(エクセル⇒CSV⇒MySQLでインポート)自体がやり方としておかしいのでしょうか。
- 下の改善案だと(2007年以前)、表側:A-005 のような細かい表現が難しくなります。
このような(現場からは「表示できないと困る」と言われるような)事象に対して、
皆さんはどう事前に対策、あるいは事後解決されていますか。
改善案
部品品番、カテゴリ名について列持ち ⇒ 行持ち
親品番 | 場所 | 部品品番 | 備考 |
---|---|---|---|
id_01 | A | A-001 | |
id_01 | B | A-002 | |
id_01 | C | A-003 | |
id_02 | A | A-001 | |
id_02 | B | A-002 | |
id_02 | C | A-003 | 2007年以前 |
id_02 | C | A-004 | 2008年以降 |
id_03 | A | A-001 | |
id_03 | B | A-002 | |
id_03 | C | A-003 | |
id_03 | D | A-005 | 表側 |
id_03 | D | A-006 | 裏側 |
親品番 | 図面ID |
---|---|
id_01 | Z_01 |
id_02 | Z_01 |
id_03 | Z_02 |
図面ID | 場所 | カテゴリ名 |
---|---|---|
Z_01 | A | キャップ |
Z_01 | B | 瓶 |
Z_01 | C | ラベル |
Z_02 | A | キャップ |
Z_02 | B | 瓶 |
Z_02 | C | ラベル |
Z_02 | D | 特殊シール |
試したこと
PHP 5.6
MySQL 5.6
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/31 00:28