【ノウ】DBアプリ開発ノウハウ【ハウ】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG・似たようなSQLがあっちこっちのプログラムで出て来るんだけど…
・Viewとかストアドとか、みんながポンポン作っちゃって収拾付かないよ〜。
・分かりやすく長すぎないテーブル項目名のつけかたは?
・見やすい帳票レイアウトって? 入力しやすい画面遷移って?
などなど、悩むところはみんな一緒。
DBアプリ開発のノウハウを語るスレッドです。
0232デフォルトの名無しさん
NGNG今の流行なんだろうね。
Servletで十分なのをEJB使ってみたりとか。
おまえEJB使いたいだけちゃうんかと小一時間(以下略
同じようなことがOracleにもいえるがなー
>>230
分散をOracleにしても似たような感じ
0233デフォルトの名無しさん
NGNG>Servletで十分なのをEJB使ってみたりとか。
>おまえEJB使いたいだけちゃうんかと小一時間(以下略
JDBCで十分、つー表現が適切かと(w
揚げ足取りスマソ
0234デフォルトの名無しさん
NGNG偉そうなこと言いたいだけのガキはマ板逝け。邪魔。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG忘れさすフレームワークってどうなんでしょうか?
個人的には大容量のデータ処理には向かないし、
クライアントキャッシュされたデータは
業務的にロックしないといけないし、
なーんかしっくりこないんですけども。
0237デフォルトの名無しさん
NGNG.NETは厨が集まる事わかってんのかいな?
0238デフォルトの名無しさん
NGNGFreeBSDだったってな。
禿シクワラタ
0239デフォルトの名無しさん
NGNG新しい考え方が受け入れられないとCOBOLERみたくなっちゃうよ
ADO.NETはすばらしい
0240デフォルトの名無しさん
NGNGあ、あのー…
SQLが使えるのにRDBじゃないんでしょうか。いやマジレス希望。
0241デフォルトの名無しさん
NGNG5〜6年分(日次単位)持っている会社があるんですが、
やっぱりこれってテーブルを分割したほうが良いんですよね?
「全部一度に見たい」っていうんでビューにしる! って言ったんですが
理由もなく却下されました。こんな企業はDQNですか? 辞めどき?
0242デフォルトの名無しさん
NGNG俺は同じ意味を持つデータは一つのテーブルにおいておくのが好み。
パフォーマンスに影響がでるならしょうがないけどさ。
そんな俺はDQNなんだろうか。
0243デフォルトの名無しさん
NGNG1000人以上くらいですか?
0244デフォルトの名無しさん
NGNGマシンスペックが低い可能性も考慮せよ
0245デフォルトの名無しさん
NGNGパフォーマンス、ディスク容量、バックアップ等の管理考えて問題
なければいいんじゃない。
oracleなら別表にしないで、パーティションにするけど。
オプションは高いが。
0246デフォルトの名無しさん
NGNGなんで社員数かけてんの?
勤怠かなんかのトランザクションなのか?
社員数少なくても業務によっては膨大なトランザクションデータを
日々発生させているんだよ。Web受注システムとかな。
0247デフォルトの名無しさん
NGNG設計が重要で、影響でかいのは決まってるけど、実際はチューンも必要に決まってるジャン。
多人数でやってりゃタコもいるしミスもあるし、遅くてもとりあえず動かす必要
があれば動かして、稼動後にチューンだよな。でなきゃ会社つぶれるしね。
設計よかったとしても、だいたい、ウォーターフォール開発の時代じゃ無し、設計要件が固定のまま
のはず無いし、いくらデータモデルが安定っていっても追加、変更はあるしね。
「私の辞書に、やってみなければ分からないという言葉はない」ってマジこのとうり
言ったコンサルもいるけど、結果は...。神様でもなきゃ完全に
見切れるわけない。世の中動いてんだから。
以上、設計いいかげんでいいという話ではない。が、スケジュールにチューン期間
を考えないのも、非現実的。
0248デフォルトの名無しさん
NGNG> 実務では過去1年のデータがあれば十分なのに、
これが本当ならば、5〜6年分持っておくこと自体がムダ。
使いもしないようなデータを後生大事に取っておく会社多いよね。
しかし全部見たいというニーズがある以上、そのデータになんらかの活用方法が
あるわけだから、分割などは避けるべき。
データは人間が使ってこそ意味がある。コンピュータよりの都合であまり不自然な
形にするべきじゃない。
だいたい>>241にしたってコッチから見れば
過去5〜6年分のデータを「分割しる!ビューで見れ!」理由もなくって言ってるんですが
こいつはDQNですか? 辞めさせどき?
だぞ。そもそもなんで分割したいんだ?
0249デフォルトの名無しさん
NGNGなんかもうツッコミ所満載なんで途中までレス書いてたけどヤメタ。
あくまでノウハウを語るスレだし。
もう1度コンサルに教えを請うた方がいい。
>「私の辞書に、やってみなければ分からないという言葉はない」
この意味が分かるようになるまでね。
0250デフォルトの名無しさん
NGNGキャッシュ可能容量の概算。
0251デフォルトの名無しさん
NGNGものについて質問があります。
リレーションシップの役割や概念は分かってきたのですが、
自分が、「売上テーブルと売上明細にはリレーションシップを
設定して」と頼まれた時、具体的に何と何をすればいいのか不安です。
具体的な作業として、「リレーションシップを設定する」とは
どういう作業をさすのでしょうか?教えてください。
簡単に売上テーブル(売上No)と売上明細テーブルをつくる
作業を仮定させて頂いたとして、
「リレーションシップを設定する」というのは下記の、どちらでしょうか?
1.具体的な命令句ではなく、売上明細テーブルの中に売上No(売上テーブル)を
含めた、段階でリレーションシップが設定された、と判定される(設計段階?)。
2.PostgreSQLのCreate Tableの命令で具体的に参照整合性を
設定をすることが、リレーションシップの設定である。
たぶん、まだ理解が足らないかと思われますので、
上記の例に含まれていない場合、可能なら具体的な作業を
例示してご教授いただけないでしょうか?
もし、この本に全部書いてあるよというような
参考書がございましたら、そちらをご紹介頂いても
結構です。よろしくお願い申し上げます。
あと、ここではなく、他で聞け、という場合もご指摘ください。
0252デフォルトの名無しさん
NGNGこっちこっち
http://pc.2ch.net/test/read.cgi/tech/1001351439/
0253デフォルトの名無しさん
NGNG書き直しました.
0254241
NGNGうむー。そうですか。辞めさせられどき? 辞めさせられる前に辞めとくか・・・。
あと、PGが設計に口挿むのはマズーなのですかね?
(SEはExcelのセルの中身を参照式にするか値にするかって聞いたら「?」が出る程度です。)
テーブルの状態はカラムが300くらいあって、完全にパフォーマンスの足を引っ張ってます。
管理するチームがないので、テーブルスペースもほとんど分割せずごった煮状態。
(これらの分割も却下されてる。テーブルスペースの数=HDの数=5)
普段の業務で使用するのは夜間で集計した結果だけで、明細の履歴はほとんど見ない。
(というか、かなり上のほうの人間しか見てはいけないもの。あ、でも参照権の設定はしてなかったような・・・。)
過去からの推移が見たい、というのは解るですが、
集計の履歴はちゃんと持っているし、再計算はほとんどしないのです。
(データが確定した過去データの再計算が頻繁だとそれはそれで問題のような気も。)
しかも、集計した履歴は1年しかもってませんし、それ以上は遡って計算できません。
(アプリが対応していないから。)
ちなみにDBMSはSybase。
Sybaseにパーティションテーブルかそれに類似するものってあります?
0255デフォルトの名無しさん
NGNG>>241の段階ではそんなに詳しくかいてなかったじゃん。
おれは248じゃないよ
0256241
NGNGスマソ。あんまり書くとバレそうだったので。
もう開きナオテ書きました。それでもかなり端折って書いてます。
でも、テーブルを分けること自体はあまりオススメできないのですね。
0257デフォルトの名無しさん
NGNGというかテーブル分ける云々以前にやることが山盛りだと思われ
0258デフォルトの名無しさん
NGNGこいつか。
0259デフォルトの名無しさん
NGNGSQLはデータストアにアクセスするための記述言語で、
RDB専用というわけではない。
0260デフォルトの名無しさん
NGNGオマエか。
0261デフォルトの名無しさん
NGNGなんだなんだ? お前等ホモか?
0262デフォルトの名無しさん
NGNG>>259
どもども。そっか。そうなんだ。
…で、俺の定義ではいわゆる選択、射影、結合が
SQL等の操作言語でできれば、それRDBなんじゃん?って思うのです。
MySQL、マニュアル見た限りでは全部できそうなんだけど。
>>254
列が300…正規化、されてます?
0263デフォルトの名無しさん
NGNG確かに設計も何も無さそうだけど、それを年単位に分割するという発想も変。
0264デフォルトの名無しさん
NGNG年単位かどうかは書いてないけど、そうなの?
管理がたいへんじゃん。列数も300だっていうし。
0265デフォルトの名無しさん
NGNGそれじゃまとめとしては、WO最強。ってことで。
0266デフォルトの名無しさん
NGNG同意。
よって
==========終了==========
0267質問させてください
NGNG技術的な興味もあって、データベースを使ってみようと思っています。
PostgreSQLを準備してJDBCでアクセスできる環境は整っています。
簡単なサンプルなどをみると、データベースに直接SQLを書いたり、返ってきたデータ
(java.sql.ResultSet)を直接使ったりしていますが、規模が大きくなってくると管理が
困難になりそうな予感が禿げしくします。
理想的にはjava上のインスタンスひとつをデータベース上の1行に対応させて、インスタンスを
操作するとその内容がデータベースにも反映されるような仕組みがあれば、データの操作
ロジックとデータベースのアクセスロジックが分離できて良さそうな雰囲気がします。
しかし、トランザクションなどを考えるとjavaインスタンスとの同期を真面目に実装するのは
たいそうメンドウな仕事になりそうです。
おそらく多くの人が考えることなので、すでに多くの成功設計例があるかと思うのですが、
キーワードが思い当たらずうまく探せないでいます。
このような問題を考えるのに適した参考サイト,書籍,キーワード,ライブラリなどご紹介
いただけないでしょうか。よろしくおねがいします。
0268デフォルトの名無しさん
NGNGアフォらしくて泣けてくる・・・
早く仕事でEOF使いた ぃ ょ ぅ ・・・
0269デフォルトの名無しさん
NGNGそれってCMPなエンティティBeanではないの?
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGポーリングするしかないですかね。
それとも直アクセスは禁止したほうがいいのかな。
0273デフォルトの名無しさん
NGNGしとけ。
0274デフォルトの名無しさん
NGNG機能があるが。その他のDBにもあるはず。場合によっては、インステッドトリガ
といって、更新DML全体をフックすることもできたと思う。
ただ、トリガーをあまり使うと、ブラックボックスが多くなってシステム
全体の見通しは悪くなると思う。ちなみに私はトリガーあまり使わない。
トランザクション的に非同期でよいのなら、DBトリガーで外部にメッセージ
を発信するだけにして、実際の処理はそのメッセージを受けたプロセスが
実行するようにするといいと思う。
0277デフォルトの名無しさん
NGNGたとえば、、、
作成したアプリの実行環境はWin限定
DBはORACLEが基本だが、場合によってはSQL Serverもあり
なーんていわれたら、どんなコンパイラ選びます?
あ、あくまでもクライアントPC上で動作するexeファイルを作成する
目的であり、Web系のアプリ作るわけじゃないですが。
0278デフォルトの名無しさん
NGNGVB
0279デフォルトの名無しさん
NGNG俺は慣れてるからBCB使うけど。
0280デフォルトの名無しさん
NGNGJavaでWebObjects。
Oracleで作ってたシステムを、アプリ側はコード変えずにSQL Server用に
できちゃったりなんかしちゃったりする。
0281デフォルトの名無しさん
NGNGODBC, JDBC かませとけば WebOjects じゃなくても みんなそーなんじゃない?
つーか、システムの内容にもよるけどふつーはバックエンドの処理を
DB依存のストアドで記述するから、ODBCとか使っていてもDBを交換できない罠。
0282デフォルトの名無しさん
NGNGじゃあ280のいう「コード変えずに」というのはどの部分の話?
ODBCやJDBC経由すればアプリ側のコードが変わらないのは当たり前だと
思うんだけど・・・
0283デフォルトの名無しさん
NGNG要求仕様が...
> DBはORACLEが基本だが、場合によってはSQL Serverもあり
なのに...
> DB依存のストアドで記述する
あなたは、ヴァカですか ?
0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNGその基本って考え方がド素人。
プーか?
0286281
NGNGオレが「ふつーはDB依存のストアドで〜」って言ったのは、
280のWebObjectsのDB非依存性に対しての現実的回答ね。
決して、277のクライアントアプリケーション作るのにうんぬん、
に対するコメントではないよ。
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNGセッション管理とかConnection Poolとか一切無し。
こんな製品作ってる会社からは、一刻も早く抜け出したい今日この頃。
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGcreate table header(id serial,text hoge);
create table detail(id serial,header_id,text foo);
みたいなテーブルで、headerで採番されたidをそのままdetailに使いたいと思うんだけど、
insert into header (hoge) values('abc')
としたときのidを取得するにはどうしたらいいの?
PostgreSQL 7.2.1(on Linux)
0294デフォルトの名無しさん
NGNGSELECTした値でinser into detailしる。
その際detailのIDは自動採番にせずに普通の整数型にしる。
それがいやなら
headerとdetailのidを関連づけするためのリンクテーブルを作成しる。
0295デフォルトの名無しさん
NGNG0296Delフサギコ ◆zE1iiRdQ
NGNG/...... .. .../
||::: ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|: ̄\ ミ,, ゚Д゚ミ< SQLの日付教えて!
|: :|: ̄U U ̄:|\_________
|: :|: .:|
DATEフィールドに日付が入っているときに
WHERE
("2002/05/22" <= DATE)
AND (DATE <= "2002/05/24")
こんなSQLを流してるんだけど、
このSQL文ってDBに依存している気がするです。
どのDBでも使える、SQL文によるDate型の比較方法って
なんかあるんでしょうか?
氏ってたら教えてくださいませ。
0297デフォルトの名無しさん
NGNGないと思われ。
日付型はDB依存になるのであまり好きでない。
0298デフォルトの名無しさん
NGNG実際は2002/05/24 00:00:00と評価されると悲惨ですな。
0299デフォルトの名無しさん
NGNGやっぱ日付は文字型だろ。
0300デフォルトの名無しさん
NGNGだな
0301デフォルトの名無しさん
NGNG期間を指定した検索するときは?
0302デフォルトの名無しさん
NGNG2000年問題も過ぎ去ったとまた日付をYYMMDDでフィールド
設計やっているうちの会社は厨房ですか?
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNG0306Delフサギコ ◆zE1iiRdQ
NGNGミ*゚Д゚彡
ヤパないのね。
0307ぽっくり
NGNG同じサーバー内にデータベースの数を増やせば
増やすほどパフォーマンスは低下するものなのか?
なぜ、低下するのか等の理由も教えて!
分かるやつ、教えろ。
0308デフォルトの名無しさん
NGNGいっぱい動いているからじゃない?
03090うぇん
NGNG--------------------------
1 |ギコ |test... |1 |
2 | モナー | 逝ってよし| 2 |
3 | シー |ウトゥ |2 |
3 | 肉 |ゴルァ |2 |
こういうテーブルで
part | count
----------
1 | 1
2 | 3
こういうviewってストアドとか使わないでsql文で出すには
どーやったらいいんすか?
0310デフォルトの名無しさん
NGNGselect part, count(part) from ... group by part ってな感じで。
0311デフォルトの名無しさん
NGNG?
0312309
NGNG0313デフォルトの名無しさん
NGNG0314逝って良しの1
NGNGデータベース間での情報の整合性取るのは台数増やせば増やすほど
増える。
0315デフォルトの名無しさん
NGNGOracleは大文字の方が早いって聞いたことがある(眉唾)
0316デフォルトの名無しさん
NGNGC/Java のコードは小文字が多いので見分けを付けやすいように (外部
ファイルに定義することも多いが)。
0317デフォルトの名無しさん
NGNGとか、命令は大文字でやっとる。
0318デフォルトの名無しさん
NGNG>241 >248
みたいな場合は継承つかったらどうかな?
0319デフォルトの名無しさん
NGNGSelect 名前 From テーブル Order By コード
テーブル名、列名は日本語。これ定説。
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNG全ての文字情報はDBに存在するってアプリってどう思う?
0322デフォルトの名無しさん
NGNGPL/SQLでインサート文を作ってDBにインサートしたい。と考えてます。(1500万レコード)
である列は乱数を発生させて(DBMS_RANDOM)それを0埋めで15桁に加工したい。それで他のレコードは1〜10
までの数をランダムにインサートの文に埋め込みたいと思います。
可能なのでしょうか?もし可能であればヒントを教えて頂きたく思います。
(カーソルを用意して処理をするのだと思いますが、1〜10のレコードをランダムに埋め込むというのが考えつきません。)
0323デフォルトの名無しさん
NGNG極度に高い応答性を要求するアプリでそれは酷いけど
べつにいいんでない?
windowsでいうところの文字列リソースだってダイアログリソースだって、
あるいみDBみたいなもんだし。
0324デフォルトの名無しさん
NGNGふつうにCかperlかVBかrubyか手書きでもいいから
挿入文を150万レコード分作りなさい。
途中にcommit文を入れとくと、たぶん吉。
0325デフォルトの名無しさん
NGNG(15桁に)
別にTO_CHARで編集するだけでいいだろ。ただし、DBMS_RANDOMでは
BINARY_INTEGER=signed longという罠はあるが。
(1〜10まで)
意味がよくわからないんだが、特定のカラムに1〜10の数をランダムに入れるのか、
カラムが1〜10まであって、どれか1つに何かの値を入れたいのか、1個から10個の
レコードをランダムにINSERTしたいのか。
1番目なら乱数を9で割った余りに1を足すとか。
2番目なら動的SQLを使うしかない。DBMS_SQLパッケージ参照。
3番目なら乱数とってFOR〜LOOPだろ。
0326デフォルトの名無しさん
NGNG1つ目の要件は、LPADでいけないかな?
俺は使ったこと無いんだけど・・・・
いろんな人の意見を聞きたいのでageておく。
こーいうとき、Perl使えれば楽だろうなぁとは思う。
0327326
NGNGまず、
> ある列は乱数を発生させて(DBMS_RANDOM)それを0埋めで15桁に加工したい
これは、326で書いたとおりLPADでいける。
> 他のレコードは1〜10までの数をランダムに
これも、DBMS_RANDOMを使えば可能。
手元の「Oracle8i PL/SQL パッケージ・プロシージャ リファレンス リリース8.1」に
よれば、DBMS_RANDOMは
このジェネレータは8 桁の整数を生成します。
ということなので、この結果を1000000で割ると、
必ず絶対値が10未満になる。
さらに、ABSあたりで正の整数になおし、
ROUNDで小数点を丸める。で、0だったら1を足すと。
値のばらけ具合はわからんが、とりあえず欲しい結果は出るでしょう。
でも、マジでPerlかC使った方が楽そう・・・・
PerlならDBIで直接Insert出来るし、Cで直接が難しくても
SQL*Loader使えば良いし・・・
0328デフォルトの名無しさん
NGNGことがありますよね。この時の 0..1なのか 1..1なのかってテーブル見て
わかりますか?
[学生]テーブルと、[サークル]テーブルがあって、
学生テーブルにサークルIDの参照キーがあったとして、
[学生]
学生ID PRIMARY
サークルID FOREIGN KEY
[サークル]
サークルID PRIMARY
この学生.サークルIDがNOT UNIQUEならばサークル:学生は1:N、
UNIQUEならば(そんなケースはないだろうけど)サークル:学生は1:1だなって
のはわかるんですが、(1..1)なのか(0..1)なのかがわからないような気がして。
0329デフォルトの名無しさん
NGNG学生.サークルIDがUNIQUE可で、かつNULL可ならば、
サークル:学生は (0..1):N はわかるような…。
でも、サークル側から見たときに、学生が「1以上」なのか「0以上」なのか
がわからないんでないかなと思ったのです。
ああ自分で書いててわけわからん…
0330デフォルトの名無しさん
NGNGSQL-92のEntryだと無理
テーブル間の制約をかかにゃならんでしょ。SQLパズルにそういう例なかった?
0331デフォルトの名無しさん
NGNGほとんど同じような内容のテーブルが複数あるのですが、
区分フィールドを作ってひとつのテーブルにまとめた場合と
別のテーブルのままと、どちらが検索時間が早いですか?
■ このスレッドは過去ログ倉庫に格納されています