トップページ⇒tech
906コメント323KB

【ノウ】DBアプリ開発ノウハウ【ハウ】

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさんNGNG
・SQL文をコード内に埋め込むとコードが汚くなっちゃう。うまく分ける方法無い?
・似たようなSQLがあっちこっちのプログラムで出て来るんだけど…
・Viewとかストアドとか、みんながポンポン作っちゃって収拾付かないよ〜。
・分かりやすく長すぎないテーブル項目名のつけかたは?
・見やすい帳票レイアウトって? 入力しやすい画面遷移って?

などなど、悩むところはみんな一緒。
DBアプリ開発のノウハウを語るスレッドです。
0856デフォルトの名無しさんNGNG
■Aというビュー
−−−−−−−−−−−−−
| ID | 状態 | 子 |
−−−−−−−−−−−−−
| 10 | 元気 | A |
−−−−−−−−−−−−−
| 20 | 病気 | B |
−−−−−−−−−−−−−
| 10 | 元気 | C |
−−−−−−−−−−−−−

■Bというビュー
−−−−−−−−−−−−−
| ID | 親 | 所在 |
−−−−−−−−−−−−−
| 10 | A' | 東京 |
−−−−−−−−−−−−−
| 20 | B' | 埼玉 |
−−−−−−−−−−−−−
から
−−−−−−−−−−−−−−−−−−−−−−−−−−−
| ID | 親 | 所在 | A   | B | C   |
−−−−−−−−−−−−−−−−−−−−−−−−−−−
| 10 | A' | 東京 | 元気 |   | 元気 |
−−−−−−−−−−−−−−−−−−−−−−−−−−−
| 20 | B' | 埼玉 |    |病気 |    |
−−−−−−−−−−−−−−−−−−−−−−−−−−−
を作りたいんだが、あと一歩のところでできん。親A'の行が2行になって子の状態がわかれちゃうんよね。
どうすれば良い?
0857デフォルトの名無しさんNGNG
項目の数が動的なのか
SQLではムリポ

なんつーかテーブル設計が・・・
0858デフォルトの名無しさんNGNG
>857
回答ありがとうございます。
私が勉強不足なのかなぁ・・・。そこまでが限界か?
あとはビューから結果を持ってきて言語レベルで編集するしかないのか・・・。はぁ・・・。
0859デフォルトの名無しさんNGNG
856じゃないのですが、
項目の数が固定の場合は可能なんでしょうか?
後学の為にご教授ください。
0860856NGNG
すいません、補足。
A、B、Cという列は可変ではなく固定です。
外部結合でやってたのですが、列が増えたら処理が遅く使い物にならなくなったので
列別名とかDECODEとか使って思考錯誤いるんですが、上記まで行って手詰まりになったので
ここで質問しました。
0861デフォルトの名無しさんNGNG
>>856
できたところまででいいのでSQLをしめしてください。
0862デフォルトの名無しさんNGNG
sqlじゃ
select A.ID, B.親, B.所在, A.状態, A.子 from A, B where A.ID = B.ID;
までじゃねーの?

>>860
固定になるわけがないと思うのだが
0863856NGNG
おはようございます。

>>861
今日解決できなかったら示しますね。

>>862
上記例だとA、B、Cの3項目固定なんですよ。A、B、Cは必ず固定で表示します。
誰も病気でも元気でもなければ何も入らないです。

親、子っていう例が悪かったかな?
親をパソコン、子をパソコンのパーツ(CPU、メモリ、CDROM)としたら、
Aのビューは「パソコンのID、パーツの状態、そのパーツは何か」を示し、
Bのビューは「パソコンのID、パソコン名、パソコンの製作会社」を示していて、
AとBをまとめて見やすくしたいというのが目的ですね。

いづれにせよわかりにくい説明で申し訳ないです。
0864デフォルトの名無しさんNGNG
>>860
必要な結果を得る方法がわからないのか、できたけど遅くて
使い物にならなかったのか、どっちなのかはっきりさせよう。
0865856NGNG
こんばんは。
本日頑張って完成させました。
ちゃんと検索処理も充分な早さでできました。
外部結合でやっていた時とは比べ物にならないくらい速くなりました。
いろいろ意見をして頂きありがとうございました。
というわけで下記の式でA、B2つのビューから欲しいビューを作りました。
なんか希望の物できたけどMAXとかはせこい気がするなぁ・・・。
まぁ、仕事速く進んだからいいか。

>>864さん
あえて表現するなら
「できたけど遅くて使い物にならなかったので、新しい方法を考えていたけどなかなか必要な結果が得られなかった」ですかね。
0866856NGNG

CREATE VIEW 欲しいビュー名
(
ID,
親,
所在,
Aの状態,
Bの状態,
Cの状態
)
AS
SELECT
VB.ID,
VB.親,
VB.所在,
MAX( DECODE( VA.子, 'A', VA.状態 ) ),
MAX( DECODE( VA.子, 'B', VA.状態 ) ),
MAX( DECODE( VA.子, 'C', VA.状態 ) )
FROM
A VA,
B VB
WHERE
VA.ID=VB.ID
GROUP BY
VB.ID,
VB.親,
VB.所在;
0867856NGNG
あれ・・・?
式を投稿したのにはじかれてる?
明日載せてみますね・・・。
0868856NGNG
のってた!(汗
連カキコすいません。
0869デフォルトの名無しさんNGNG
オブジェクト指向で言うデザインパターンのDOA版みたいのって、
書籍とかサイトとかないですか?
同一業種でも、パターン化は難しいのだろうか?
でもベテラン設計者って、あるていどパターン化していると思うのだが・・・
メシの種だから、なかなか公開されないモノ?
0870デフォルトの名無しさんNGNG
どっかそういう感じのページ作ってオープンに作るしかないな。
0871デフォルトの名無しさんNGNG
>>869
なかなか公開されないんじゃない?
すくなくとも、複雑になるようなケースではそれで客に信用してもらうことになるわけだし。
0872山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0873デフォルトの名無しさんNGNG
すみません、質問させてください。

知り合いの事業会社が自社で基幹系のシステムを作ることになりました。
販売管理等でユーザー数は100、同時アクセス数は20程度。社内に専用線による
ネットワークは整備済。開発要員は自社でトレーニングして充当するとのことです。
トランザクション量が多めなので、サーバーとRDBはいいものを、ということでUNIX
サーバーにOracleというところまでは仮決まりですがまだ未定。

問題は、アプリの開発ツールをどうするかということなんですが、社内で意見が割れてます。
一人はC/C++/C#のRADツール、もう一人はJAVAのRADツール、あと、Delphiもいます。
決定の最優先事項は、

・RDBとの親和性の高さ(ODBCじゃなくてネイティブで接続可なこと)

です。個人的にはDelphiしかないような気がしてるんですが、ちょっと他の詳しい人の意見も
伺いたく質問させていただきました。みなさんだったらこういう状況で、どのツールを選びますか?
理由も添えて教えていただけないでしょうか。よろしくです。
0874デフォルトの名無しさんNGNG
>>873
>C/C++/C#のRADツール
ほう、俺の知らない間に世の中は進歩してるなぁ。ちなみに製品名はなんての?
0875デフォルトの名無しさんNGNG
>>873
ネイティブの意味がわからんな。
ローカルのDLL触る気か?oo4oにしたいってことか?

転送データ量や、RDBの負荷はちゃんと見積もったのか?
見積もったなら、アーキテクチャの設計に頭使った
ほうがいいんじゃないのか?戦略ミスを戦術でフォローしよう
なんてトーシロな考えはやめろよ。だいたいトーシロがoraの
DLL触ってどうしようっていうんだ?
0876デフォルトの名無しさんNGNG
>>873
アプリの詳細くらい書けよ。
Windowsクライアントなのか、Webなのか、サーバーサービスなのか。サーバーOSも。
多分Windowsクライアントなシステムだろうから、オレの推薦はC#。
あと、ORACLE使うならRDBとの親和性なんてどこも同じ。
トランザクションが多いってどれくらいかわからんし、ネイティブで接続って意味もわからん。
アプリとDB間のインタフェースが簡潔なほうがいいというなら.NET+SQLSERVERだと思うけど。
親和性も問題なし。
それからDelphiはどう考えてもなしだろw
そもそもそんなに意見が分かれてる状況で、どれかに絞って開発できるスキルあるのか?w





0877U ◆CZtFsGiu0c NGNG
>>873
>決定の最優先事項は、
・RDBとの親和性の高さ(ODBCじゃなくてネイティブで接続可なこと)

少なくともこれだけの条件から、

>個人的にはDelphiしかないような気がしてるんですが、ちょっと他の詳しい人の意見も
伺いたく質問させていただきました。

この結論が出ることはないように思えますが。他に条件はないんですか?
ODBC使わずに接続できる、というのならC/C++/C#/Javaどれでもいいと思います。

おそらくクライアント/サーバ型のアプリケーションということは決まっているようなので、
・アプリケーションの配布方法
・データベース以外の制約
・その言語/ツールに習熟している開発者の数

など問題になってくると思うのですが。
0878デフォルトの名無しさんNGNG
Delphiも良いらしいよ。でもDBサポートのパッケージは結構高くなかったかな?
使ったこと無いからしらんが。

たしか、DBが更新されたらクライアントにイベントを送るとか言う特許使ってる
やつだよね。C#のデータセットクラスも、ホントはそれをつけたかったんだろうけど、
やっぱりついてないしな。DelphiはそもそもOracle向けで開発された言語だし
やっぱり良いのかもな。
0879デフォルトの名無しさんNGNG
C/C++ のRADなんてあるのか?
まぁ、C/C++/C# を全部同一視して提案しているような奴の意見を真に受けないことだ。

C# は重いからやめておけ。.NETは次期Windowでネイティブ実装されてから使うのが吉。

Java も重いけど、Windowsクライアントも unixサーバ上の夜間バッチ処理も
同じ言語でかけるというメリットはあるな。
あと、JWS によるアプリケーション配布、更新。

どーせ、クライアントのUIなんて大したもんじゃないんだろ?
開発要員は自社でトレーニングして充当するって言ってるくらいだし。
であれば、Delphi か VB6 でちょいちょいと開発してしまうのが吉。

まぁ、VB6 を提案する人間が社内にいない、C/C++/C# を同一視してる…
その程度の連中で開発したら、どう考えたってデスマーチだがな。
0880デフォルトの名無しさんNGNG
2階層のC/SならPowerBuilderが絶対おすすめ。
はっきり言ってバカにしてたけど、帳票なんかも含むばあいだと、
あれほど簡単にDBアプリを開発できるツールは無いと思う。
ただし、下手に作ると保守はたいへん。

0881デフォルトの名無しさんNGNG
2層クラサバならJavaはやめるべし。
重すぎて現場から文句でるだよ。
0882デフォルトの名無しさんNGNG
>>873
どれ利用しても要件は満たせるような気がするけど。
結局のところプロジェクトのメンバがどの言語に精通しているかによるかな。
C/SのRADだったらJavaはあんまり生産性がよくないからやめておいたほうがいいかもね。
0883デフォルトの名無しさんNGNG
>>881
「二層C/SならJavaやめろ」ってどういう意味?
単純に「GUIクライアントにはJavaやめろ」ということじゃなくて?

キミの書き方だと、C/SのS(サーバサイド)でもJavaが遅いようなニュアンスがあるし、
また、一層モデル(単一プロセスで全処理をこなすJavaアプリケーション)や
三層モデル(たとえばプレゼンテーション層にWebブラウザ+JavaApplet)の場合は
Javaでも遅くない、という意味に取れないこともない。

Javaの大きな問題点は、起動の遅さと、GUIの緩慢さ だね。
これは、GUIクライアントにとっては致命的な問題だ。
0884デフォルトの名無しさんNGNG
>>883
同意
0885デフォルトの名無しさんNGNG
DelphiにはOracle Expressという、ネイティブで接続できる
コンポーネントもある。ADOでも、oracleドライバ(プロバイダ)
でネイティブ接続は可能。もちDelphiからoo4o、ADOを呼ぶことは可能。

>C/C++ のRADなんてあるのか?
DelphiがRADというなら、
C++ BuilderがC/C++RADツール、これならOracleのlibもincludeできる。
(が、多分やらない、Delと同じコンポが使えるから。)。

>たしか、DBが更新されたらクライアントにイベント
>を送るとか言う特許使ってる やつだよね
それはInterBaseというBorlandのDB製品のこと。Delphiじゃない。
>DelphiはそもそもOracle向けで開発された言語だし
おぃおぃ...そんなガセネタ書いたら、
Delphiスレに晒しちゃうぞ。

>Javaの大きな問題点は、起動の遅さと、GUIの緩慢さ だね。
>これは、GUIクライアントにとっては致命的な問題だ。
Win限定なら(前レスの情報よりクライアント環境はWin以外ないと思うが。)
JavaにはSWTがある。

>2階層のC/SならPowerBuilderが絶対おすすめ。
そうね、さくっとつくるなら、PBがいいね。
VB+TrueGridもいい。もちDelphi+サードパーティGridもいい。

ということで、>>882じゃないけど、何でもイイ!ってわけだ。
プロジェクトメンバによりけりということ。
0886デフォルトの名無しさんNGNG
開発要員は自社でトレーニングして、とか、なんかすごいゆとりある会社だね。
つか、販売管理ごときであればパッケージを使ったほうが・・・

0887デフォルトの名無しさんNGNG
パッケージ=帯に短し襷に長し
0888デフォルトの名無しさんNGNG
それを言っちゃうと
フルオーダー=車輪の再開発
になるんじゃ。
販売管理で独自性出してどうする、と。
0889デフォルトの名無しさんNGNG
>販売管理で独自性出してどうする
販売を知らない奴の典型。まあ、再発明と再開発を混同してる時点で終わってるが…。
0890デフォルトの名無しさんNGNG
パッケージ否定派は皆そう言うわな。
ま、顧客自身が独自につくりたがるんだからしょうがないけど。
作り直しの効かない基幹システムをローカルルールで縛りまくって自分の
首締めてるユーザ、結構多いと思うんだけど。

「再開発」については、あえてそう言った。
0891デフォルトの名無しさんNGNG
>作り直しの効かない基幹システム
コボラーの発想。そんな脅しがいつまでも通用すると思ったら大間違い。

>ローカルルールで縛りまくって自分の首締めてるユーザ
システム屋の詭弁。ユーザーが自分の首を締めてるように見えて、実は
設計段階でローカルルールの取り入れ方を誤ってる。
0892デフォルトの名無しさんNGNG
わかったわかった。
「販売管理ごとき」などと書いたのは悪かったよ。
君が、他人の言葉尻捕まえて文句つけるのが得意なのも十分わかったから、
そろそろ本題に戻ろうよ。
0893デフォルトの名無しさんNGNG
>>892
いや、あの、書き方云々ではなくて、パッケージのお話をしてるんだが…。
0894デフォルトの名無しさんNGNG
>>893
逃げ出した奴に追い討ちかけんでもえぇやんw
0895デフォルトの名無しさんNGNG
つまり、DBアプリ開発の極意はとっとと逃げ出す事である。
0896デフォルトの名無しさんNGNG
>>895
それ正解
0897デフォルトの名無しさんNGNG
中小企業、いや個人商店程度ならパッケージでもいいのかもしれないけど、
中規模以上のユーザーではパッケージなんて使ってちゃだめだよ。
そもそも販売管理ってのは基幹業務なわけで、そこに特色を出せない企業は
生き残れないよ。(販売管理システムの良し悪しによって、エンドユーザーへの
サービスの質まで左右されるような時代になったからね。)

いまは多様化していて、販売管理の範疇であっても
業種特有のロジックがあれこれと必要になっている。
基幹系システムと情報系システムの境なんて今後どんどんなくなっていくんだから、
パッケージなんて使ってたら、企業の独自性が出せなくて死亡。
販売管理と言ったって、お金と物品の動きだけで済む時代じゃないよ。
0898デフォルトの名無しさんNGNG
>Win限定なら(前レスの情報よりクライアント環境はWin以外ないと思うが。)
>JavaにはSWTがある。

おまえ、SWT使ったことないだろ? Swingに比べればロードされるクラスが少ないけど、
それでも起動は非常に遅い。それと、独自描画を行わない SWT は Swing に比べて
高速だと思われているけど、必ずしもそうではない。
JNI に依存している SWT は、テーブル表示など JNIコールが多発する状況では
Swing よりも遅くなる。
0899デフォルトの名無しさんNGNG
>>898
がんばれよ
0900デフォルトの名無しさんNGNG
つっこみどころはそこじゃなくて
SWTがWin限定じゃないところじゃなかろうか
0901デフォルトの名無しさんNGNG
>>898
もっとがんばりましょう。
0902デフォルトの名無しさんNGNG
>>898
はいはい。他人の文章の抜粋はいいから勉強しろ。
0903デフォルトの名無しさんNGNG

あ〜だこ〜だと、ウンチク語る奴がまだいたのか・・・
Javaやってる奴にもいるんだよな・・・内部にアレ使ってるから処理が遅いの早いのとウダウダ・・
0904デフォルトの名無しさんNGNG
>>890
パッケージ使ったこと無いだろ。
使えばシステム屋がパッケージ薦めない理由や、少し目端の聞く顧客がフルオーダー
したがる理由がわかるよ。
0905デフォルトの名無しさんNGNG
>>900
書き方がひじょーに悪かった。
>(前レスの情報よりクライアント環境はWin以外ないと思うが。)
でも書いてあるように、クライント環境がWinだけでなく、Unix系でX使用等
複数のOSが混在していないということ。

それだと、SWTで使用した場合、複数のクラスモジュール
管理しなくてはいけないから(Javaの利点がなくなってしまう)ね。
(まぁ、クロスコンパイル可能な製品だと同じことがいえるけど。)

>>898
がんばれ(w
0906898NGNG
え? なに、みんな SWT でパフォーマンスに全然不満ないわけ?
おっかしいなー。
レス数が900を超えています。1000を超えると表示できなくなるよ。