1 :
デフォルトの名無しさん :
02/03/11 09:43 ・SQL文をコード内に埋め込むとコードが汚くなっちゃう。うまく分ける方法無い? ・似たようなSQLがあっちこっちのプログラムで出て来るんだけど… ・Viewとかストアドとか、みんながポンポン作っちゃって収拾付かないよ〜。 ・分かりやすく長すぎないテーブル項目名のつけかたは? ・見やすい帳票レイアウトって? 入力しやすい画面遷移って? などなど、悩むところはみんな一緒。 DBアプリ開発のノウハウを語るスレッドです。
良スレの予感
3 :
デフォルトの名無しさん :02/03/11 09:54
応援するYO! 俺も、今からまさにDB連携作成に入るところ
>1 >Viewとかストアドとか、みんながポンポン作っちゃって ってのは、開発上の取り決めが無いのが問題なだけだと思われ。
5 :
デフォルトの名無しさん :02/03/11 12:53
>>1 「SQLをコード内に埋め込むと汚くなってしまう」の
実例をお願いします。いままで、Pro*CやVBで、DBを
使用したアプリケーションを開発してきたが、この例に
ぶち当たった経験がないものですから。
汚いテーブル設計はいやというほど目の当たりにしてきたが。
>>5 WebObjectsをやってみるとわかるかも
C#でストアドが作れるらしい。次のSQLサーバでは。
>>5 全てがストアドプロシジャとして実装できればハッピーですが、
実際にはダイナミックにSQL文字列を作成しなければならない場合も
あったりして。
個人的には複雑な検索条件でWhere節(区)なんぞを動的生成したりする
事が多いですが、みなさんはどうしてます?
>>9 もちろん、プログラムから動的にSQLを
生成するのが基本。select句にしても、
select 以降、すべて条件によって
変化する。
ストアドプロシージャを使う局面は
ごく限られる。
...と思っていたが、それって、醜い
のか?(汗)
11 :
デフォルトの名無しさん :02/03/11 22:34
難しいよね
>>10 基本的にはそれを使ってもいいと思うけど、
クエリーが少ない場合はベタの方がいいかも。
13 :
デフォルトの名無しさん :02/03/11 23:38
SQL文自動生成の良いクラスってないの?
まぁ、なんでも使いようです。 列名に型を表すprefixつけるとやり易い って、基本か(w
DBアプリって何言語で作ってますの? アクセルするにはODBCとかでやってるんですか?
16 :
デフォルトの名無しさん :02/03/11 23:49
ストアド内で動的SQLを駆使してコーディングすれば良いのでは?
>>16 そのトウリデス。
パーフォーマンすをかんがえたら、
ストアド以外使用するべからず。
ADOのレコードセットでフィルターをかますって事を やっている人はいないのかな?
19 :
デフォルトの名無しさん :02/03/12 10:22
>>18 普通はやらないと思われ。
というか、そういうレベルの話をするスレなのか?
基本的なDBとのやりとり(SELECT/INSERT/UPDATE/DELETE)は ストアド化する、って手法は普通でしょうか?
21 :
デフォルトの名無しさん :02/03/12 11:24
>>20 なんでもかんでもってのはやりすぎかも、でも多言語での開発を行う場合、例えば
入出力系はVB、DelphiなどのWindowsクライアントで、照会系はJava、PHPなどで
Webブラウザを使用ということになると、DB操作の一元化って事で、なんでもストアド
ってアプローチもいいんじゃないかな。
でも、その辺を突き詰めると、きちんとMVCに分けてAppServerを立てるって話に
なっちゃうね。
>21 多言語での開発ってのを考慮すると確かに有効ですね。 参考になります。
>>18 GUIレベルの機能として必要なところには使ってるな。
一覧から選択する画面のフィルタとかね。
いいテーブル、フィールド名の付け方ってどんなの? いまのところ ・とりあえず英語表記 ・テーブル名はカテゴリに合わせてプリフィクスを付ける(台帳:ADM、マスター:Mとか) くらいでやってるけど、実際どーなんでせうか。 英語表記を使うとSQLの予約語とかぶる罠
25 :
デフォルトの名無しさん :02/03/12 17:21
>>24 英語で名前をつけると、1テーブルのフィールド数が500とかなるとキツイ。
500個すべて英語にするのも、辞書引いてもわからないのも多い。
仮にローマ字表記でも、500はちょっと.・・・。
そういう場合、24はどうしてるんだ?
テーブルの正規化しろよ
>>27 したいのはやまやま。
しかし、人事データでの場合単なるデータの羅列で、それくらいの情報はある。
また、レガシーなシステムを捨てられない辛さもある。
今作ってるアプリもともとAccessだったが Sヨが 「Accessだと256?以上フィールド増やせないからOracleにしる!」 とかいってOracleになりましたが、なにか? 正規化すればせいぜい1テーブル50フィールドくらいにしかならないがなー。
お約束かもしらんけど、テーブル名は「T01」とか頭につけるなぁ。
31 :
デフォルトの名無しさん :02/03/12 18:25
>>25 立場的につらいなぁ。過去のがからむと。
俺も人事やったことあるけど、やっぱり項目数が多かった。
しかも正規化できないやつ。
それより、論点ずれてきてるから戻さない?
テーブル、フィールド名の名前の付け方に。
項目数が多いのも考慮に入れて。
戻ってた。ごめん。
VBでリソース使ってSQLは全部そっちに記述するようにしてみたが... やるんじゃなかった(T_T)
34 :
デフォルトの名無しさん :02/03/12 18:35
フィールド名は頭に'_'をつける。
35 :
デフォルトの名無しさん :02/03/12 18:50
SQLって大文字小文字を区別しないからつらくない? javaとかでありがちなfirstNameとかとあわせづらい。 FIRST_NAMEとか、first_nameってつけた方が良い?
Javaだけの問題でないと思われ・・・
粘着がいるね。 1か(w
>>38 おいら
>>21 しか書いてない。
そういうノリやめよ。だれも粘着なんかしてないしさ。
>>35 つらいよねー。
結果、英語表記だとアンダーバー多用してしまうし・・・
41 :
デフォルトの名無しさん :02/03/12 21:44
ちょっと調べてみたけど、.NET、Relaxerなどのサンプルは、アンダーバーを 使わずに、大文字小文字混合みたい。 FirstNameやfirstNameとか。
43 :
デフォルトの名無しさん :02/03/12 22:05
>>18 ADOのFilter使ったほうがトラフィック&速度的に
良さそうなんだけど、そういう目的では使わないの?
たとえば 製造会社:Manufacturer 製造番号:Manufacturer_Serial_Number -> Manu_No とかってなんかいい書き方ない? と書いてる最中にmakerにしたほうがいいのに気づく罠
>>14 列名に型を表すprefixつける
って基本なのか?
みんなそうなの?
違うと言ってくれ。
47 :
デフォルトの名無しさん :02/03/13 00:13
>>46 型が変わったときのことを考えると背筋が寒くなるのでやらない。
やったとしても、文字か数値か日付かってぐらい?
48 :
デフォルトの名無しさん :02/03/13 00:58
>>45 そうだよね。あるある。
結局英語ネイティブから見れば、こちらが苦労して辞書引きながら
やっても、おかしく見える場合って結構あると思う。
よって自分の場合はあきらめて、ローマ字表記で書いてる。
>>48 潔くTM0010,TM0020,TM0030...
>>43 メモリ馬鹿食いするんで、多数のセッションをはるWEBアプリなんか
で使うと大変なことになります。
つーか、場にそぐわない話しなんでやめます。
>>48 ローマ時表記は個人的には嫌い。
「し」とか「おー」とかを表記するときに2通りあるんで結構困る。
51 :
デフォルトの名無しさん :02/03/13 22:33
あんまりもりあがらないスレだな(w
>>48 ローマ字は英語表記のできない専門用語とかにしか使わないなー。
理由は
>>50 の通り。
つか、「日本語ふつーにつかうよ」つー人がでてこないのが珍しい。
>>49 メモリマップ見てる気分になってくるからイヤソ
52 :
デフォルトの名無しさん :02/03/13 23:28
日本語ふつーにつかうよ。プレフィックス英字+日本語列名 わかりやすいし、見やすいし、コーヂングも仕様書作りも、すげー便利。 問題あると言う人もいるけど最近はもう大丈夫でしょう。
最初はくそスレけていと思ったけど、よくなってんじゃん。
なんかSQL鯖2kで日本語フィールド名絡みと思われる不具合が... まだなんとも言えないけど。
機種依存文字使うと強制[ ]になるね それを気にしないうちの上司、もう阿呆かと莫迦かと
56 :
デフォルトの名無しさん :02/03/14 08:21
>>52 文字コードの違うプラットフォームから叩こうとした場合に、寝ているバグを
起こしそうでちょっとコワイ。
57 :
デフォルトの名無しさん :02/03/14 11:24
お前らきちんとパラメータ付きクエリー使ってっか? キャッシュが効かなくて無駄だらけなんだけどもよ。
58 :
デフォルトの名無しさん :02/03/14 18:16
>>57 パラメータ付きクエリーってjavaのPreparedStatementのこと?
確かになんらかのリスクがあるのはわかるのですが、 でるのかでないのかわからない不具合に備えるより 日本語を使うメリットのほうが大きいと勝手に 思ってそうしている。 さすがに機種依存文字は論外。 2バイト文字の記号も避けて 第一水準だけ使う。 文字コードが違う場合は列名どころの話では済まない あらかじめ複数の文字コードに完全対応するのはあきらめ ましょう。 ていうか俺はあきらめてる。
> 文字コードが違う場合は列名どころの話では済まない > あらかじめ複数の文字コードに完全対応するのはあきらめ > ましょう。 で、のちのちシステムを拡張したり、 別のDBやOSに移行しようとして嵌る罠。
>>58 javaしらんけどたぶんそれ。
以前分業してやったWEBアプリ、WHERE句とかsprintfでべた書きされて手萎えたんでな。
あまりにもアクセスが閑散としてたWEBなんで黙ってたけどな。
62 :
デフォルトの名無しさん :02/03/15 22:51
sql文を単純にsprintfでやるとエスケープされるべき文字列が エスケープされないからねぇ。
cgiに'を食わせると狂うサイトのいかに多いことか..
64 :
デフォルトの名無しさん :02/03/15 23:13
IDとパスワードを要求するフォームで パスワードを ' OR 'a'='a っていれられたら終わりってのもあるらしい。
ありがちだのお。 ああいうcgiつくる馬鹿も馬鹿だが そんなものを検証せずに受け取っちゃう方も受け取っちゃう方だなあ
66 :
デフォルトの名無しさん :02/03/18 22:13
ヘタヘタレです。教えてください。 INSERT 文に ストアドプロシージャを使うメリットって何ですか? 普通にSQL文書く場合: sql = "INSERT INTO TABLE_A VALUES('" + strA + "'," + int1 + ",'" + strB + ............."')"; ストアド使う場合: sql = "Execute InsertTableA '" + strA + "'," + int1 + ",'" + strB + ....................."')"; コードはストアドにしてもあんまりすっきりしないような・・・。 直前にDELETE文走らせることができるくらい。 なんか俺間違ってます...よね?
あああ、なんかバカまるだしだ・・・。鬱。 INSERT INTO ... SELECT とかするときは、多分すっきりするよね でもあんまり使う機会ないな・・・。
「INSERT時はこれを使う」と決めることで、 統一されたコーディングになるというメリットはあるかも。
69 :
デフォルトの名無しさん :02/03/18 22:28
>>66 すでに同一キーがないかどうかチェックしたり、各フィールドの妥当性検査したり
他のテーブル更新したり…いろいろあるじゃん。
なにより、すべてのInsertがストアドになってるほうが、プログラムのあちこちに
似たようなSQLが埋め込まれるより安心でしょ?
すっきりしないのはどうしようもない。ような気がする。
関数化すれば多少はすっきりすると思われ。
データベースの定義を入力すると、>69が書いているような 内容のストアドを各テーブル分吐いてくれるってツールもあるよ。
>>66 クライアントはCやC++ですか?
jdbcならprepardStatement、MSならadoやodbc等
普通パラメータを名前付きバインド変数として使いませんか?
(jdbcには名前付きパラメータってあったかな...)
仮想的な例ですが、
SPject sp = SPObject( "InsertTableA" );
sp.Prms["strA"] = "test";
sp.Prms["int1"] = 100;
sp.Prms["strB"] = "data";
sp.Execure() ...
みなさん、ありがとうございます。
もっと勉強してみます。
>>70 便利そうですね。探してみます。
でもうちのプロジェクトだと、フリーじゃないとだめそうっす。
>>71 JSP/Servletでやってます。
恥ずかしながらはじめて聞きました。
何も知らない新入社員として入社して、まもなく1年、
"普通"、"標準"という言葉に強い憧れを感じます。
Googleで Java バインド変数 でそれらしきものが
いくつかでてきたので、勉強してみます。
73 :
デフォルトの名無しさん :02/03/19 12:40
VARCHAR2(4000)などという項目が20列近く、レコードが数万件あるテーブルから すべての項目について部分一致検索を行いたいのですが、 Oracleはこのような検索には弱いようで、検索結果が表示されるまで 数分以上掛かってしまいます。 ところが検索結果を待てる時間はせいぜい10秒程度という要求がなされています。 (Notesの旧システムはその位のパフォーマンスが出ていた) Oracle InterMedia TEXTという全文検索エンジンを導入すると、劇的に 改善されるという情報もありましたが、これは金銭の問題により導入は困難です。 当面の代替策として、Oracleへのアクセスを行っているWEBサーバの中に、 件の巨大テーブルと同じ構造・データを保持したMDBを配置し、 全文検索はそちらから行うようにしているのですが、それでも 検索に1分程は掛かってしまいます。 なにか安上がりで現実的な、良い代替策をご存知の方はおられますか?
74 :
デフォルトの名無しさん :02/03/19 13:29
>>73 テーブルの更新をトリガーにしてテーブル各行の主キーをファイル名として
各フィールドの中身を丸々コピーしたテキストファイルを吐き出しておき
それを全文検索エンジン(Namazuとか)に喰わせるのはいかがですか?
ファイル名=主キーですから、そこからさらにテーブルをSELECTすることも可能です。
・検索用ファイルの件数、容量が丸々テーブルと同じだけの件数、容量が必要なこと
・検索エンジン用のインデックスを作るのがバッチ処理になってしまうこと
上記2点がクリア出来れば実用十分な検索速度が得られると思います。
全文検索エンジンをつかうか KWIC検索みたいのを考えてみなさい。 インデックス用のテーブルを別に持つ以外手はないだろう。
>>75 ケコーンしてるクセに随分偉そうだな。ガッコの先生にでもなったつもりか?
>>74 の方がよっぽど的確で親切じゃねーか。
77 :
デフォルトの名無しさん :02/03/20 18:17
他スレで思いついたのだが おまえらロックはどうやってますか? 参照・蓄積系はそんな問題にならないだろうけど、 更新系C/Sとかだと結構悩むところだと思うのだが、どーだろ? 漏れは来た仕様が悲観ロックばっかりなんで そのまま実装しておしまいだが。
>>77 お祈り系。
(クライアントが極めて少数で且つ同時に参照している事が運用場無い)
更新は夜間バッチ。 これ最強。
80 :
デフォルトの名無しさん :02/03/20 19:17
更新系でも建家が違ったりした場合に、悲観で死んだ。
クライアントからはストアドしかみせないようにしとけば、 なんとか手綱が握れるだろう。 お祈りはダメ。
悲観ロックって何?
やばそうな床とりあえずロック?
84 :
デフォルトの名無しさん :02/03/20 21:41
>>82 排他ロックのことだYO!
つまり、誰かがSelectしたら、読み取ることができない。
85 :
デフォルトの名無しさん :02/03/20 23:23
漏れRDBMSの経験あんまないんで聞きたいのだが いわゆる排他(といわずともなんかしらの方法で同時更新させない) ような*動作*をさせるときに行ロックとかを使わない方法ってある? あるとすればどうやるんでしょ? 思いつくのは更新要求を非同期に扱うくらいだけど それだと即時更新できなくなっちゃうし。 あとはワーク用テーブルとかも思いつきそうだけどデータの矛盾がおこりそうだし。 実務でバリバリやってる方多そうなんでノウハウぷりーず。
86 :
デフォルトの名無しさん :02/03/20 23:27
追記。 いまOracleでやってて仕様が排他的動作なんで SELECT〜FOR UPDATE使ってやろうと思ってたんだが うちのSヨから「行ロックなんて普通使いませんがなにか?」 っていわれたもんで悩んでおります。 (わりに解決方法は提示してこない) 結局ケース倍ケースなんだろうけど実際どーなの?
>>86 いや使う。
結構使う。
テーブルごとロックした方がいい場合もあるけど競合を抑えられそうなときは行ロックを使う。
使うんだが、そのSヨはよくしらんのか、たまたまその業務でつかわんでいいのか、
三回くらいリトライして交信中に矛盾が生じたためあきらめましたごめんメッセージが出るのか、
それともたまに謎のデッドロックするのかのどれかだろう。
行ロックの行数が増えると自動的にテーブルロックに格上げすんのってHiRDBだっけ?UDBだっけ?
>>88 なるほろ。
やっぱロックしないとなると更新できないケースが出てしまうってことなのかな。
で、前にちょっとかじった情報によると、最新のSQLServerは
ロックの量?によって行 > ページ > テーブルロックとなるらしい?
だれかつっこみよろしく。
90 :
デフォルトの名無しさん :02/03/21 00:06
>>88 必ずしも使うわけではないと思うよ。
行ロックがないものもあるわけだし。
それでかなりクリティカルなものをやっているところもあるみたい。
DBが違えば、そこら辺の考え方はコロコロ変わってしまうしね。
今使っているDBの考え方から他のDBを評価するやつも多いしね。
>>89 そうそう、SQL Serverの機能だ。
行->ページテーブルでよいはず。
>>90 行ロックがないのはISAMから派生してきたやつじゃねえの?
普通の商用RDBだと、最近のバージョンのは大体持ってるけどな。(効率がよいか悪いかは別で)
必ずしも使うわけでないのは同意。
しないで済むならしないのが一番だ。
>>最後の二行
DBがちがうから考え方が違うんじゃない。
異なるコンセプトで設計されてるから、DBを選ぶべきなんだ。
前にも書いたがOracleしかしらんベンダは逝ってよし。
業務ごとにDBの向き、不向きを考えろ。
>>91 > 異なるコンセプトで設計されてるから、DBを選ぶべきなんだ。
> 前にも書いたがOracleしかしらんベンダは逝ってよし。
> 業務ごとにDBの向き、不向きを考えろ。
なんかズシンときた!
印刷してSヨに見せてもよかですか?
と言ってみるてst
>>92 ありがとう。舌足らずだった。
その通り。
94 :
デフォルトの名無しさん :02/03/21 10:38
SQL Serverには行ロックはあるけど排他+行ロックはないYO! で、どうもMSは排他を捨てて共有ロックにしろって言ってるYO!
ADOとoo4oってどっち使ってまふか
>>85 >いわゆる排他(といわずともなんかしらの方法で同時更新させない)
>ような*動作*をさせるときに行ロックとかを使わない方法ってある?
俺がよくやるのは各行にカウンタを持たせるやり方。
最初は0で更新するたびにインクリメントする。
更新するときにSELECTしたときのカウンタの値とその時点での本当の値を
比べてもし違ってたらエラーにする。
これがちゃんと働くためにはC/S構造をきちんとして、更新を
一箇所だけに制限しないと駄目だからあまり役に立たないかも。
(´д`;;)
98 :
デフォルトの名無しさん :02/03/21 17:22
共有ロック、排他ロック、 悲観的ロック、楽観的ロック、 行ロック、ページロック、テーブルロック を整理した方がいいかも。
>>74 Namazu試してみました。ストアドプロシージャでCSV吐き出してる時に
原因不明のライトエラーを起こして4000ファイル位しか作れませんでしたが、
確かに検索は驚異的に早いですね。ありがとうございます。
問題なのは、やはり検索用ファイルの管理(テーブルに更新かかるたびに
毎回Namazuのインデックスも更新しなければならない等)、あと
あるカタカナの単語が含まれた文章が、その単語の最後の1文字が欠けた文字列で
検索かけてもヒットかった事があるのが厄介ですね。
こういうのは確実に回避する方法はあるのでしょうか?
>>75 全文検索エンジン導入がやはり最善かと思うのですが、まず金銭的な問題がありまして…
(Oracle8iなら無償で導入できるらしいのですが、8なんですよね。)
>KWIC検索みたいのを考えてみなさい。
>インデックス用のテーブルを別に持つ以外手はないだろう。
KWIC検索の実態がよくわからないのですが、興味深いので、もしよろしければ
もう少し詳しく教えて頂けないでしょうか?
ググれ。ばかもの。 中間一致・後方一致検索に強いインデックス作成法だ。 ^^に対して 中間一致・中間・一致・後方一致検索・後方一致・後方・一致検索・一致・検索・強い・インデックス・作成法・作成でそれぞれインデックスを作る。 文中のどこを切って索引にするかは、作り次第。 どっかの国語辞書や専門用語辞典を取り込んで、それを元に索引を作ってもよい。
収束してない話題が多いがどんどん議題提供しる! このスレと直接関係ないかもしれんが おまえらER図作るのにどんなソフト使ってますか? ネームバリューからいくとVisioなのかな〜。 いまだったらUML関係(Rationalとか)使う手もあるな。 ちなみに漏れはExcel + Wordで手書きですがなにか?
>101 うちの会社はまともなリレーションを張っていないのでER図が要りません(w
103 :
デフォルトの名無しさん :02/03/23 14:06
age
104 :
デフォルトの名無しさん :02/03/23 14:19
>>102 ER図から、自動的にテーブルを作れるのは便利だよ。
105 :
デフォルトの名無しさん :02/03/23 14:26
>>104 漏れはテーブルからER図にするのがホスィ
どんなソフトがあるのか見当がつかん(鬱
106 :
デフォルトの名無しさん :02/03/23 14:31
ところでその自動生成って、パーティションの管理も出来るの?
108 :
デフォルトの名無しさん :02/03/23 23:31
>>106 ヤパーリvisioだすか。
会社に買わせよーかなー。
109 :
デフォルトの名無しさん :02/03/23 23:33
>>108 Enterprise Architect買えば、UMLもかけるし一挙両得。
110 :
デフォルトの名無しさん :02/03/23 23:39
>>109 それってVS.NETだすか。
そっちはいらないなー(w
テクニカルエンジニアデータベース受ける人います?
112 :
デフォルトの名無しさん :02/03/24 10:49
>101 ERWin。 ERツールは絵が書けるだけじゃなく、DB管理の基礎なので。 リバース、差分検出できないと使い物にならない。 高いと思うけど、まじ、この手のもの一回使ってごらん。visioでDB作成、管理するなど考えられん。
Visioで満足。
>>112 ERWin俺も使ってるよ。便利だよ。
知ってるやつは、TrialをDownloadして、割れから
尻をGetして、ただで使ってるよ。
その場合会社で使ったらだめだよ!
会社じゃなくてもダメだボケ
>>112 Visioでインポート/エクスポートがついてるところを見ると
ERWinが業界デファクトなのかな。ちょいとしらべてみよ〜。
しかしどこにも価格が書いてないな・・・むぅ
ERWinのレジストに100万単位の金がかかると聞いたけど本当?
>>117 Webに価格載ってないところを見るとそれっぽいなw
導入した人情報ぷりーず
119 :
デフォルトの名無しさん :02/03/24 21:51
ERwin 日揮情報から売ってたが、あんまり高いためか、ER studioというのが安く出た。使ったことないけど大体同じ機能みたい。 ERWinも、単独なら70万ぐらいだったような記憶がある。グループで作業しようとすると、そのサーバみたいなのが500万ぐらいする。 単体でも、テーブル700以上、viewいれたら千数百ぐらいのプロジェクトで何とかいけた。visioでやってみな。
ということは 最初はとりあえずでVisio 満足できなくなった/売上が上がったらERWin でよろしいか? まあ稟議書通りそうなのはVisioだが(w
DBアプリ開発 ノ ウハウハ?
122 :
デフォルトの名無しさん :02/03/28 00:36
ERWin、もしくは似たようなツールを使うのはノウハウの一部よ。 生産性が、50倍は上がったと思う(エクセルのDB定義書と、手書きの絵のときと比べて)。
123 :
デフォルトの名無しさん :02/03/28 00:43
>>122 だね〜。
この辺は実際やってる人からしか情報もらえないし。
本とかにも具体的な作業の仕方なんか載ってないもんな〜。
で、DBマガジンってどうよ?
>>122 どっかの広告みたいなセリフ♥
生産性が50倍に上がった作業が、全作業に占める割合こそ、問題だと思われ
125 :
デフォルトの名無しさん :02/03/28 01:17
>>124 自動化出来る作業が自動化されたからこそ、自動化できない、最も
重要で開発者の経験と技術が必要な部分での無能さがあらわになった
だけの場合が多いと思うぞ。
要するに、今までは成果の完成にあまり影響のない、技術の要らない
単純作業ばかりをこなして仕事してる気になってたアホが、あぶれる
わけだ。
それは良いことだ
って事はないだろ
129 :
デフォルトの名無しさん :02/03/28 03:54
DBと連携したWebアプリ作るなら、WebObjectsがおそらく最も効率いいよ。 開発者はSQL書く必要無し、DBのテーブル構造をぶっこぬいてJavaのオブジェクトにマッピングできるわ、 WebのインターフェースとDB側データの接続は、ツール上のドラッグ&ドロップでできちまうわ、 負荷分散やある程度の障害対応、DBロックなんかはフレームワークがやってくれるし、 そもそも、一般的に開発者がコーディングしてるDBとロジック間のやりとりなんかは、 用意されてるメソッド使えばいいだけというお手軽さ。 ロジックにSQLは入らないし、もちろんユーザーインタフェースにSQLもロジックも入らない。 クソ製品だらけのアップル社製とは思えない(笑) 開発はWindowsでもできるし、運用はJava2環境があればOK。 ただし、JavaやRDB、Web一般なんかの知識に加えて、OOPが理解できてないとかなりツライ。
129って何かスレの趣旨と違う気がするのは漏れの気のせいか? つかJava以外の言語も混在したら逆にロック管理とかどうする んだ?その辺はEJBも一緒だが。前はWebだが後ろでVBとか使って メンテとかしているシステムって結構あるよな?な?な?(泣
>>130 泣くな、そういうのは結構ある。
(オレの周りだけかもしれんが)
漏れもWOは知ってる。 最初からアレで開発すると、今までやってた仕事はいったい何だったんだ? っつーくれぇ天国をみることが出来る・・・マジで・・・ 日々PerlでシコシコSQL埋め込んでると、本当に鬱になってくるよ・・・ 今、1週間くらいかかってる作業、WOでやると1日か数時間で済んじゃうよ・・・(号泣)
>>130 まあDB関係全般のノウハウってことで
で、話聞くとWebObjectすごそーだな。
Appleなんか眼中になかったが(w)これってどんなソフトなんだろ?
MacromediaのUltraDeveloperみたいなやつなのかな?
134 :
デフォルトの名無しさん :02/03/28 18:07
この手のツールが実際投げてるSQL見たら気絶しそうだな…
>134 確かに効率悪いSQL吐く場合も多いが、書式やクセが統一されているだけまだマシさ。 アホPGが書いたSQLなんてそりゃぁもう...
136 :
デフォルトの名無しさん :02/03/28 18:44
>>135 それそれ、よくSQLは書く人で全然効率が違うって言うけど具体的に
どんなSQLだとクソなのか分からない。
何かいい例きぼん。
137 :
デフォルトの名無しさん :02/03/28 21:26
WebObjectsって確か、これで作ったソフトウェアが、スミソニアン博物館に永久保存されてるらしい。 日本のソフトウェアでスミソニアン入りしてるのは、これ(WO自身じゃないよ)と、セガのバーチャファイターだけだそうな。 (どういう基準なんだか・・・) で、この殿堂入りしてるソフトはたしか、NTTの社内ベンチャー1号の社長が指揮して作ってる。 この社長自身は、光ファイバの構造を発明した工学博士。 俺もひょんなことからデモ見たことあるんだけど、アプリ自体がオブジェクトになってそれが集合して またアプリを作り、それがまたオブジェクトになって・・・という、まるでコンポーネントのフラクタル図形か マンデルブロ曲線かみたいな、ものすごい展開に、気絶しそうになった。 俺たちがシコシコ数ヶ月かけて作るような、でもクソ品質の電子カルテなんかが、わずか数分で できあがってしまう様は、すでに奇跡の領域。会場は一種、宗教のような雰囲気に(w UltraDeveloperとは、比較にならんだろ。元々、DBハンドリング周りのフレームワークは 10年以上前からあるし。旧ネ糞ト製品。 ただ、WebObjects自体は習得が非常に難しいそうだ。 最近J2EEに対応したらしいが、そんなものを使ってる開発者はほとんどいないらしい。
138 :
デフォルトの名無しさん :02/03/28 21:41
>>136 たとえば
テーブル名TBL
キーA,B,C
として
select *
from TBL
where C = 'c'
and B = 'b'
and A = 1
とか
select *
from TBL
where str(A) = '1'
とか
ひっくり返せばなくせるようなnotを多用とか(ドモルガンの定理)
Select文だけならともかく他DMLも絡んでくるとひどいもんさ。
139 :
デフォルトの名無しさん :02/03/28 21:48
>>137 それのサイトとかありませんか?
その神がかったソフトウェアの。
>>139 http://www.cyberlab.co.jp/ ここでしょう。サイバーラボ。製品のサイバーフレームワークが博物館入りしてるのかどうかは知らないけど。
ここのK社長ってのが、
>>137 の言ってる工学博士号持ってる人のはず。
たまーに、アップルのセミナーとかでプレゼンやってますよ。
ぜんぜん偉ぶらない、気さくな人でした。
前に見に行ったセミナーで、このK社長の印象的な発言があったんですけど、
「私はアップルやマックが好きでWebObjectを使ってる訳じゃない。様々な開発ツールを評価したが、
これしか目的を達成できそうなものは無かった。真のオブジェクト指向の開発環境を、きれいに
ユーザーに提供してくれるのは、現在はWebObjectだけだ。もちろんこれを凌ぐツールがあれば
すぐにでも乗り換えるだろうが、残念ながらまだ存在しない」
ってなことをおっしゃってました。そのときは、Win2Kの入ったパナソニックのレッツノートに、
WebObjectsとサイベース入れてデモやってましたよ。
141 :
デフォルトの名無しさん :02/03/28 23:03
VC++でoo4oつかってるんだけど ODatabase.ExecuteSQLメソッドで処理した件数って調べることはできませんか?
144 :
デフォルトの名無しさん :02/03/28 23:52
>>138 あんまりいい例じゃーないね。
それじゃー136にはいってることがサーパり??だよ。
てゆうかワシにもわからん?
なにがわるいの?
スピードがおそいわけ?
コードの見た目?
>>138 さぱーり。
インデックス順に評価した方が速いって事?
わざわざ文字列変換かけてるって事?
うーん、その辺の話だとDBMSに依存するんじゃないのかな…
解説きぼん。
>>143 それはダメなDB操作の例であってダメなSQLとは違うと思われ。
>>145 複合キーがうまく適用できない書き方のことを言いたかったんじゃないかと推測。
障害や不具合やうまくないコードについて、明確な説明ができないやつは
どこいってもダメなんだよなあ。
そのDBと心中する気があるならいいけど、 そんな気になれないから146のいうようなオタクにはなりたくないなあ。
>>136 インデックスとか知ってりゃ
わかってんじゃん。
実は知っててきいてる?
>DBMSに依存するんじゃないのかな…
DBMSの特性にあわせたないといいSQLはかけない
とおもったりする。
>それはダメなDB操作の例であってダメなSQLとは違うと思われ。
SQL(DML)はDB操作をするための言語です。
まそれはおいといて、この場合たしかに、
VBも一応OK。SQLも一応OKです。ただその組み合わせかたが最悪ってパタンでしょう。
150 :
デフォルトの名無しさん :02/03/29 10:37
>123 DBマガジンは結構読んでる。特集がたまに面白いし、便利と思う。 ただ、連載は個人的に役に立ってない。そーいや、最近ERWinの 特集だったね。 >124 50倍というのは、感覚値で、測定してないからその意味では申し訳ないな。 ただ、この工程と言うのはDBの設計部分で、ここでのエラーは後で大変 コスト高 & 品質低下になるからね。俺の場合、できれば顧客を教育して ERを読めるようにして(これは結構簡単にできるからね)、これで議論する 用にしてる。このとき、ツールのある無しは決定的。 その後、即効でDBできるし。開発上でDB変更したらすぐモデルも変更して 配布、議論できるし。工程が全体に占める割合もくそもないと思うが。 全体として、有効。もっともDOAで開発してるからだけど。 で、顧客にER教えた感想だが、ER書くのは、文系の仕事というか、顧客の ほうが適任ね。ようは技術じゃなく、実現したいシステムを現してんだから。 そういう意味では、可能な場合は、顧客とERで議論するのは重要なノウハウと思う。
151 :
デフォルトの名無しさん :02/03/29 15:43
ORA-12571 ってエラーに苦しんでる。 いろいろ調べてみてるが、さぱーり・・・・・ ここに相談ってよし?(オラクルマスター他界から)
>>145 テーブルTBLに1000万レコードあるとして
項目Aは 2通りの値を持ち
項目Bは100万通りの値を持つとき
(値はほぼ均等に分布しているとする)
select * from TBL where A=1 and B=1
と
select * from TBL where B=1 and A=1
では効率が全然ちがうでしょ
>>153 自己レス
複数のテーブルを組み合わせるともっと極端になるね
155 :
デフォルトの名無しさん :02/03/29 15:58
>>153 それぐらいならオプティマイザで勝手にしてくれない?
>>155 そっか・・・最近のはそうみたいだね
実装によっても違うし、一概にはなかなか難しいかな〜
そんな高度な奴じゃなくて、Like条件を無意味にORで繋いでたり それを更にANDで括ってたりする奴もいた。
158 :
デフォルトの名無しさん :02/03/29 16:20
>>152 サンクス
逝ってきた。(というより、すでに逝っていた)
tp://www.blue.gr.jp/~munetika/mllog/o4l/msg00733.html 等
RECORDS_TOTAL < 65535
のばあい
control_file_record_keep_time=0
とせよとあるので複数のRedhat6.2のノードで対処済みだが、
65535の約半分の回数のインサートでクエリが止まり、しばらくすると
ORA12571が・・・
今試したが何の対策もしていないSolaris8では32000は上回る
と思われ。
うーん、数字だけ見てると単に自分がドキュソか。
スマソ。もっとよく逝ってくる。
159 :
デフォルトの名無しさん :02/03/29 16:45
>>156 おいらもしっかりWHARE句の最適化はやってるよ。
確かにオプティマイザが勝手にやってくれるDBが多いけど。
基本的に良い習慣だと思っている。
Cのif文は発生する確率が高い方からチェックするようにすれば高速化できるしね。
そういう地道な努力は高速化する上での重要な要素の1つとだと思う。
普段から注意していないと、なかなか身に付かないしね。
>>136 では解説
RDBじゃインデックスを使うかどうかパフォーマンスに大きな影響が出るわけよ。
単純で簡単なことだけど、一番大事なことなわけ。
インデックスの基本理論からするとDBMSに依存する部分は少ないよ。
複合インデックスは順番に評価する
インデックス列に関数は使わない。
これは大原則です。
結合が多くなっても同じことが言えるわけで
分からないということはおそらくアクセスパスの解析をしたことが無いってことだろう。
まあ確かに端折りすぎた。
もっといい例きぼん。
>>159 良い習慣だと思う。
データ量やインデックスの種類も重要だと思われ。 データ量が少ないと主キーは別としても最近のRDBエンジンは インデックスなんて使わないでしょ。 2値の列にハッシュインデックス貼ったりするのも激しく無意味だし。 やぱり最終的なチューニングは各DBのアクセスパス解析ツールを 使わないと、そのエンジンによっぽど精通してないと 人間の判断なんてあてにならないような気がするぞ。
162 :
デフォルトの名無しさん :02/03/29 21:00
>>161 最終的にはそらそーだ。
ただDBMS依存の最終的なチューニングによる効率UPよりも
非依存の基本的なチューニングの効率UPのほうがでかいって話では?
>2値の列にハッシュインデックス貼ったりするのも
これだって非依存だろ?
なるほど、そうだーね。基本がひどいとまずいやね。そりゃ。 基本を押さえた上で、DBMS依存のチューニングをかけると。 ただ、インデックスのチューニングって結構むずかしいと個人的には思ってるのよ。 運用中に頻繁に更新があるならたくさんつくりゃいいってもんでもないし。 いろんな検索パターンがあるシステムだと、多数決とゆうか、重要度とか 人間的な判断で決めちゃったりして。>みんなはどーよ。 個人的に欲悩むのはJOINしたテーブル同士の検索条件は、 Where節で指定するか、JOINのONで指定するのがいいかって事かなー。 アクセスパス見るとまったく変わらなかったりするのだけれど。。。
WO使ってみた。 SQL書く必要なかった。 (バックエンドで発行されてるSQLは見られる。) 1つのオブジェクトに、別々の鯖で動いてる別製品のRDBのテーブルをマップできるらしい。 なんか鬱。
>>164 ふーん。すごそーだな。
これも会社に買わせようか・・・・
つかこのスレのせいで稟議書がふえてるな(w
Visioといい、ERWinといい、WebObjectといい・・・
>個人的に欲悩むのはJOINしたテーブル同士の検索条件は、 Where節で指定するか、JOINのONで指定するのがいいかって事かなー。 実際には同じ実行プランに落ちるはずなので、好みでいいんじゃない。 ノウハウというのもなんだけど、ある程度複雑なSQLを使うときは実行プランは 確認しようね。とんでもないプランで実行しているときがあるから。
SQLはDBやバージョンごとにチューニングのポイントがあるから それを調べておけ。 で、まともなDBならインデックスが期待したとおりに使用されるかどうかの 実行プランがみれるから、それを使え。 オプティマイザにも色々種類や特性があって、少し柔軟にインデックスを 見に行ってくれるものや、明示的に統計情報を取得・更新しないと まともな最適化をしてくれないものとかある。 SQLレベル以外にも、DBへのコネクション方法やテーブルレイアウトの設計、 インデックスの分散や隣接配置、テーブルスペースの配置、 ディスク装置の選択やRAIDの選択、使用メモリのチューニング、 ログの分散、管理、バックアップ・レプリケーション、 見るべきところはたくさんある。 一個だけつまんで見せて、「コレひどいよね」といっても、 木を見て森を見ず、の場合だって有るのだ。
168 :
デフォルトの名無しさん :02/03/30 10:59
私はオプティマイザは使わないほう(以下Oracleの話ね)。 タコSQLの被害低減ぐらいと思っている。 何より困るのは、開発、評価、実機で動作が変わるから。 また、アナライズもかけないで、オプティマイザを使っています という、タコプロジェクトも見たことあるが、実データがない場合は 評価困難だしね。 個人的には重そうなsqlはかいたらすぐプランとって見るし、 少なくともチューンするときはヒントで、プランを 固定するようにしている。 Oracleもルールはなくして、コストベースにだけしますと とずーと昔から言っているが、ずーとできそうになさそう。 ただ、コストベースでないと使えない機能があるので、 DB自体はコストベースにして、ヒント等で固定化してる。 知り合いのプロジェクトでは、外注に納品物件にプランの 提出を義務づけ、とりあえず(full)をチェックしてるみたい。 動的SQLはどーすんだと突っ込まれると思うが、量的には少ないし、 完全に読めないことはないので、インデックスあてといて、あとは テスト、運用で発見個別対応になるね。なにより、できるやつに その仕事をふること。 ただ、一度50人ぐらいのプロジェクトでは、動的SQLを作成する ルーチンを書いて、表名、フィールド、条件とうの入力と、検索結果 をテーブル渡しにして、動的SQLの発行を一箇所でコントロールしたこと もある。実際に発行されるSQLをログって監査する必要があったこともだが、 タコに動的SQL書かせて、後でデバッグ、チューンする恐怖より、 このルーチン作るほうを選んだ。
あのさぁ、外部参照制約とかデフォルト制約って使ってる? うちの会社なんでか使ってないんだよね。 テーブル設計書とかにはちゃんと初期値 = 0 とか、初期値 = システム日付 とか 書いてあるのに、デフォルト制約にしないで、入力プログラム(VB)で 発行するInsert文やUpdate文で明示的に 0 とかシステム日付セットしてる。 0とかの固定値はともかく、システム日付をVBで算出するとクライアントの 時計を使ってしまうので、困ると思うんだが…。 外部参照制約に関してもまったく設定してないんだよ。 仕様書には「商品マスタに該当レコードがあるかチェックする」とか書いてある。 外部参照制約作っといて、例外補足すればいいんじゃないの? 他の会社でもこんなもんなのか?
DBアプリ作るのに、SQL最適化なんて本質の話しじゃないね できればSQLなんて書かずに、ビジネスロジックの作り込みに専念すべきだ そんな部分にパワーかけてどうする
171 :
デフォルトの名無しさん :02/03/30 12:30
>>170 性能で客から怒られたことのない素人が紛れ込んだ模様。
>>171 SQL作成とインデックスの追加申請くらいしかやらせてもらえない
駆け出しが紛れ込んだ模様。
>>171 なんだ、新卒ブビ厨?
SQLごときでパフォーマンスでないような作り方してんのか。まさにドキュソだね。
俺もWO使ってるけど、SQLなんか一度も書いたこと無いし、客から怒られたこともない。
元々金融系から始まって10年くれぇの実績のあるフレームワークと、
たいしたスキルも無い厨房が書くゴリゴリのSQLと、客はどちらを信用するのかねぇ(w
174 :
デフォルトの名無しさん :02/03/30 13:00
SQL作成に血道をあげるのはいいんだけど、ちゃんとロッキングとかやってないSQL厨って けっこう多いんだよね・・・
一部のDB屋って特定DBのチューニングテクニックを知ってるだけで 鼻高々としてるから可笑しいよね。運用上は必要だけど、DQN仕事だな。 俺はやりたくない。 DBを、単なるデータストアでなく、ソフトウェアコンポーネントの一つとして 見て欲しいんだがなあ。どうもデータが出たり入ったりするのを見て エクスタシー感じてる連中が多いみたいだね、ここには。
176 :
デフォルトの名無しさん :02/03/30 13:01
そりゃ、出たり入ったり入れたり出したりってのは、気持ちがいいからなぁ(w
177 :
デフォルトの名無しさん :02/03/30 13:03
イン・アウトがキモチイイ(・∀・)のは世界共通語だYO!
とりあえず、今のところWebObjectsが最高なのはゆるぎない事実だ。
179 :
デフォルトの名無しさん :02/03/30 13:16
>169 同意。 外部参照制約のデメリットは、更新時のパフォーマンスなんだが、データが腐ることよりはずっとましと思う。 昔、あるシステムの改造をいらいされて、DBリバースしてみたところ、ただの表のあつまり。エクセルじゃないんだからってなかんじ。 案の定、データ腐りまくりで、開発より、データクリーング、移行のほうがはるかにコスト高。 ってことで、その案件はつぶれた。 デフォルト値は、場合によりけりだね。 追加開発で、新しいnotnullの属性を追加するときとかに、仕方なくデフォルト 入れることはあり。
180 :
デフォルトの名無しさん :02/03/30 13:20
>173 金融やってたってひとで、自信あるやつ多いんだけどさ。 コンサルでは使いk物にならないこと多し。 金融の場合は、目的が明確なこともあると思うが、まったく 別種のビジネスでのコンサルに入ると分析能力無し。 技術てきにも、そのすばらしいフレームワークとやらのおかげで、 自分で一から構築したことがないんでまるで、提案できない。
181 :
デフォルトの名無しさん :02/03/30 13:21
>>178 でも、あまりWebObjectsは広まって欲しくない・・・
誰にも使わせたくないっていう感じ(藁
わかるだろ?この感覚。
>>180 日本語もまともに理解できないアフォドキュソですな(w
金融系やってた人間そのものの話しなんかだれがしてるんだよ。
WOの実績の例を出しただけだろ。
使い物にならないコンサルを、カバーするだけの力量がフレームワークにあるってことだ。
SQL以前に、小学校から国語をやりなおしてこい。
そもそも、一から構築したことのないヤツに、WOを使わせても無駄。
自前で実装した苦労や、他のツールで地獄を見た経験を持ったヤツだけが、その価値を理解できる。
>>181 広く使われるとボロが出るからな。
悪い評判が立つと客が嫌がるし。
>>183 うんそうだね。だから、君には必要なんだろう。
いつまでもSQLの作り込みに勤しんでくれたまえ。
自分で何もかも把握できた方が、効率よく作ることより重要だからな。
失敬、 >だから、君には必要なんだろう。 は、 >だから、君には必要無いだろう。 に訂正。
>>181 うん。すごくわかる。
でも、広まってくれないとWebの案件をWebObjectsで提案しても蹴られる可能性あり。
187 :
デフォルトの名無しさん :02/03/30 14:03
>自分で何もかも把握できた方が、効率よく作ることより重要だからな。 これが相反関係にあると言いたいのか? すげーな。
>>183 まあ181はマカー根性丸出しってことで
sagesage
マックは触ったことないですけど WebObjectsはWindows2000で開発してソラリスで運用するんだよ
>>187 つくづく厨房だな(w
お前、PGでもコーダーの部類だろ。
184は効率という言葉を使いたかっただけだろうね。
>>187 トレードオフという言葉を覚えましょう。
俺もそれらがトレードオフになるとは思わないけど(w
192 :
デフォルトの名無しさん :02/03/30 15:25
せっかくの良スレがぁ...
良スレだったのか
いや、最初から糞スレだったような… 結局 【自慢話を語るスレでした】 って事だな
196 :
デフォルトの名無しさん :02/03/30 21:09
グチってても仕方ないから次いきましょう。 DBアプリを納品してからも仕様の変更・追加ってあるよね。 テーブル設計が変わっちゃったりした場合とか、被害を最小限にしたいよね。 そのためにやってることってある? WebObjects、.NETなど、オブジェクトに自動マッピングされる環境では 仕様変更ってどうなるの?
197 :
デフォルトの名無しさん :02/03/31 00:25
WebObjectsでは、仕様変更も他に比べて柔軟に対応できるよ。 DBが絡んだWebアプリでも、表示項目とUIが同時に変更になったとしても、 開発ツール上でデザイン変更できるし、DBとの接続もドラッグ&ドロップでほとんど完了。 他のJavaベースのツールみたいに、泣きながらゴリゴリ再コーディングっていう手間はあまり発生しないなぁ。 もちろん、純粋なビジネスロジックのコーディングし直しってのもあるけど、 かなりの部分がフレームワークが提供するメソッド利用するだけで目的が達せられるから 開発者としては、とても楽。 .NETって、どうなんだろうね?
>>196 ありきたりだけど…
(1) Select項目は明示して * を使わない
(2) Insert項目も明示的に指定する
こうしておくと、仕様変更でテーブルにフィールドが追加されても
その追加フィールドにデフォルト制約を付けておけば、
既存のプログラム(参照、更新ともに)結構動くよ。
199 :
デフォルトの名無しさん :02/03/31 01:19
SQL意識してる時点で、使う側に立った開発よりも開発者よがりの開発になるな。
200 :
デフォルトの名無しさん :02/03/31 01:29
>>199 ユーザーが使いやすいシステムを構築する上で
ストレスを感じさせないだけのパフォーマンスは必要
SQL云々もその一環だから使う側に立っていないとはいえないと思うよ
おっと、200ゲトー
201 :
デフォルトの名無しさん :02/03/31 03:10
>>199 確かにその観点はある意味間違っていない。
だが客にとっては、
SQLを直接書こうが書くまいが、WebObjectsだろうが、Javaだろうが.NETだろうが、
結果を出せるかと、最後まで責任をとれるか、が重要だと思う。
だいたいこの世界、欧米も含めてまだぜんぜんWebObjects一色ってわけじゃないでしょ?
WebObjectsがまだ知られていないというわけでもないだろうし。
欧米のメーリングリストなんかでもまだまだSQLネタって多いしね。
そこが現実ラインでしょ?
>>200 概ね同意だけど、ストレスを感じさせないだけのパフォーマンスを出せる実装を
できるだけのスキルのあるやつって、現場レベルでも最近少いような気がする。
パフォチューなんて思想無し。た〜だSQL書いてますみたいなやつ。
派遣や外注でやってくるヤツラで、「おお!こいつやるな!」みたいな人間にここ数年出会ってない。
なんていってるおれも、最近WebObjects始めた。
WinXPで開発、Linuxで運用。
なんつーか、目から鱗。
DB使うWebアプリが、ここまで効率化できるとは思ってなかったよ。
パフォーマンスも問題なし。
しかし、こんなツールが何故広まってないんだろうか。
アップル製だからかな?
Webオーサリングツールと勘違いされてるとかね(ワラ
WebObjectsが流行らないのは、元請が売ってるツールを使わされるからでしょ WebObjectsは7万円だけど、他のツールは何百万ってするもんね。 そりゃ、高く売れるほうがいいよね。
204 :
デフォルトの名無しさん :02/03/31 13:26
>>199 バカじゃないの?
実装も意識して、かつユーザビリティも意識した開発するのが当たり前だろ。
それともお前の所ではそれがトレードオフになるのか?
>>1 も
・見やすい帳票レイアウトって? 入力しやすい画面遷移って?
とスレの裾野が広がるような議題を持ってきているのにも関わらず、それを無視して
開発者よがりな話に持っていこうとしてるのはお前の方だろう。
>>204 同意。SQLしか意識していない技術オタは糞だが、
SQLを意識している技術者が、UIなどをないがしろにしているとは言えないからな。
>>205 はもう一回読み直してみ?
「チューニング」や「正規化」が変にもてはやされたからね。 とりあえず動くモノを作って次にチューニング、なんてのはSQL屋失格だし、 「正規化」とやらも初心者向けというか暗記型向けというか、 最適設計にはならない。
209 :
デフォルトの名無しさん :02/03/31 15:31
>> 207 > 「チューニング」や「正規化」が変にもてはやされた それが全てだとは言わないけど、それよりも大事なものって何なの? 一見するときれいな画面設計? 一見親切な操作方法? 画面設計や操作方法を考えるのももちろん大切だけど、 それよりも「システム」がしっかりしているが大事で、 しっかりした良いシステムを作るためには「正規化」が 大切だというのがいわば常識。 良いシステムを作るために「正規化」が 万能ではないという話ならばわかるけど、 207は良いシステムをつくるということを 考えていないように感じられる。システムが ちゃんとしていないならば、本当の意味で ユーザーにとって使いやすいアプリであるはずは ない。
最初に設計ありき。 チューニングなんぞ「敵が城を囲んでから対応策を考えるようなもの」 正規化は「モノを考えられないアフォを訓練してあるレベルにまで持ってくる」 為の手法であって、マトモな設計者がやる事ではない。
> 最初に設計ありき。 全面的に同意。 > チューニングなんぞ「敵が城を囲んでから対応策を考えるようなもの」 確かに設計の段階でパフォーマンスも充分に意識すべき。 ただし神ならぬ人の身には、思いもかけず敵に城を囲まれる こともあるし、その際には対応策を考えざるを得ない。 > 正規化は「モノを考えられないアフォを訓練してある > レベルにまで持ってくる」為の手法であって、 > マトモな設計者がやる事ではない。 正規化よりまともな方法がわかるというのであれば、 設計者にしておくのはもったいない。世界的な研究者に なれるんじゃないかな。現在のDB設計上、もっとも マシな指針が正規化。それをまったく使わないのは 世界的研究者レベルの大天才か、ろくでもない設計者の いずれかと思われる。
>>211 いや、正規化なんて誰に教えられるわけでもなく身に付くはずって事だろ。
手法と言うよりは理屈の話だしね。
それをわざわざ教えなければならないってのが
>「モノを考えられないアフォを訓練してあるレベルにまで持ってくる」
って意味じゃないの?
つーか、スレの方向と著しく違うのでこれで終了にするか、どこかよそでやってくれ。
213 :
デフォルトの名無しさん :02/03/31 17:28
正規化をきちんとやると、更新系と参照系を同時にやるようなシステム では速度が出ない。理屈からして当たり前。 普通プログラムの応答速度を上げる為にキャッシュとなるバッファを取る のと同様に、DB内部に冗長な部分をどのように作るかが、RDBMS技術者と しての本領になると思う。
214 :
デフォルトの名無しさん :02/03/31 17:34
>>213 例を挙げて冗長にした方がいい場合を説明しないとただの独り善がりだぞ。
技術者の本領だの禅問答じみた話はいいからノウハウを語れ。
>>214 俺の言いたいこと言ってくれてありがとう。
途中から飲み屋のオヤジ会話になってる。
216 :
デフォルトの名無しさん :02/03/31 20:30
要は、レスポンスとDBの負荷が最小になるモデルを作って、そのモデルに 合うようにテーブル設計すれば良いだけ。 こっちの方が正道の設計。 「正規化」はDBの構造を知らない素人でも70点のモノが作れるようにする 為の手法であって、正道ではない。 うんと単純化したケースで言えば、 冗長の方がアクセス回数が1回で済む場合は冗長にした方が良い。
217 :
デフォルトの名無しさん :02/03/31 21:59
結合演算を伴うクエリーが頻繁に行われる時に、正規化されたテーブル 群に毎回結合演算を要求するのは無駄なことがあるでしょ。 例えば、そういうときにビュー作ったり、ビューでは都合が悪い時に クエリーが高速に行えるような単純なテーブルを別に作っておいて、 更新をトリガーにしてそこに結合演算の結果を別途書き込んでおく、 なんていうのも、よくやるでしょ。
>>217 よくわからないんですが、それって正規化された設計を
基本として、ビューとか高速化用のテーブルとかを追加
するという「チューニング」をやってるわけですよね。
それともそういうのはチューニングじゃないのかなあ。
>>218 そういうのを前もって設計段階で考慮しておくってことじゃないの?
後で、「遅いからチューニングしよう」とかじゃなくて。
220 :
デフォルトの名無しさん :02/03/31 23:02
「チューニング」で出来るのは一部の手直しでしょ。 全体の設計を変えないまま、糞設計をいくら手直ししても無駄。 性能出す為には全体設計ってのが一番効く。
>>220 禿同。
正規化云々ってのも、すごく理解はできるし、そこにパワーをガッツリと割けるだけのリソースがあればいいけど、
そんな恵まれた環境やDB屋がいる現場って、そうそう無い。
それに、もう今は現実として、実装のスピードとパフォーマンスが、従来の開発手法だと
釣り合わなくなってきてるしね。
パフォーマンスの悪さに悩まされ、設計やSQLレベルのチューニングが行き着いたときに、 さらにそこから性能改善ができるかどうかが真のチューニング技術だと思うんだ。 基幹システムを莫大な額を投入して、運用を開始して、 業務規模が拡大するに伴って当初予定した業務量を逸脱するようになってくると 思わぬボトルネックがでてきて性能ががくんと落ちることがある。 そういう部分を予測、検出して、なるべく少ないコストで改善するって、大変なことだよ。 web objectsって、その辺、どうなんだろうね。 厨だからよくしらんわ。
223 :
デフォルトの名無しさん :02/03/31 23:24
WOにも欠点は多数あるけど・・・それを補ってお釣りが来ると思われ。 とりあえず、DBゴリゴリの更新系アプリ作っても、パフォーマンス的にはほとんど問題ないと 言い切っていいと思う。 WO自身は、リリースが95年あたり。他のどんなアプリ鯖よりも老舗といえるかな。 みんなDBアクセスする部分とビジネスロジック、UIとの接続などの部分のほとんどを コーディングしてると思うけど、WOだといわゆる「当たり前」に実装してる部分、ほとんどを フレームワークが提供してくれてるんで、効率いい。 WOの設計思想自体が、もはや開発者がゴリゴリSQL書くようなものを想定してない気がする。 アプ鯖が負荷上がってきてアップアップになったら、物理的な鯖と運用パッケージを買い足して、 作ったアプリにゃ手を加えずに運用ツール側で負荷分散先をしてやるだけ。 ともあれ、最近はSQL意識するような開発してないからなぁ、考え方ズレてるかも。。。
224 :
Disca ◆NAfP6znE :02/04/01 00:49
少し質問ですが、SQLなどで提供されているのデータベースは、 速度的に速いのでしょうか…。それとも、独自で探索木などを作ったほうが 高速になるのでしょうか…。 一応、データソース(リスト)が百万件あったと仮定します。
単一のプロセスでしか読み書きしないなら、 自前で書いた方が速くなる可能性は高い。 が、原子性の保証やバックアップ・リカバリの方法、 アクセス方法の標準化、ネットワーク対応、負荷分散、 複雑なクエリーやリレーションの解決など考えると DBを使った方がお得だ。 ISAMの利用も検討してみるといい。 自分で作るより、おそらくそっちの方が早いし速い。
226 :
デフォルトの名無しさん :02/04/01 01:02
ISAMって何? アゴ?
>>225 >>226 >>227 レスありがとうございます。只今考えているのがマルチスレッドでの検索サーバなのですが、
(複数のスレッドで同時データファイル読み込み可能、書きこみは一スレッドのみ^^)
ISAM、始めて知りました。(無知にも気付かされました)
これって、NAMAZUのようなもの(インデックスサーチ)でしょうか…。
OPEN系でよく使われるのISAMがMySQLとかだね。 RDBじゃないけどSQL文が使える。 マルチスレッドにも対応、そこそこ速い。 NAMAZUは検索エンジン。 ISAM/RDBはDBのアクセス法に対する設計の違い。
230 :
デフォルトの名無しさん :02/04/01 02:46
全体設計でよく出会うケース。 1)本当に分散が必要か? 実は1台で間に合うものを、分散したが為に6台も必要になってしまったとか。 2)意味の有る分散か? サーバーの負荷分散のための分散のはずが、情報まで分散してしまって、 それを再構成するのに分散した以上の負荷が生じているケース。 3)狂ったか?集中処理。 意味の無い分散を繰り返した後、「管理が楽だから」と一部機能を集中処理 してしまう。(そして破綻へ) もうね、アフォか馬鹿かと・・・。
231 :
デフォルトの名無しさん :02/04/01 02:51
>>230 DBに限ったことじゃないね。システムのプロセスも、技術者の
オナニーで無駄に分散するのが流行ってる昨今。
>>231 今の流行なんだろうね。
Servletで十分なのをEJB使ってみたりとか。
おまえEJB使いたいだけちゃうんかと小一時間(以下略
同じようなことがOracleにもいえるがなー
>>230 分散をOracleにしても似たような感じ
233 :
デフォルトの名無しさん :02/04/01 13:31
>>232 >Servletで十分なのをEJB使ってみたりとか。
>おまえEJB使いたいだけちゃうんかと小一時間(以下略
JDBCで十分、つー表現が適切かと(w
揚げ足取りスマソ
234はオナニ勢力ですな
クライアントの話題ですが、.Netみたいにサーバカーソルを 忘れさすフレームワークってどうなんでしょうか? 個人的には大容量のデータ処理には向かないし、 クライアントキャッシュされたデータは 業務的にロックしないといけないし、 なーんかしっくりこないんですけども。
237 :
デフォルトの名無しさん :02/04/01 21:00
さすがMS。そんな危険な機能搭載とはね・・・。 .NETは厨が集まる事わかってんのかいな?
238 :
デフォルトの名無しさん :02/04/01 22:08
DBとはカンケーないんだけどさ、MSのUNIX捨てろキャンペーンが提供されてるサーバって FreeBSDだったってな。 禿シクワラタ
>>236 新しい考え方が受け入れられないとCOBOLERみたくなっちゃうよ
ADO.NETはすばらしい
240 :
デフォルトの名無しさん :02/04/02 11:49
>>229 あ、あのー…
SQLが使えるのにRDBじゃないんでしょうか。いやマジレス希望。
実務では過去1年のデータがあれば十分なのに、 5〜6年分(日次単位)持っている会社があるんですが、 やっぱりこれってテーブルを分割したほうが良いんですよね? 「全部一度に見たい」っていうんでビューにしる! って言ったんですが 理由もなく却下されました。こんな企業はDQNですか? 辞めどき?
242 :
デフォルトの名無しさん :02/04/02 13:00
>>241 俺は同じ意味を持つデータは一つのテーブルにおいておくのが好み。
パフォーマンスに影響がでるならしょうがないけどさ。
そんな俺はDQNなんだろうか。
365(日)x5-6(年)x社員数でパフォーマンスに影響する会社って 1000人以上くらいですか?
245 :
デフォルトの名無しさん :02/04/02 14:16
>241 パフォーマンス、ディスク容量、バックアップ等の管理考えて問題 なければいいんじゃない。 oracleなら別表にしないで、パーティションにするけど。 オプションは高いが。
246 :
デフォルトの名無しさん :02/04/02 14:27
>>243 なんで社員数かけてんの?
勤怠かなんかのトランザクションなのか?
社員数少なくても業務によっては膨大なトランザクションデータを
日々発生させているんだよ。Web受注システムとかな。
247 :
デフォルトの名無しさん :02/04/02 14:28
ちょっと前の、設計か、チューンかの話しなんだけどさ。 設計が重要で、影響でかいのは決まってるけど、実際はチューンも必要に決まってるジャン。 多人数でやってりゃタコもいるしミスもあるし、遅くてもとりあえず動かす必要 があれば動かして、稼動後にチューンだよな。でなきゃ会社つぶれるしね。 設計よかったとしても、だいたい、ウォーターフォール開発の時代じゃ無し、設計要件が固定のまま のはず無いし、いくらデータモデルが安定っていっても追加、変更はあるしね。 「私の辞書に、やってみなければ分からないという言葉はない」ってマジこのとうり 言ったコンサルもいるけど、結果は...。神様でもなきゃ完全に 見切れるわけない。世の中動いてんだから。 以上、設計いいかげんでいいという話ではない。が、スケジュールにチューン期間 を考えないのも、非現実的。
248 :
デフォルトの名無しさん :02/04/02 14:28
>>241 > 実務では過去1年のデータがあれば十分なのに、
これが本当ならば、5〜6年分持っておくこと自体がムダ。
使いもしないようなデータを後生大事に取っておく会社多いよね。
しかし全部見たいというニーズがある以上、そのデータになんらかの活用方法が
あるわけだから、分割などは避けるべき。
データは人間が使ってこそ意味がある。コンピュータよりの都合であまり不自然な
形にするべきじゃない。
だいたい
>>241 にしたってコッチから見れば
過去5〜6年分のデータを「分割しる!ビューで見れ!」理由もなくって言ってるんですが
こいつはDQNですか? 辞めさせどき?
だぞ。そもそもなんで分割したいんだ?
>>247 なんかもうツッコミ所満載なんで途中までレス書いてたけどヤメタ。
あくまでノウハウを語るスレだし。
もう1度コンサルに教えを請うた方がいい。
>「私の辞書に、やってみなければ分からないという言葉はない」
この意味が分かるようになるまでね。
251 :
デフォルトの名無しさん :02/04/02 14:42
PostgreSQLとPHP初心者です。「リレーションシップ」という ものについて質問があります。 リレーションシップの役割や概念は分かってきたのですが、 自分が、「売上テーブルと売上明細にはリレーションシップを 設定して」と頼まれた時、具体的に何と何をすればいいのか不安です。 具体的な作業として、「リレーションシップを設定する」とは どういう作業をさすのでしょうか?教えてください。 簡単に売上テーブル(売上No)と売上明細テーブルをつくる 作業を仮定させて頂いたとして、 「リレーションシップを設定する」というのは下記の、どちらでしょうか? 1.具体的な命令句ではなく、売上明細テーブルの中に売上No(売上テーブル)を 含めた、段階でリレーションシップが設定された、と判定される(設計段階?)。 2.PostgreSQLのCreate Tableの命令で具体的に参照整合性を 設定をすることが、リレーションシップの設定である。 たぶん、まだ理解が足らないかと思われますので、 上記の例に含まれていない場合、可能なら具体的な作業を 例示してご教授いただけないでしょうか? もし、この本に全部書いてあるよというような 参考書がございましたら、そちらをご紹介頂いても 結構です。よろしくお願い申し上げます。 あと、ここではなく、他で聞け、という場合もご指摘ください。
253 :
デフォルトの名無しさん :02/04/02 14:59
252さん、ありがとうございます。 書き直しました.
>248 うむー。そうですか。辞めさせられどき? 辞めさせられる前に辞めとくか・・・。 あと、PGが設計に口挿むのはマズーなのですかね? (SEはExcelのセルの中身を参照式にするか値にするかって聞いたら「?」が出る程度です。) テーブルの状態はカラムが300くらいあって、完全にパフォーマンスの足を引っ張ってます。 管理するチームがないので、テーブルスペースもほとんど分割せずごった煮状態。 (これらの分割も却下されてる。テーブルスペースの数=HDの数=5) 普段の業務で使用するのは夜間で集計した結果だけで、明細の履歴はほとんど見ない。 (というか、かなり上のほうの人間しか見てはいけないもの。あ、でも参照権の設定はしてなかったような・・・。) 過去からの推移が見たい、というのは解るですが、 集計の履歴はちゃんと持っているし、再計算はほとんどしないのです。 (データが確定した過去データの再計算が頻繁だとそれはそれで問題のような気も。) しかも、集計した履歴は1年しかもってませんし、それ以上は遡って計算できません。 (アプリが対応していないから。) ちなみにDBMSはSybase。 Sybaseにパーティションテーブルかそれに類似するものってあります?
>255 スマソ。あんまり書くとバレそうだったので。 もう開きナオテ書きました。それでもかなり端折って書いてます。 でも、テーブルを分けること自体はあまりオススメできないのですね。
257 :
デフォルトの名無しさん :02/04/02 21:22
>>256 というかテーブル分ける云々以前にやることが山盛りだと思われ
>>240 SQLはデータストアにアクセスするための記述言語で、
RDB専用というわけではない。
>258 オマエか。
>258,260 なんだなんだ? お前等ホモか?
262 :
デフォルトの名無しさん :02/04/03 09:47
240っす
>>259 どもども。そっか。そうなんだ。
…で、俺の定義ではいわゆる選択、射影、結合が
SQL等の操作言語でできれば、それRDBなんじゃん?って思うのです。
MySQL、マニュアル見た限りでは全部できそうなんだけど。
>>254 列が300…正規化、されてます?
263 :
デフォルトの名無しさん :02/04/03 09:56
列数300ね・・・。 確かに設計も何も無さそうだけど、それを年単位に分割するという発想も変。
>263 年単位かどうかは書いてないけど、そうなの? 管理がたいへんじゃん。列数も300だっていうし。
265 :
デフォルトの名無しさん :02/04/04 23:30
そろそろ打ち止めかな。 それじゃまとめとしては、WO最強。ってことで。
>>265 同意。
よって
==========終了==========
267 :
質問させてください :02/04/06 03:04
本職ゲーム系プログラマですが、趣味でTomcatを使ってウェブアプリを書いています。 技術的な興味もあって、データベースを使ってみようと思っています。 PostgreSQLを準備してJDBCでアクセスできる環境は整っています。 簡単なサンプルなどをみると、データベースに直接SQLを書いたり、返ってきたデータ (java.sql.ResultSet)を直接使ったりしていますが、規模が大きくなってくると管理が 困難になりそうな予感が禿げしくします。 理想的にはjava上のインスタンスひとつをデータベース上の1行に対応させて、インスタンスを 操作するとその内容がデータベースにも反映されるような仕組みがあれば、データの操作 ロジックとデータベースのアクセスロジックが分離できて良さそうな雰囲気がします。 しかし、トランザクションなどを考えるとjavaインスタンスとの同期を真面目に実装するのは たいそうメンドウな仕事になりそうです。 おそらく多くの人が考えることなので、すでに多くの成功設計例があるかと思うのですが、 キーワードが思い当たらずうまく探せないでいます。 このような問題を考えるのに適した参考サイト,書籍,キーワード,ライブラリなどご紹介 いただけないでしょうか。よろしくおねがいします。
268 :
デフォルトの名無しさん :02/04/06 03:35
EOF使うと、JDBCゴルゴルとか、J2EEとか、SQLゴルゴルとか、 アフォらしくて泣けてくる・・・ 早く仕事でEOF使いた ぃ ょ ぅ ・・・
>>267 それってCMPなエンティティBeanではないの?
結局SQLゴリゴリになっちゃうに256カノッサ。
==========終了==========
データベース上のあるデータが更新されたことをトリガにしてあれこれやりたいんですが ポーリングするしかないですかね。 それとも直アクセスは禁止したほうがいいのかな。
トリガに「更新したよ」ってメールかSNMPのアラームかSSTPで電波送るように しとけ。
274 :
デフォルトの名無しさん :02/04/07 14:40
状況がよくわからないが、oracleなら更新DMLでPL/SQLを起動できるトリガという 機能があるが。その他のDBにもあるはず。場合によっては、インステッドトリガ といって、更新DML全体をフックすることもできたと思う。 ただ、トリガーをあまり使うと、ブラックボックスが多くなってシステム 全体の見通しは悪くなると思う。ちなみに私はトリガーあまり使わない。 トランザクション的に非同期でよいのなら、DBトリガーで外部にメッセージ を発信するだけにして、実際の処理はそのメッセージを受けたプロセスが 実行するようにするといいと思う。
>>274 すんごい曖昧な質問にも関わらず答えていただいて申し訳ないです
非同期でOKかどうかで全然違いますね。まずはそこをハッキリさせます。
ありがとう。
277 :
デフォルトの名無しさん :02/04/28 15:25
実際問題、みんなDBアプリを作る際にどんなコンパイラ使ってるんでしょ? たとえば、、、 作成したアプリの実行環境はWin限定 DBはORACLEが基本だが、場合によってはSQL Serverもあり なーんていわれたら、どんなコンパイラ選びます? あ、あくまでもクライアントPC上で動作するexeファイルを作成する 目的であり、Web系のアプリ作るわけじゃないですが。
ADOでも使っておけば、言語なんてなんでもいいんじゃない? 俺は慣れてるからBCB使うけど。
280 :
デフォルトの名無しさん :02/04/28 19:35
>>277 JavaでWebObjects。
Oracleで作ってたシステムを、アプリ側はコード変えずにSQL Server用に
できちゃったりなんかしちゃったりする。
>>280 ODBC, JDBC かませとけば WebOjects じゃなくても みんなそーなんじゃない?
つーか、システムの内容にもよるけどふつーはバックエンドの処理を
DB依存のストアドで記述するから、ODBCとか使っていてもDBを交換できない罠。
282 :
デフォルトの名無しさん :02/04/29 06:32
>>281 じゃあ280のいう「コード変えずに」というのはどの部分の話?
ODBCやJDBC経由すればアプリ側のコードが変わらないのは当たり前だと
思うんだけど・・・
>>281 要求仕様が...
> DBはORACLEが基本だが、場合によってはSQL Serverもあり
なのに...
> DB依存のストアドで記述する
あなたは、ヴァカですか ?
284 :
デフォルトの名無しさん :02/04/29 09:02
280=283がヴァカに見える
285 :
デフォルトの名無しさん :02/04/29 09:11
>DBはORACLEが基本 その基本って考え方がド素人。 プーか?
>>283 オレが「ふつーはDB依存のストアドで〜」って言ったのは、
280のWebObjectsのDB非依存性に対しての現実的回答ね。
決して、277のクライアントアプリケーション作るのにうんぬん、
に対するコメントではないよ。
>>282 意味不明だよ。アプリ側って何? クライアント側のこと言ってるの?
言いたいことがあるなら、もうちょっとちゃんと説明しる!
EOF知らないやつは、シコシコいつまでもSQL書いててください。
漏れの会社のWeb製品、ボタンクリックすると直でSQL発行しやがる。 セッション管理とかConnection Poolとか一切無し。 こんな製品作ってる会社からは、一刻も早く抜け出したい今日この頃。
耐久テストに使えるんじゃないか?
まあDB非依存なんてのは夢物語ってこった。
293 :
デフォルトの名無しさん :02/05/04 17:01
SQL厨です。教えてください。 create 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)
INSERTしてCOMMITするまえにSELECTしる。 SELECTした値でinser into detailしる。 その際detailのIDは自動採番にせずに普通の整数型にしる。 それがいやなら headerとdetailのidを関連づけするためのリンクテーブルを作成しる。
295 :
デフォルトの名無しさん :02/05/22 06:50
age
____ /...... .. .../ ||::: ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |: ̄\ ミ,, ゚Д゚ミ< SQLの日付教えて! |: :|: ̄U U ̄:|\_________ |: :|: .:| DATEフィールドに日付が入っているときに WHERE ("2002/05/22" <= DATE) AND (DATE <= "2002/05/24") こんなSQLを流してるんだけど、 このSQL文ってDBに依存している気がするです。 どのDBでも使える、SQL文によるDate型の比較方法って なんかあるんでしょうか? 氏ってたら教えてくださいませ。
>>296 ないと思われ。
日付型はDB依存になるのであまり好きでない。
見た目2002/05/24という値が、 実際は2002/05/24 00:00:00と評価されると悲惨ですな。
301 :
デフォルトの名無しさん :02/05/24 04:31
302 :
デフォルトの名無しさん :02/05/24 05:48
>>やっぱ日付は文字型だろ。 2000年問題も過ぎ去ったとまた日付をYYMMDDでフィールド 設計やっているうちの会社は厨房ですか?
たぶん2037年末あたりで倒産するんでそのままでも全く問題ないです。
JDBC しか知らんが日付は ? 付き SQL 使えば互換性保てるような。
305 :
デフォルトの名無しさん :02/05/24 09:35
変なデータアクセス層を自作するならJDO使いな。
∧,,∧ アリガトンン ミ*゚Д゚彡 ヤパないのね。
DB2 7.2 FP4を使用。 同じサーバー内にデータベースの数を増やせば 増やすほどパフォーマンスは低下するものなのか? なぜ、低下するのか等の理由も教えて! 分かるやつ、教えろ。
id|subject|message|part | -------------------------- 1 |ギコ |test... |1 | 2 | モナー | 逝ってよし| 2 | 3 | シー |ウトゥ |2 | 3 | 肉 |ゴルァ |2 | こういうテーブルで part | count ---------- 1 | 1 2 | 3 こういうviewってストアドとか使わないでsql文で出すには どーやったらいいんすか?
310 :
デフォルトの名無しさん :02/06/08 02:01
>>309 select part, count(part) from ... group by part ってな感じで。
SELECT PART, COUNT(PART) AS COUNT FROM XYZ GROUP BY PART ?
さんくす〜!>310
おまいら SQL は大文字派? 小文字派?
314 :
逝って良しの1 :02/06/08 02:12
>>307 データベース間での情報の整合性取るのは台数増やせば増やすほど
増える。
大文字 Oracleは大文字の方が早いって聞いたことがある(眉唾)
大文字 C/Java のコードは小文字が多いので見分けを付けやすいように (外部 ファイルに定義することも多いが)。
SELECT name FROM tmp ORDER BY id DESC; とか、命令は大文字でやっとる。
ObjectRelational DB(DB2/Postgres/Oracleなど)だったら >241 >248 みたいな場合は継承つかったらどうかな?
混在(各トークンの先頭だけ大文字) Select 名前 From テーブル Order By コード テーブル名、列名は日本語。これ定説。
320 :
デフォルトの名無しさん :02/06/22 03:24
もっといろんな事聞きたいぞ、あげ
321 :
デフォルトの名無しさん :02/06/26 21:06
Winのアプリで、ボタンの文字から何から何まで、 全ての文字情報はDBに存在するってアプリってどう思う?
322 :
デフォルトの名無しさん :02/06/26 21:19
ちょいと相談に乗って下さい。 PL/SQLでインサート文を作ってDBにインサートしたい。と考えてます。(1500万レコード) である列は乱数を発生させて(DBMS_RANDOM)それを0埋めで15桁に加工したい。それで他のレコードは1〜10 までの数をランダムにインサートの文に埋め込みたいと思います。 可能なのでしょうか?もし可能であればヒントを教えて頂きたく思います。 (カーソルを用意して処理をするのだと思いますが、1〜10のレコードをランダムに埋め込むというのが考えつきません。)
>>321 極度に高い応答性を要求するアプリでそれは酷いけど
べつにいいんでない?
windowsでいうところの文字列リソースだってダイアログリソースだって、
あるいみDBみたいなもんだし。
>>322 ふつうにCかperlかVBかrubyか手書きでもいいから
挿入文を150万レコード分作りなさい。
途中にcommit文を入れとくと、たぶん吉。
>>322 (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だろ。
326 :
デフォルトの名無しさん :02/06/28 02:13
>>322 1つ目の要件は、LPADでいけないかな?
俺は使ったこと無いんだけど・・・・
いろんな人の意見を聞きたいのでageておく。
こーいうとき、Perl使えれば楽だろうなぁとは思う。
風呂入ってきたが、気になったのでちょっと調べてみた。 まず、 > ある列は乱数を発生させて(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使えば良いし・・・
328 :
デフォルトの名無しさん :02/07/02 16:52
ER図をかくときに、1:Nとかをもっと詳しく(0..1):(0..N)のように書く ことがありますよね。この時の 0..1なのか 1..1なのかってテーブル見て わかりますか? [学生]テーブルと、[サークル]テーブルがあって、 学生テーブルにサークルIDの参照キーがあったとして、 [学生] 学生ID PRIMARY サークルID FOREIGN KEY [サークル] サークルID PRIMARY この学生.サークルIDがNOT UNIQUEならばサークル:学生は1:N、 UNIQUEならば(そんなケースはないだろうけど)サークル:学生は1:1だなって のはわかるんですが、(1..1)なのか(0..1)なのかがわからないような気がして。
329 :
デフォルトの名無しさん :02/07/02 16:55
>>328 続きです
学生.サークルIDがUNIQUE可で、かつNULL可ならば、
サークル:学生は (0..1):N はわかるような…。
でも、サークル側から見たときに、学生が「1以上」なのか「0以上」なのか
がわからないんでないかなと思ったのです。
ああ自分で書いててわけわからん…
>>329 SQL-92のEntryだと無理
テーブル間の制約をかかにゃならんでしょ。SQLパズルにそういう例なかった?
331 :
デフォルトの名無しさん :02/07/22 16:06
パフォーマンスについての質問です。 ほとんど同じような内容のテーブルが複数あるのですが、 区分フィールドを作ってひとつのテーブルにまとめた場合と 別のテーブルのままと、どちらが検索時間が早いですか?
332 :
デフォルトの名無しさん :02/07/22 23:50
別テーブルの方が早い
>>332 条件も書かずに断定すなっ!!
>>331 検索結果が1レコードだけ、または複数に分かれている
テーブルのどれか1つのテーブルの内容のみであれば
分かれていた方がよい。
検索結果が複数のテーブルのあっちこっちから
レコードを引っ張ってくるようならば、場合によって
1つにまとまっていた方が良いこともある(JOINのコストが減るので)
しかし、最終的にはケースバイケースという罠(w
きちんとコストを計測しよう!!
334 :
デフォルトの名無しさん :02/07/24 08:38
>>332-
>>333 別々のテーブルに入れて管理することにします。
ありがとうございました。
ノウハウって Know How だっけ?
336 :
デフォルトの名無しさん :02/07/24 10:00
「No House」Death。
初心者な質問ですいません。 VBでDataEnvironmentを使って、 フォームにデータを表示させたのですが、 テキストボックスに値を入力するだけで Updateを呼んでいないのに値が更新されてしまうみたいなんです。 これはなぜでしょうか・・・。
バグ
そんなもん
341 :
デフォルトの名無しさん :02/08/08 18:02
SQL鯖のクエリアナライザで実現しているように、ある重いクエリーなんかを実行中に、 結果を待たずにキャンセルするようにするには、どのような方法があるでしょうか? どなたか教えていただけないでしょうか? クライアントはVB6 + ADO、鯖はSQL鯖っす。
名前:デフォルトの名無しさん :02/08/08 04:26 バンっ カチャ ;y=ー( ´ー`)・∵. ‐ \/|341|) ・∵.
>>343 そーなんですか?厨でスマソでし。
したら、例えば検索条件はユーザが指定できるような仕様で
えいや!で検索しにいったら返ってこなぁ〜い....ってな場合は、
クライアントはひたすら待つしかないってことですか?....
>>344 タイムアウトなら設定できるんでないの?
346 :
デフォルトの名無しさん :02/08/10 01:48
VBでもADOで非同期クエリ投げてれば、 クエリのキャンセルできるんじゃなかったっけ?
347 :
デフォルトの名無しさん :02/08/17 03:35
お盆だなぁ。 全然人こないや
>>346 なんか非同期クエリできそうなんでしが、簡単なプログラム
書いてみてもうまくできないっす...
ADO.Recordset のOpen メソッドをadAsyncExecuteで呼び出して、
とりあえず、FetchCompleteイベントでキャッチしようとしてるですが
だめぽんです。
Connectは、SQL鯖のOLEDBなんでげす。
そもそも非同期クエリの考え方が違ってるんでしょうか?...
サンピルあったら禿げしくキボンヌでやんす〜( ´Д`)
何がダメなのか書いてくれないと分からんけど… イベントリスナを WithEvents 宣言してないとか? Private WithEvents Cn As ADODB.Connection Private Sub Form_Load() Set Cn = New ADODB.Connection Cn.Open "Provider=SQLOLEDB.1;Initial Catalog=pubs;Data Source=localhost", "sa", "" Cn.Execute "SELECT fname FROM employee", , ADODB.adAsyncExecute Debug.Print "非同期だから、クエリ実行中にこれが表示される" End Sub Private Sub Cn_ExecuteComplete( _ ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, _ adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, _ ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection) Debug.Print "非同期クエリが完了したら、これが表示される" End Sub
>>349 レスありがとございます。
えとですね、RecordsetのOpenメソッドを adAsyncExecute or adAsyncFetchで
コールしても、FetchCompleteイベントや、FetchProgressイベントが
発生していないのか、イベントをハンドリングできないみたいなんす...
で、349さんの通り、ConnectionオブジェクトのExecute メソッドを
非同期にした場合は、ちゃんとイベントをハンドリングできるみたいですね。
...なんで?
--
Private WithEvents RS As ADODB.Recordset
Private Sub Form_Load()
Set CN = New ADODB.Connection
CN.Open "File Name=ADOSAMPLE.udl"
Set RS = New ADODB.Recordset
RS.Open "SELECT * FROM sysobjects", CN, adOpenStatic, adLockReadOnly, ADODB.adAsyncFetch
Debug.Print "非同期だから、クエリ実行中にこれが表示される"
End Sub
Private Sub RS_FetchComplete(ByVal pError As ADODB.Error_
, adStatus As ADODB.EventStatusEnum _
, ByVal pRecordset As ADODB.Recordset)
Debug.Print "非同期クエリが完了したら、これが表示される?だめぽ.. ;; ´Д`)"
End Sub
Private Sub RS_FetchProgress(ByVal Progress As Long _
, ByVal MaxProgress As Long _
, adStatus As ADODB.EventStatusEnum _
, ByVal pRecordset As ADODB.Recordset)
Debug.Print "非同期クエリのフェッチ中、これが表示される?だめぽ.. ;; ´Д`) "
End Sub
351 :
デフォルトの名無しさん :02/08/21 11:41
もーかってまっか?
墓地墓地でんなー
あー、おぺんの時はクライアントカーソル使ってちょ。 : Set RS = New ADODB.Recordset RS.CursorLocation = ADODB.adUseClient : で、どうだろうか?
354 :
デフォルトの名無しさん :02/08/22 22:55
ADOとかJDBCで別コネクションのテーブルをコピーするために 何か良い方法ありませんか? RecordSetを地道にコピーするしか思いつかない・・・
>354 DB自体にリンクなんかの機能があるならそっち使ったほうが楽。
住民背番号制に反対してる場所に住んでる人は主キーの使用を禁止して背番号制があったほうがよいと実感しなさい
357 :
デフォルトの名無しさん :02/08/31 18:51
SQL Server使って開発やることが多いんだけど どうも、Transact-SQLが使いづらくてしかたない。 C++とかのかみ合わせも良くないし。 なにかイカシタDBエンジン知らない?
.NET+SQLXML最強 ...嘘
次の仕事はOracleを使うことになりました。 問題解消。
360 :
デフォルトの名無しさん :02/09/24 23:28
ORACLE使う以上、避けようが無いだろうが・・・
>>360 値段がいくらか知らんがObject Browserで十分でねーの
オブジェクトブラウザは微妙に使いにくい。
>360 2chにリークしてみるか?って奴ですか? 昨日たまたまサイトみたら来月とか書いてあったけど、、、 ソフトウェア板にそんな紹介ないだろうが!
Peggyスレの事じゃないの?
そう。Peggyスレがたまたまあがってたんで・・・ まあ、最近はOracleばかりってわけでもないんで、 使えればObject Browserでもどっちでもいいんだけど。
50個ぐらいのデータをまとめて更新する場合、ADOとかではどうやるのがいいんでしょうか。、 1個づつデータセットつくって更新するのは短期間に何回も接続しすぎでよくないですし. 50個のデータセットを求めるのは問い合わせ文が長くなりすぎるし
どういうデータをどういう風に更新したいのかによって大きく変わるっしょ。 単純にUPDATEを投げるだけでOKな場合もあるだろうし、ある条件で 絞り込んでレコードセットを取得した上で更新しなきゃyダメなケースもある。 まずは要件をハッキリさせたほうがヨイ。
>>353 遅くなりますた...ありがとうございます。
やりたいことできそうす...感謝感激〜!!!
371 :
デフォルトの名無しさん :02/10/07 23:26
ageておく
372 :
デフォルトの名無しさん :02/10/09 01:16
家でPro*Cのテストしたいんだけど、互換なプリコンパイラ誰かしらない? 理想をいえば VC+Pro*C互換Tool+.mdb の組み合わせで使えるとうれしいんだけど #DB依存するようなSQL文は書いていない、の前提でも可
373 :
デフォルトの名無しさん :02/10/12 13:12
もーかってまっか?
ASP + SQLanywhere で開発してまふ。 (DBへはADOで接続してます。) ローカルDBへは接続できるのですが、ネットワーク経由だと Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Sybase][ODBC Driver]Unable to connect to database server: specified database not found とソンナノネーヨと怒られてしまいます。ネットワーク経由でなにかコツがあるのでしょうか? サンプルソースは Dim Conn, SQL, oraDs Set Conn = Server.CreateObject("ADODB.Connection") →Conn.Open "DSN=データソース名" SQL = "SELECT * FROM テーブル名" Set oraDs = Conn.Execute (SQL) 矢印の所でエラーになりまふ。
376 :
デフォルトの名無しさん :02/10/23 11:55
テーブルAとテーブルBとを関係付けるとき 【テーブルAのフィールド】と【テーブル名】とで テーブル間の関係を持たせているのですが、こういう設計ってありえるのでしょうか? テーブルAのフィールドには参照するテーブル名が格納されます。 もちろんレコードを識別するキーは双方にあります。 テーブルAの参照するテーブル名を格納するフィールドが無駄に思える。 DB設計者は「こうしておけば関係のないテーブルまで見に行かなくて済む」との見解。 DB設計者のスキルに疑問。
378 :
デフォルトの名無しさん :02/10/23 13:33
>>377 さん
>>376 です
やはりそうですよね。
「外部キーと主キーで関係を持たせるのが理に適っている設計では?」と
懸案事項として挙げたら頑固だとか杓子定規だとか罵声を浴びせられました。
ほかの現場も実際こんな感じでしょうか?
立場上強い人間に左右される?
376-378 ジサクジエンダロ 理由:376の説明で理解出来る香具師は いない。
>>376 根本的に「関係のないテーブルまで見に行く」設計をしているなら
ただの莫迦
381 :
デフォルトの名無しさん :02/10/23 13:59
>>376 です。
社員情報を主として各種アプリ登録情報テーブルが幾つか用意されている。
利用申請を出すと該当するアプリ登録情報テーブルにかかれる。
バッチ処理でアプリ登録情報テーブルからシステムに反映させる。
382 :
デフォルトの名無しさん :02/10/23 14:35
ほかのスレで きいてたんですけど、ロールバックする意義と価値を教えてください。
383 :
デフォルトの名無しさん :02/10/23 14:42
>>382 DBを、巨大なグローバル変数と考えているなら、
ロールバック無しで開発するのも有意義です。
>>382 意義はありすぎ。
プログラムで処理中にエラーが発生して、今までに行ってきた変更を
すべてを元に戻すことができるのは便利だよね?
価値は現実世界に過去にいけるタイムマシンが存在するのと同じぐらい。
トランザクショナルなシステムは何度でも人生をやり直せるわけだ。
>382 もしロールバックできなかったらどうなる? DBに限らず、メリット・デメリットに関しては逆説的に考えてみるとよくわかるぞ。
>>376 多分そのプロジェクトもうだめだね。
少なくともその設計した人レベル低すぎ。エンジニアと呼べない。
あなたもなるべく早くその会社辞めて、もうちっとましな上司のいる会社に移りなさい。
脳みそ腐るよ。
387 :
デフォルトの名無しさん :02/10/23 16:42
>>384 プログラムに エラーが なければ ロールバックする必要は ないということでしょうか?
デバッグ完の状態ならば、必要なさそうですが・・・。
388 :
デフォルトの名無しさん :02/10/23 16:44
>>385 できなかったらどうなる? というのが わからなかったから きいているんです。
アクセスのMDBを使った場合、排他的処理をMDB側でしていると思うのですが・・・。
この場合、ロールバックは いらないような感じがするんです。
389 :
デフォルトの名無しさん :02/10/23 16:45
なぜ、プログラムで処理中にエラーが発生するのか・・・? バグが満載だから(w
>>388 汎用機だろうがPCだろうが携帯だろうが、あらゆるシステムはいつかは必ず壊れる。
それが明日か50年後かなんてことはどうでもいい。
もしものとき、DBが即座に復旧できなかったら、客はどうなる?
ロールバックがないDBシステムなんて。。。ガクガクブルブル
392 :
デフォルトの名無しさん :02/10/23 17:32
>>391 まぁまぁ。
これだからACCESSでアプリもどき作ってる香具師は、、、
本人はDB開発者と思ってるのかもしれないけど。
393 :
デフォルトの名無しさん :02/10/23 17:32
VBで開発してる連中なんて、こんなやつらがほとんどだよ。 ロールバックなんて知らないよ。 SELECTして返ってくるデータを使い回す。 トランザクションなんて関係なく更新する。 ヤシラにとって、DBなんてのは、でっかくて便利なグローバル変数。 って、マジで漏れの会社でこういう使い方してるよ。 言ってやっても聞く耳無し。「こう使うって勉強したんだもん」だと。 DBも、リレーションなんか張らねぇな。 ちょっとしたフラグなんかも、全部DBにつっこむ。
どうせアクセスがラッシュしたりしないし〜
>>391 ロールバックって一連の処理でデータに不具合が発生した場合には
役立つだろうけど
システムが壊れたんじゃ
バックアップがなきゃどうしようもないんじゃないのけ
397 :
デフォルトの名無しさん :02/10/23 18:21
みんな、ロールバックの確認は どうする? バグSQLでも つくっとく?
398 :
デフォルトの名無しさん :02/10/23 18:24
ロールバックが 必要な要因を 具体的に あげてみて。 システムクラッシュとか、 プログラム処理エラーなんて 抽象的なことは ダメね。
399 :
デフォルトの名無しさん :02/10/23 18:25
Accessってさ、使用している時に、ワークを自分自身で作るよな。 それで、エラー対応してんじゃねぇのか?
400 :
デフォルトの名無しさん :02/10/23 18:28
>>398 自分で具体的な例をあげてるじゃないの(藁
それが絶対発生しないシステムなんてないしね。
システムクラッシュとかプログラムエラーのどこが抽象的なんだか。 つーか>396(=398?)はトランザクションとかをもうちょっと勉強してみなさいよ。 仮にデータが100ギガあるDBがあったとする。数秒おきにガンガンデータの入力があるとする。 要件として、障害が発生したとしても10分前までに入力されたデータは全て保護されなければならないとする。 そんな時、オマヘは100ギガを常にバックアップ取れというんか?
あ、Accessの事か・・・mdbってMAX2Gだっけ? まあタイマーで毎分ファイルコピーでもしてがんばれや(ワラ
ACCESSをDBMSだと思っている厨っていつになったらいなくなるんだろう。 そういう似非DB開発者はたいてい 「DBにはACCESSを使用してます。」 とか言うんだよね。 ※※※※ 重 要 ※※※※ Jetはファイル共有型DBMSです! ローカルなファイルサーバにMDBおいてるからってクラサバじゃねーっつ ーの。 VB厨やデル厨ってよく聞くけど、そいつらって、その言語に傾倒してるけど それなりに使えてるからましだよね。
>>403 じゃあACCESSを使用するときDBには何を使用するといえばいいんだよ?
>>404 男ならアイサム!!
(ハズシタカ....)
406 :
デフォルトの名無しさん :02/10/23 19:06
>ACCESSをDBMSだと思っている厨って >Jetはファイル共有型DBMSです と揚げ足とってみるテスト
結局、話が噛み合ってないのは 開発規模が違いすぎるからだと思うな 小規模なLANの世界と大規模なネットワークでは 「システム」の意味そのものが違うし・・・
409 :
デフォルトの名無しさん :02/10/23 21:00
>>407 何回言えばわかるんだろうね。
JetはDBMS、ACCESSはフロントエンド。
君には理解できないか。言うだけ無駄か。
釣れた!とか言われる前に氏ねば?
411 :
デフォルトの名無しさん :02/10/23 21:19
>>409 407はDBMSの意味さえわからない罠
412 :
デフォルトの名無しさん :02/10/23 21:39
>>408 一理あるといえばあるが、スタンドアロンでもきちんと設計され
てるものもあれば、大規模クラサバでも信じられないテーブル設
計のものもある。
スレの趣旨としては、よりよいDB設計についてのスレなので、今
は厨でもやる気のあるやつや人のアドバイスを真摯に受け止める
やつとは話す価値がある。
きちんとしたDBなら、バックアップにトランザクションログを適用すれば、ほぼ回復できるけど、 ○○○○○○じゃそんなことできないよ。
某都銀の某取引システムではロールバックなんかしてませんが何か? トランザクションは基本すべて Auto Commit ですが何か?
>>414 厨房ですまん。たまにAuto Commit対応という言葉聞くけど、
A処理(完了)
B処理(完了)
C処理(ネットワーク障害により異常終了)
の場合、C処理の異常終了をトランザクションサーバ(若しくは
データベース)が感知しただけでロールバックしてくれるのか。
それとも、C処理で異常終了したら、やっぱりプログラム側で
ロールバック命令を発行しないといけないのか。気が向いたら
教えてくれ。
>>415 Auto CommitはSQL文が発行(終了)されるたびに、トランザクションをCommitする機構です。
>>412 さんの例だと実際には
1.A処理(完了)
2.コミット
3.B処理(完了)
4.コミット
5.C処理(ネットワーク障害により異常終了)
6.ロールバック
7.5の前に戻る
ってことになります。
>>387 そうそう!バグが無くてエラーが発生しない100%完璧なプログラムならロールバックする必要は無い!
でもそんな業務システム存在するか?
少なくとも君のプログラムはOSとか言うバグだらけのプログラムの上で動いているし、
誰かが処理の最中にケーブル抜くかもしれないしね。
何億回に一回発生するかしないかのわからないエラーのためにトランザクションを利用するわけです。
> 何億回に一回発生するかしないかのわからないエラーのために うそーん
420 :
デフォルトの名無しさん :02/10/24 09:27
>>417 何億回のエラーの前に ハードが 故障しそうだ(w
> バグが無くてエラーが発生しない100%完璧なプログラムならロールバックする必要は無い! ゲートウェイが停止してたとか、別サーバへの接続が瞬断にあったとか、ディスクのパーティ ションがいっぱいになってたとか、手作業で入れておくべきレコードが入っていなかったとか、 君のシステムではそういった運用上の問題は考慮しないのかね?
と、脊椎反射で書き込んでみたがよく読むとアレな罠。
>>416 ということは Auto Commit で連続して SELECT した場合、トランザクション
分離レベルの Repeatable Read 以上は意味がないということ?
>>423 というかAutoCommit Onにしてトランザクションも糞もないもんだ、といってみるテスト。
>417 *どんな処理のどんな単位で*何億回に一回エラーが発生するんだ?
426 :
デフォルトの名無しさん :02/10/24 11:12
>>421 データベースとの接続が きれたら、ロールバックしようにも できないじゃん!
427 :
デフォルトの名無しさん :02/10/24 11:14
データベースの取り扱い手順 データベースをオープンする(MDB) テーブルをオープンする。 SQLを実行する。 テーブルをクローズする。 データベースをクローズする。 こういったやり方の場合は、ロールバックは 不要か?
2-phase-commitしようとしたら必須にならんかえ?
>>425 藁)。何でもありうる。
宇宙線の影響で、メモリの内容が1ビット書き換わるというのはどうよ。
CPUのバグとかもいいね。
430 :
デフォルトの名無しさん :02/10/24 11:33
>>427 そもそもMDBってロールバックできるかな?
ログとってないんじゃないの。
>>430 せめて最新50ぐらい過去ログよもうね。
複数の人がロールバック出来ないっていってる。
若干一名、人の話を聞こうとしない香具師がいるけど。
2ちゃんねるで複数、ねえ・・・
>>432 俺が書いたのと、俺が書いた覚えが無いのと
>>431 じゃあ、
ADOやDAOの
BeginTrans
CommitTrans
RollbackTrans
メソッドはは何なのだ?
MDBに対してできないのか?
>>426 そういうのは RDBMS 側でロールバックしている。
>>416 どうも、どうも。情報どうも。
TP1とかのトランザクションサーバー使ってばっかりの
人間には難しそうな機能ですな。
437 :
デフォルトの名無しさん :02/10/24 12:42
ここで大騒ぎしてるヤシって、SQLスレのカグシ発言人と同一人物じゃねえの?
大騒ぎというか、空騒ぎ。
>441 マヂ?ログたどって過去の状態に戻る事できるの?
アクセスぐらい使えるようになろうな over 2kだが Sub test() Dim cn As ADODB.Connection Set cn = CurrentProject.Connection cn.BeginTrans cn.Execute "update テーブル set b = '値'" cn.RollbackTrans End Sub これでテーブルが更新されているかどうか 確かめられるだろ。
>>444 RollbackTransの行で「RollbackTransを実行するためにはBeginTransを使用してください」
とエラーが出るのですが、何故でしょう?
445=446 おめーさ、自分のコードのバグ探して もらえなかったからといって煽るなヨ。 見苦しいぞ。 Executeの前に BeginTransメソッド呼ぶのを 忘れてるだけだろ。
>>444 おっ、できる。
Access侮りがたし。
ちなみに複数のトランザクションを同時に実行した場合ってどうよ。
Transaction Isolation Levelって有効なの?
漏れは煽ってないよぉ。 単純に興味があったから貼り付けて実行したらエラーが出たから 聞いただけなのにぃ まぁ、もういいや。それほど興味があったわけでもないし。
>>449 誤認識したのはワルイが
コイツらマジでDAOやADOをまともに
使ったことがないのに、MDBファイルの
論議してたのか?
Accessだけの技術じゃないのに...
>>448 BeginTransでカイル君にきいてみれ。
まOraみたいにSAVEPOINTまでは指定
できないけどな。
452 :
デフォルトの名無しさん :02/10/24 16:55
エクセルのヘルプって いまいちなんだよなぁ
>>452 Accessのブビエディタのカイル君に
きいてみれ。
厨がいないと盛り上がらない罠
ワシが聞きたかったのは障害発生後にトランザクションログ辿って 障害前の状態に復帰できるのか、って事だったんだが・・・
455=443 もう一度トランザクションと リカバリを勉強してこい。
>>455 >障害発生後にトランザクションログ辿って
>障害前の状態に復帰
そのためのトランザクション処理じゃないのか?
障害前の状態に戻すって、
オマエんとこのDBは障害があっても
コミットされてしまうのか?
458 :
デフォルトの名無しさん :02/10/25 01:28
>>455 はオラクルでいう、アーカイブログのような物が
Accessであるのかと言っているんだと思うが、そんな物はねー。
トランザクションとトランザクションログは別物だ。
ん、DB2 のロールフォーワードの事か?
DB自体があぼーんした時に、バックアップのDBとアボーンしたDBのトランザクションログファイルでDBを回復できるかってことか? >455
461 :
デフォルトの名無しさん :02/10/25 05:46
結論 MDBでは 無理に ロールバックを使う必要ないってことだな(w
>458 >460 そそ、それ。
>>456 あ〜あ、答えかいちゃった。
もうちょっと455の厨っぷり
を晒そうと思ったのに。
(まぁ
>>462 で自ら晒したわけだが)
漏れは、トランザクション処理
ができる、できないに対しコード例を書いたまでだ。
>>461 まだ和姦ねぇのか(真性厨だな)
プログラム内で関連性のある
複数のSQLを発行してその途中に
クライアント側で瞬断なり、
テスト時に予期できなかった不整合データが
入ってきたらどうする?
おまえんとこはわざわざ調査して手で直すのか(フラ
>>463 こいつはまた久々にイタイ奴が登場したもんだな。これくらいの話題は5秒で解決してやれよ。
個々のレベルがちょっと違うだけで、ここまで話が噛み合わないんだな。 なるほどデスマーチがなくならない訳だ。
つか>461はシビアなトランザクション処理が必要な業務にMDB使う事自体が アフォだという事を例えたネタだって事は誰の目にもあきらかだろうに。
>>467 ほんとイタイな。
ここで話しているのはデータファイルが
MDBだろうが、SQLサハデーダ、Oraデータだろうが
関係ないの。分かる?
トランザクション処理対応しているDBMSなら
プログラムできちんと、ロールバック、
コミットのタイミングを障害時のビジネスロジック
に合わせなければいけないんダヨ。
>>463 でもいってるだろ。
頼むからリカバリとごっちゃにしないでくれるか。
MDBはシビアな管理(リカバリ・セキュリティ・最適化等)
について向いていないだけだ。
>>469 同時接続ユーザー数を真っ先に挙げて欲しかった。
オレ>467だけど、リカバリの話してんのは別の人だよ。
ああ おれは MDBだけに ついて 話してる。 厨房だからな(w
>472 なんでageるんだか。
っつーかオマエら仕事しろよw オレモナー
>>469 キミはもうちょっと日本語読解力をつけたほうがいいな。
かなりイタイ事言ってる自分に気づけ
なんかしらんけどAccessなんか使ってる香具師は低脳
>>477 そうか?
スコープを理解して適切に使えばよろし
そもそもの本題は何よ?過去読むのダリーから誰か教えて。 >477 スタンドアロンで予算30マソの仕事にもOracle使うヤシ発見?
>>382 の
「そもそもロールバックなんかイラネーじゃん」
から始まってるのか・・・
そりゃ荒れる訳だ(w
予算30万の仕事なんかあるのかよ。やっぱり低脳だな。
>>482 プロジェクトに貴賤無し。
予算30マソでも、それを月3本こなせば結構利益率良いぞ。
リアル厨房にしてやられたって感じだな。いかにもム板らしい。
485 :
デフォルトの名無しさん :02/10/25 11:42
予算30万円で オラクル買ったら 釣りは いくらだ?
>482 単発短期でAccessとかExcelの仕事なら妥当な線だと思うけど。
俺は500万からしか受けないよ。やっぱり低脳は貧乏だな(w
>>481 Accessではロールバックできない
という知ったかが蔓延し、
可能なことを証明し、必要性を説明したが、
関係もないことを盾に反論した
ことが原因だな。
>>476 あのさ、トランザクションの操作というのは
設計者、プログラマによる人為的なもの。
漏れは別にAcessマンセーではないし、
Accessは糞といっても構わない。
だがな、それは管理面では糞だ
ということだ。
Accessがシビアなトランザクションに不向き
または、トランザクション自体が不要
という考えを持つようじゃ他のDBMSでもきちんと
使えてないヨーダナ。
>Accessがシビアなトランザクションに不向き いやこれは間違ってないっしょ 複数ユーザがガンガントランザクション張るような業務には使うなというのは定説だと思ってたけど。
>>487 低脳>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>精薄
>487は1年で500マソの仕事を受けてるくせに鼻高々ってホント?
>>489 だ か ら 同時接続ユーザー数でしょ、そ れ は。
同時接続ユーザ数とトランザクションのシビアさが無関係だと?
>>492 ハァ?
月500ですが何か?
やっぱり最下層は発想も貧乏だな。
やっぱりロールバックする事に意義も価値も無いんですね。
だから仕事すれってオマエらw
>495は利益率10%満たないくせに鼻高々ってホント?
>495はサラリーマンのくせに鼻高々ってホント?
>>494 ほんとおめーアフォだな
ロックの仕組みを勉強してこい。
(さらにAccessではどのレベルまで
対応しているかまでだ。)
これに反論して、厨房ぶりをさらせ。(フラ
>500 Accessで行ロック使って痛い目見たこと無いの?
>>501 数人のユーザでもロックは起こるし、
人数とは関係ないだろ。
>>503 数人ではまったんなら実装に問題があったんだろ。
で、本題はなんだっけ?
>>504 「設計によっては」が抜けてたダケダ
だから、人数とは関係ない。
「MDBでもトランザクションが使用でき、 必要ならば使うべき」 でいいの?
> 月500ですが何か? 昨年の所得税いくらでしたか? それともリーマンで月500の貧乏プロジェクトの 自慢ですか?
>507 「Jetをバカにする割に、トランザクション使える事すら知らない奴多すぎ。」 でよいかと。
Jetはバカだよ
>>510 JetでTransaction使える事は知らなかったが、振り返って考えてみても
別にJetでTransanctionが使える事を知らなくてもいいや、っと。
513 :
デフォルトの名無しさん :02/10/25 14:57
バカと天才は 紙一重・・・
いや、バカは何をやってもバカ。
だからDB関連のスレでACCESSの話するの嫌なんだよな。 厨が次々とわいてくる。
ここまでの厨 ・DAO・ADO+MDBでトランザクション処理ができないと思ってたヤシ ・トランザクション処理とリカバリをごっちゃにし、さらに Jet(orADO)+MDBだとリカバリが弱いといって、 トランザクション処理は必要なしと騒ぐ厨房 ・Accessしか知らないくせにそれで自慢知ったかする厨房 (pin'sとかいうサイトの常連ども・・・ここにも来てるだろ山神) そして、こんなことを書いている漏れ
pin'sはいいサイトじゃんか。 俺、最初からここだったら泣いてたよ。
>>517 いいかどうかは、人によりけりだが、
漏れもちょっと前みたことある。
確かに、厨、知ったかの巣窟だったな。
まともなのは、SQLサバのK.Ogi...
とかいう氏ぐらいだった。
だが、2ちゃんでバトられながら
覚えた方がその分頭に焼き付くというのも
あるぞ。
>518 そりゃ2chのほうがミになるのは解るけどね。 最初からココで、ココが普通だって事になると人生踏み外しちまうよ。
520 :
デフォルトの名無しさん :02/10/26 07:20
そかそか
521 :
デフォルトの名無しさん :02/10/26 09:33
この業界入って、何の資格も取らずに40歳までいっちゃうとリストラ対象になるってホントですか?
522 :
デフォルトの名無しさん :02/10/26 09:47
アクセスしか知りませんがなにか?
523 :
デフォルトの名無しさん :02/10/26 10:15
>>522 それで、一生やっていけるなら 特に問題はない。
アクセスしか知らないのに、 DBシステムとは、とか、 果てにはプログラミングとは いう蛙は多いな。 アクセスのイヤなとこは テーブルとかDB情報を例えリモートでも ローカルのワークテーブルに 取り込まないとフォームやコンボBOX に反映できないとこだ。 (リンクテーブルはリモート データを全て取り込むしな。)
まぁ、アクセスも知らないのにアクセス語るやつも多かったから、どっちもどっちだ。
まあ、なんだ。 ACCESSをDBだと思って、耐障害性についてレポート出せとか言う上司は氏んで欲しいね。
527 :
デフォルトの名無しさん :02/10/27 17:39
意外と、みんな分かってないことが証明されました(w
>>527 意外と、それでも仕事はこなせることが証明されました(w
自分の仕事の範囲だけ分かってりゃなんとかなるものよ
529 :
デフォルトの名無しさん :02/10/28 09:25
530 :
デフォルトの名無しさん :02/10/28 09:33
Access2kを使っている方に おききします。 MDBのサイズとしての限界は どれぐらいなんでしょうか? 一つのテーブルにおけるレコード数の実用的な限界って 何件ぐらいで考えて 設計されてますでしょうか?
>>530 MDBサイズ=2GB
テーブルサイズ=1GB
レコードは1GB以内であれば何行でもいいらしい。
532 :
デフォルトの名無しさん :02/10/28 11:01
フィールド内の文字数 256バイト
533 :
デフォルトの名無しさん :02/10/28 12:12
SQL なんかの入門書 プログラマのためのSQL SQLパズル Excel VBA 大村 あつし Access VBA 谷尻 かおり でいいんですか?
534 :
デフォルトの名無しさん :02/10/28 12:57
なにがいいのか、さっぱりわからん。 どーでもいいけどな(w
535 :
デフォルトの名無しさん :02/11/02 03:15
いまさらだが、MDBでDAO使ってみた。 結構良い感じ〜♪
536 :
デフォルトの名無しさん :02/11/02 10:15
(・ロ・)ホ,('ロ')ホ--ッッ!!!
このpin's厨ども いかげん本星に帰れ、
ACCESSは(っていうかJetは)常にインデックスを全てメインメモリに展開するという仕様だったんで 昔は使い物にならなかった。今はメモリが安いから使えるのかな?
539 :
デフォルトの名無しさん :02/11/04 08:15
ところでその自動生成って、パーティションの管理も出来るの?
542 :
デフォルトの名無しさん :02/11/18 21:53
下記のようなテーブルがあったとします。 テーブル1 ID 機種名 1 2ch 2 ふたば テーブル2 ID 枝番 台数 1 1 10 1 2 20 2 1 10 2 2 30 2 3 40 このとき、 ID 機種名 台数1 台数2 台数3 1 2ch 10 20 0 2 ふたば 10 30 30 というデータを一度で取り出せるSQL文ってありますか?
543 :
デフォルトの名無しさん :02/11/18 23:11
oracleとapacheとphpのつなぎ方教えてください(Windows2000)m(_ _)m
>543 とりあえず無難なのはアロンアルファ(ゼリー状)かな。
546 :
デフォルトの名無しさん :02/11/19 02:10
>>546 レスありがとうございました!
縦横変換についてググッてみます〜。
>>547 条件は色々付くが、一応出来る。
ORA R8.1.7で確認済み
まぁ、向こうで聞いたみたいなのでこっちはもう見ないと思うがね。
SELECT ID,機種名, SUM(台数1) 台数1, SUM(台数2) 台数2, SUM(台数3) 台数3
FROM(
SELECT TBL1.ID ID, TBL1.機種名 機種名, TBL2.台数 台数1, 0 台数2, 0 台数3
FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL2.ID = 1 AND TBL2.枝番 = 1
UNION
SELECT TBL1.ID ID, TBL1.機種名 機種名, 0 台数1, TBL2.台数 台数2, 0 台数3
FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL2.ID = 1 AND TBL2.枝番 = 2
UNION
SELECT TBL1.ID ID, TBL1.機種名 機種名, TBL2.台数 台数1, 0 台数2, 0 台数3
FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL2.ID = 2 AND TBL2.枝番 = 1
UNION
SELECT TBL1.ID ID, TBL1.機種名 機種名, 0 台数1, TBL2.台数 台数2, 0 台数3
FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL2.ID = 2 AND TBL2.枝番 = 2
UNION
SELECT TBL1.ID ID, TBL1.機種名 機種名, 0 台数1, 0 台数2, TBL2.台数 台数3
FROM TBL1, TBL2 WHERE TBL1.ID = TBL2.ID AND TBL2.ID = 2 AND TBL2.枝番 = 3
)
GROUP BY ID,機種名
549 :
デフォルトの名無しさん :02/11/23 20:37
SQLでINSERTする時に主キーがすでに使われていないかとか UPDATEする時に、更新する行がちゃんとあるかなんてのは SELECT文なんかでいちいち調べてますか? それとも、調べずに実行して例外や帰ってきた更新行数から正常に行われたかを 調べてますか? SELECT文で調べるのはロックとかめんどくさいけど、 例外や更新行数で調べるのは何で失敗したか調べにくいんですよね。 たとえば、現在PostgreSQL+javaで開発しているんですが INSERTしたときに主キーが重複していればSQLExceptionが起こるので キャッチしてメッセージを受け取って主キー制約に違反していたときにでる メッセージだったら主キーが重複してたんだなってわかるんですけど、 メッセージが変わったらどうするんだろとか、RDB変わると当然メッセージも変わるよな とか考えるとこの方法ではちょっと不安です。 普通どうするもんなんでしょうか。
>>549 主キー管理するテーブルを別に持つのでわ。
調べずにやるってどうゆことよ?
DBMSにネイティブで接続するなら
各DBMSのエラーコードに依存するが、
JDBC(やODBC)はその基準を用いて
各ベンダーがドライバを開発している
ので問題ない。
>>550 プッ
552 :
デフォルトの名無しさん :02/11/23 23:18
>>550 どういった管理をするのですか?
まさか、主キーが連番になってるとかってオチはないですよね
DBMS変わったら、関数とかの 違いの方が重要になる。
>549 値の取得のタイミング等を決めておき、そもそも重複が起こらないように設計するのが筋だと思う。 主キーの値が単なる連番であったりするならまた別の話だけど。 ちなみにエラー処理はメッセージそのものじゃなくコードを使うのが普通でわ。
レスありがとうございます。自分もはじめはエラーコードを使おうと思ってたんですが PostgreSQLの本見てもJDBCドライバが返すエラーコードについて説明がないし PostgreSQLのJDBCドライバで主キー重複による例外が起こったときに 返されるエラーコードが0だったので、メッセージで判断するしかないのかと思ったんですが。 (メッセージはリファレンスに記述があるんです) 今、JavaのAPIよく見てたら、"SQLstate" 文字列なんてのがありますね。 これを使えばいいんでしょうか。 ちなみに、主キーはユーザーに入力してもらうんですが 連番とかにしたほうがいいですかね。 でもそのときには、新たにUNIQUEキー制約が別のカラムに つくので結局同じだと思うんですが。
556 :
デフォルトの名無しさん :02/11/24 11:00
現在フロントエンドにACCESS、DBにMSDE使ってるんですが受注管理システムを作っています。 受注テーブルと受注明細テーブルをメイン/サブフォームから一括登録する際に、 追加する時と削除するときは単純に受注テーブルも受注明細テーブルもそれぞれ INSERTまたはDELETEすればよいのですが、更新の場合がいまいちよく分かりません。 最初は、そのキーになる受注番号の明細データを全てDELETEし、その後にワークテーブルの 明細データを全てINSERTするというやり方をしてたのですがトランザクションを 使うとたまにうまくいきません。 明細データをともなった場合更新は皆さんどうしてるんでしょうか?
557 :
デフォルトの名無しさん :02/11/24 11:14
>>556 まずは「うまくいきません」という状況報告をやめましょう。
558 :
デフォルトの名無しさん :02/11/24 11:22
>>557 すみません、一番最初に登録かけたときだけDELETEしないうちにINSERTするようで
接続エラーになりました。やり直すとうまくいきます。
559 :
デフォルトの名無しさん :02/11/24 15:50
>558 なあ、>556では「更新が上手くいかない」って書いておいて、>558では 「一番最初に登録かけたとき」ってあるよな。 あんた自身が現象をよく理解できていないものを、他人がわかると思うか?
>>560 自分の今の現象についてをどうこうしたいんじゃなくて、
VBAのコードやSQLの書き方で皆さんどういう方法を使っているか知りたかったんです。
562 :
デフォルトの名無しさん :02/11/25 00:24
>>561 じゃあスキーマを書いてください。
受注と明細っていう情報だけじゃ考える気にならないよ。
MSDEはあんま知らんが、ロックされた二つのテーブルをUPDATEするだけでないの?
SQLだけテキストファイルに保存しておいて、それを読み込んで使うというのは邪道なのでしょうか?
>>563 いいんでない?対応付けがややこしくなりそうだけど・・・
>>564 確かにごちゃごちゃしそうですね・・・。
この辺のスマートな実装方法がわからず、試行錯誤状態です。
何か参考になる本などないでしょうか。
>>565 何故そういう実装にしたいのか理由を書いてくれればアドバイスのしようもあるが。
人によってSQLの書き方が違ってアレだから、って所じゃないの? 自前で仕組みを作るのも良いけど、そうとう腰を据えてやらないと 対処療法的になってしまって結局工数がかさむというオチになりそう。 DBとのインタフェースはビューやストアドを使う等してラップしちゃうとか、 それ系のフレームワークを使うとかするほうが現実的だと思うが。 規約でどうにかなる部分でもあるけどね。
568 :
デフォルトの名無しさん :02/12/06 00:12
業務システムを開発した後、ユーザ自身が運用する場合 DBのスーパーユーザのパスワードってユーザに公開しますか?
569 :
デフォルトの名無しさん :02/12/06 00:36
DBとのインタフェースは、オブジェクトにマッピングするほうがいいな。 別鯖で動いてる別DBを、1つのオブジェクトにマッピングしちまうとか。
>570 ユーザには、運用に必要な権限だけを付与する方が安心かな、と思ったんです。 今回、DBがSQL鯖2kなんですが、クライアントツールがAccessライクなので、 ちょっと知ってる一般人ならすぐ中身を触れてしまうんですよね・・・
>>571 ユーザ側の管理者にだけ教えるでしょ、普通
その管理者がちょっとアレなんで・・・
>>573 管理者が信用できないんじゃどうしようもないけど・・・
パスワードをその管理者の上司(社長でも可)に教えて
それとなく(管理者が信用できないことを)匂わすくらいでしょうか
あ、やっぱ匂わすのもまずいですね とにかくできるだけ確実な人に教えて 「あとはよろしくお願いします」 というのが無難かと
ふつーは担当者・管理者を信じてはいけません。 情報漏洩の多くは、クラッカーではなく アクセス権限を持っている担当者によって行われています。
577 :
デフォルトの名無しさん :02/12/12 11:59
SELECT TOP 10 FROM 【ノウ】DBアプリ開発ノウハウ【ハウ】ORDER BY No;
578 :
デフォルトの名無しさん :02/12/12 13:58
>>549 テーブル、更新用のビューそれぞれに登録用のストアド組んじゃえば?
ストアドの方でエラーコードを自前で返してやれば面倒なこともないじゃん。
今のご時世、いろんな言語から叩くことが当たり前だし。
DBMS内部でラップできる部分はどんどん放り込んで置いた方が楽かと。
こんなこと過去にどっかで書いたような気がしたと思ったら、ここの
>>21 だった。
((((;゚Д゚)))ガクガクブルブル
580 :
デフォルトの名無しさん :02/12/30 01:12
毎分数百レコードがINSERTされるようなテーブルでなければ INDEXを作成する事によるSELECT文のパフォーマンスアップを INSERT文が遅くなる事よりも重要視しても良いでしょうか? とあるSQL文のパフォーマンスが悪いのですが (検索に使用しているカラムに索引が無い事が原因だと思われる)、 どの程度までならINSERT処理が遅くなる事を無視しても良いのか わかりかねています。
どの程度までって・・・ それこそ、システムの要件によって千差万別。 使用頻度やレスポンスの要件をしっかり調べた結果決めるべし。 っていうか君の文章めちゃくちゃ回りくどいなw
>>580 どういう使われ方してるのかによるけど。。。
Oraclならば、索引付けして
PCTFREEとかの値を大きくする・・・とか。
>>581 ,582
社内向けWebシステムのバックエンドで使われているOra817です。
総ユーザーは20弱、同時はあっても2・3ユーザー。
最近このシステムを任されたんですが、どうやら詳細な
レスポンス等の要件は無いようです。
#感覚的に遅いところは「どうにかならない?」と相談されています。
>>582 PCTFREEを大きくすると、領域を新たに取得する為の時間は
少なくなると思うけど、INSERT処理も速くなるもんなのでしょうか?
この場合は、テーブルに対するPCTFREEですよね?
>>581 文章が回りくどいのはよく言われます。要点を押さえながら
簡潔に文章を書く事が出来ないので、要点が足りなくて
何度もやり取りするよりはマシかと思ってこうしてます。
#あぁ、2chでも指摘されるとは・・・
>583 その使い方だと、更新が遅くなるってのは殆ど気にならないんじゃね? Indexをつければ検索パフォーマンスは劇的に改善するだろうし、 プラス面の方が圧倒的に大きいと思う。 >何度もやり取りするよりはマシ まあね。知りたいことが書いてないよりかはいい。 2chで煽り煽られる中で、要点を絞る方法も身についてくるかもしれん。 がんがれ。
>>583 > 何度もやり取りするよりはマシかと思ってこうしてます。
でも、相手によっては正しく理解されない可能性もあるよね。
まず箇条書きしてみるとか、論旨を整理するステップを入れていくようにしてみては。
みなさま、あけましたおめでとう。
>>584 ありがとうさんです、INDEX作成の方向でガンガリます。
そんな場所が2・3あるんですが、そのうち1つはFunctionIndexになりそう。。。
>>585 箇条書きは良い案かもしれませぬ。
文章が長いというだけで、読む気をなくす方も
いらっしゃるようですし、もうちょい努力します。
587 :
DB屋150円で〜す :03/01/03 18:33
新年明けましておめでとう御座います。
>>583 >PCTFREEを大きくすると、領域を新たに取得する為の時間は
>少なくなると思うけど、INSERT処理も速くなるもんなのでしょうか?
>この場合は、テーブルに対するPCTFREEですよね?
いえ。
>>582 で言っていたのはテーブルではなく
インデックスに対してのPCTFREEです。
(テーブルに対してのPCTFREEは更新時のためのものです)
この値を大きくしておくことで、挿入時におけるインデックスの
リーフブロック分割によるパフォーマンス低下を抑えられます。
・・・と論理的な事を書きましたが、実際、目に見えるような
効果があるかは不明です。ハイ。ご参考までに。
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
さいたまカラ殺人予告事件 (略 これにて一件落着。
これでスクリプト嵐には賠償金でホクホクだね
>>203 持ってるからイラネ
「通報しますた」と言って欲しいのか?
>234 つまらん道徳論に回収しようとしたのはアンタだろうに。 >225 でかい掲示板じゃなきゃ多少はリスク下がるよ。
>>240 んじゃ今からお前をヌー速管理人に任命しる。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
>>473 貴方の仰ることもよくわかりますが、いまの2ちゃんねるが
その役割を果たせているとは到底思えません。
あまりにも低レベルすぎて、お話になりません。
いつの日かまともな議論できるような掲示板になるよう
心から願っている次第です。
今まで悪ふざけで出来たものがあったような気がするけど、そういうのが出来なくなるような?
誰かがあらすじとやらを書き込む気配は全くない訳だが。
330 名前:夜勤 ★[] 投稿日:02/12/31 07:34 ID:??? 3板とも 作り直してみた。 情報は salami 時代のを持ってた。 331 名前:心得をよく読みましょう[sage] 投稿日:02/12/31 07:37 ID:OcGVwWya datはどうなってますか? モナーの一部以外は全部あぼーん? 332 名前:夜勤 ★[] 投稿日:02/12/31 07:38 ID:??? そのようです。 残念。
言いたいこともいえないこんな2ちゃんねるじゃ
かぶきゅーししょーと呼んであげよう(ワラ
スレ立てて予告しないなら。 今でもスレ立てしたらIP取られるから、スレ立て予告はしないのが吉。
削除や警告なしにアクセスログが第三者に渡ることになるの?
OSレベルで相手からIPデータ取得の要求があった時にそれに応じるか拒否するか選択できるようにすべきだな
メール欄に文字を入れてIDを出させない方法が あったということなんだ。 知らなかった・・・
249 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:52 ID:rLfxQ17l >荒らしとか犯罪のためなの? そす。 246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV >ひろゆき 俺のお気に入りのスレとか荒されてるんだがそういうのにも有効? 257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l いずれは。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
誤診かどうかは、症例経過がどれだけ良好か不良かによるから。 つまり、『実験台となる患者』に、どれだけ被害が出たかで判明するとこと事。 要は「知らない病院には、なるべく行くな」という、今までのセオリーが 繰り返されるだけ。
ひろゆきがこないと盛り上がらないね
嫌嫌韓厨が自棄に元気だねぇ
電波を演じてるのか、ほんものの電波なのか・・・ 400レス以上演技は続かないかな・・・
2chが2chでは無くなるときが来ましたね。 遊び方の解らない馬鹿が増えたから、しかたないのかもしれません。 もう転載しませんので、以後は該当のスレ追っかけてください 27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc SETTING.TXT管轄でないということは全鯖導入を視野に、か? 38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l 鋭いです。 73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか? ・今までより、サーバが重くなる。 ・裁判所や警察からの照会があった場合にはIPを提出することがある。 こんなところでしょうか。
おっ俺の泉ピン子がっああっんっ
メロンパン=ソンゴクウということで民事訴訟されるわけか?ただアク禁ではたりんな!!
載ったのか(w タイ━━━||Φ|(|゚|∀|゚|)|Φ||━━━ホ!!!!! だな
岡田克彦ファンクラブからのご案内です。岡田克彦氏の卒業した早稲田大学
政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、
http://www.geocities.co.jp/MusicHall-Horn/1091/で 、氏の作品に触れましょう。
Internet Service Providerが契約者に対し 顧客情報の開示を行うことを明らかにするだけだ。 責任は書き込んだ奴が取るだけ。
最近カール★さん見ない・・・
良スレだったのか
(^^)
実質的には上告はもう無理らしい。 うれしいなぁ。
(^^)
(^^)
626 :
デフォルトの名無しさん :03/02/04 20:12
くそすれさらしあべ
やっぱ紙に書くのが一番だな なくしたら知らないって言えば済むし
628 :
デフォルトの名無しさん :03/03/04 09:31
このスレまだ生きてるのかな? 入力系のアプリでの入力内容のエラーチェックですが、作り出すたびに 入力フィールドがフォーカスを失った都度でエラーチェックをかけるべき なのか、それとも最終確認(OKボタン等)でかけるべきなのか迷います。 GUIの流儀から行けば最終確認時のみエラーチェックなのでしょうが… 旧態依然のオフコン画面が頭に染みついているせいなのかな?
どっちがいい悪いじゃなく、、設計段階で決めておけばいいだけの話。 っつーか何が聞きたいのかよくわからん。
WindowsGUIの流儀では、単純な上限・下限チェック入力時に行う。 間違っていたら入力を受け付けずに、警告音と共に値を元に戻すのが普通。 しかしもちろん、複雑な条件が絡むエラーチェックは最終確認時にまとめてチェックするよ。 つーか、VBとかでフォーム作ってるのか?それともWEBなのか? もういい年なんだから、もっとうまく状況を説明できるようにならんと駄目だぞ。
>>628 WEBなら基本はボタン押したときだが。
フォーカス失ったときに出るのは、画面閉じれなくなってうざくない?
発狂する人が出るかと。
632 :
デフォルトの名無しさん :03/03/05 14:39
マルチポストですが、DB関係のスレがあったのでこちらにも書き込みます。 お許しを。 SQL Serverのbcpユーリティについて質問です。 bcpコマンドでを使って固定長データをSQL Serverにインポートしようと考えているのですが、インポートコマンドを実行すると、 >SQLState=37000,NativeError=170 >Error = [Microsoft]{ODBC SQL Server Driver][SQL Server]行1:'('の近くに不正な構文があります。 というエラーが多発しインポートできません。 コマンドは >bcp DB1..Table1 in c:\import_txt.dat -f c:\format.fmt -S Sev -U sa というコマンドを用いており、import_txt.datのフォーマットファイルも 7.0 198 1SQLNCHAR11 ""1Rec-ID 2SQLNCHAR18 ""2Data-ID 3SQLNCHAR18 ""3Date 4SQLNCHAR133 ""4Filler 5SQLNCHAR13 ""5C-CODE 6SQLNCHAR19 ""6K-CODE ・ ・ 198SQLNCHAR18 ""198UpdateDate という感じで仕様どおりに作成しました。 SQLServerは7.0でサービスパック等は何も当てていません。(初期インストールのまま) ServerOSはNT4.0SP5、bcpコマンドを実行しているクライアントはWin2000です。 何か同じような現象を知っているという方、アドバイスなどお願い致します。
633 :
デフォルトの名無しさん :03/03/20 11:18
632さんとは別の者です。質問続きですんません。 現在A、Bの2つのデータベース(Microsoft SQL Server 7/Windows2000 Server)がありまして、 このうちAにあるデータベースの1つをBにそのまま複製したいのですが、 どのような手段を取ればいいでしょうか? ちなみにAとBは別の場所にあって、どちらもグローバルには出ていません。 イメージとしては以下の通り。 >>データベースA [コンソール ルート] └[Microsoft SQL Server] └[SQL Server グループ] └[SQLSERVER_A(Windows NT)] └[データベース] ├master ├model ├northwind ├pubs ├GIKO ※ └tempdb ※SQLSERVER_A内の「GIKO」データベースを、Bにそっくりそのまま複製。 Aはそのままにしておく。 インポート・エクスポート・復元などを試してみたのですが、 どうにもそれらしき機能が見当たらなかったので質問させて頂きました。 宜しくお願い致します。
AでGIKOデータベースをバックアップ Bに空の新規データベースを作って、バックアップデータをそこへ復元 じゃダメっすか?
635 :
デフォルトの名無しさん :03/03/20 13:37
>>634 さ
返信ありがとうございます。
早速試してみたのですが、どうやら自分自身が取ったバックアップでないと
復元してくれないようですヽ(;´Д`)ノ
私ゃSQL鯖2K同士でしかやったことありませんが、他鯖への復元もできますたよ。 ただ、バックアップから復元する際、各種ファイルのパスにはそのバックアップを 取った鯖のファイルのパスが表示されてるはずなので、取り込む鯖でファイル名や パスが違う場合はちゃんとあわせてやらなければダメれす。
つまり、こう言う事でしょうか?↓ A側マシンの[GIKO]データベースに関連するファイルが C:\Itteyoshi\GIKO_Data.MDF C:\Itteyoshi\GIKO_Log.LDF C:\Itteyoshi\GIKO_Backup.bak ※バックアップファイル のように配置されているとする。 A側マシンの[GIKO]データベースで生成したGIKO_Backup.bakを B側マシンのデータベースとして復元するには、 新しく生成するGIKOデータベースのファイル配置も C:\Itteyoshi\GIKO_Data.MDF C:\Itteyoshi\GIKO_Log.LDF C:\Itteyoshi\GIKO_Backup.bak とする必要がある(同じパスを指定する)。
638 :
デフォルトの名無しさん :03/03/20 14:05
すいません追加。 で、B側マシンの C:\Itteyoshi\GIKO_Backup.bak に A側マシンのバックアップファイル C:\Itteyoshi\GIKO_Backup.bak を上書きする。 あとはB側で復元処理。
イメージとしてはそんな感じです。 でも両者のファイル位置は必ずしも一致させる必要は無くて、 「データベースの復元」窓の「オプション」タブで、「復元先」っていう 部分がBのGIKOデータベースのファイルを正しく指していればOKかと。 仮に、BのファイルがD:\Omaemona\〜にあったとしても、この「復元先」には バックアップを取ったA鯖のC:\Itteyoshi\〜が表示されてるはずです。
ちなみに、これが正しい手順なのか私にもわかりませぬ。 やってみたらできちゃった♪っていうだけなので・・・ これだけ書いてから言うのもアレですがw
>>634 さ
ダミーデータで試してみたら、見事復元されましたヽ(´∀`)ノヤター
詳細な解説ありがとうございました。
「復元先」は、要はバックアップファイルの展開先といった意味合いですね。
マジでありがとうございました!(゚д゚ ゞ)
おー、できましたか。 私の中途半端な経験談でしたがお役に立てて何よりです。 >「復元先」は、要はバックアップファイルの展開先といった意味合いですね。 そうそう。 あのテの画面って言葉がわかりにくいんですよね・・・ 「データベースとして復元」ってなんじゃそら、みたいな。
MS-SQL鯖ってすげぇ楽なんだね。
644 :
デフォルトの名無しさん :03/04/01 18:18
テーブルのレコード数が例えば1億とかとんでもない数に なってしまう場合、皆さんならどうしますか? 使用するRDBMSはPostgreSQLやMySQLクラスを想定して下さい。 1、何かのフィールドを元にテーブルを分割する。 2、インデックスや何らかの対策をして一つのテーブルで 3、そもそもそんなデータはRDBMSでは扱わない。 参考までにお聞かせ下さい。
データサイズの上限ってならよく聞くけど・・・ PostgreとかMySQLってレコード数の上限あるの?
646 :
デフォルトの名無しさん :03/04/01 18:52
>>644 そのテーブルの用途は?
1.オンラインでの検索・挿入・削除・更新
2.オンラインでの検索のみ(更新処理はインポート)
3.オンラインでの検索のみ(更新処理はバッチで)
4.バッチ使用のみ
等々、いろいろ考えられるけど...
用途によって答は変わると思うけど。
>>646 >用途によって答は変わると思うけど。
結局「3」って答える罠。
648 :
デフォルトの名無しさん :03/04/01 20:09
更新処理をインポートってどうやんの?他のDBからエクスポートしたのをごっそりもって来るってこと?豪快だな。
>>644 本当に知りたいなら、それぞれのメーリングリストで聞いてみたら?
では質問を変えて
>>644 のような場合、
テーブルを分割するというのは有効な方法でしょうか?
652 :
デフォルトの名無しさん :03/04/01 21:36
>>648 他のデータベースから持ってくるとは限らないよ。
バッチ処理でインポートデータ作っといて
業務止めれるときにでもインポートしとこうか。
って、感じかな。
今、そういう処理やってます。
インポートデータ作るのに2日。
テーブルの切捨て・インポートに半日。
億単位のレコード数扱ったことあるけど、 (たしか、過去30数年くらい上場・非上場 企業dailyデータだったかな) インデックスさえきちんと使えばユーザも 満足するレスポンスで使えた。 たまに行うインデックス再構成には 半日くらいかかったけどね。 基本は ・対象テーブルの物理ファイル(デバイス) を別ディスク、RAWデバイスつかえるならRAWデバイスを使用。 ・インデックスをきちんと使う。 でほとんど大丈夫。 別テーブルや別パーティションは データ保守の面を考えると、最後の手段だな。
>>653 なるほど〜、ありがとうございます。
インデックスってすごいですね。
ちなみにDBは何をお使いだったのでしょうか?
>>653 参照系DBだと、Oracleのパーティション表を使うと運用が楽になる場合もあるね。
今PostgreSQLで1テーブル3億レコードくらいのDBがあるんだけど、過去データの削除と
それに伴うインデクス再構成でかなりの時間停止しないとならないのが...。
一度パーティションビューみたいなものを作って試してみたんだけど、PostgreSQLの
プランナはあまり良い実行計画を出してくれなかったんでやめた。
656 :
デフォルトの名無しさん :03/04/01 23:28
>>654 M$は想定外みたいだけど
一応言っとく。
絶対に、SQL鯖はつかうなよ。
つーか、絶対にWindow$は使うなよ。
一生後悔するぞ。(体験者談)
657 :
デフォルトの名無しさん :03/04/01 23:38
他の皆さんに比べたらかなり小規模ですが・・・。 4000万件くらいのテーブルは日常的に扱ってます。 一番注意しているのがインデックス。それだけ。 性能はまったく問題ないです。 Postgres 7.2.3です。
>652 ほー。そういうやり方もあるの。でも俺んとこじゃできんなあ。それは。 俺はインポートって本当に復旧作業でしかやったことない。 ところでインポートって時々失敗しない? おれは今まで2回そういうことがあった(両方ともオラクル8.1.6)。エクスポートは警告なしで終了したのに、だ。 もちろん失敗率は問題ないぐらい低いとは思うんだが。
ここはKnow-HowについてDebateするThreadか。 まだ俺はBeginnerだから、用のNothingなThreadだな。
>>659 お前にとってこのスレッドが用無しなのではない。
このスレッドにとってお前が用無しなのだ。
鮭の骨が歯ぐきに刺さったじゃねーかよ!
>656 後学の為に、その理由をキボンヌ。
663 :
デフォルトの名無しさん :03/04/02 15:36
Web-DBなシステムを、複数人数で開発しているときの話なのですが、 誰かが「ちゃんとデータが入ってないとエラーになる」テストをしていて、 他の誰かが「データを入力する」部分のテストをしていると、 無いはずのデータが存在したり、あるはずのデータが消えたりして、面倒です。 開発メンバーで細かく声を掛け合う以外に、うまい方法はないでしょうか。
>>661 MSだからに決まってるだろ?
他のDBサーバーさわってない奴のセリフさ。
>663 ローカルWeb鯖で動かすとか。 >664 良スレなんで燃料はいりませんよ
>>663 ローカルにサーバを持つように作るべき。
共有サーバなんてやっちゃだめ。
667 :
デフォルトの名無しさん :03/04/02 20:13
>>661-662 毎月のようにOS、IIS、DBのパッチが
出てきてそのたびにアプリの全打鍵。
再起動がかかるパッチが多いから
業務止めれる休日にやるしかない。
ここ1年でパッチ適用のために休日出勤したの20回。
SQL ServerのServicePack適用したらなぜか
OSの挙動がおかしくなってシステムバックアップからリストア。
調べたが問題わからず翌月再適用。
先月のも適用した直後にプロダクトによっては
ブルーバックで起動しなくなると不具合があるという情報が...
運良く不具合のあるプロダクトじゃなかった。
平日はオンライン処理での過負荷でDBサーバがハングアップ。
休む暇なし。
俺のこの1年の恋人はM$サーバ10台。
668 :
デフォルトの名無しさん :03/04/02 22:20
ファイルですむようなシステムに DBを持ち込んで、無駄にハードウェアリソースを食わせようとする バカがいるんですが、 このバカにそれを理解させるにはどうすればいいでしょうか?
669 :
デフォルトの名無しさん :03/04/02 22:26
670 :
デフォルトの名無しさん :03/04/02 22:26
>>668 バックアップ/リストアがめんどくさいってことで。
>>663 接続時のユーザを変えてスキーマーというものをうまく使おう。
>>668 っていうか日本の雇用率に貢献してる良い人じゃん。売れるもんは売っとけ。
674 :
デフォルトの名無しさん :03/04/02 23:27
>>668 4CPUのサーバに
Windows 2000 Advanced Serverのプロセッサライセンス
Oracle 9i のインターネットライセンス(ってまだあったっけ?)か
プロセッサライセンスかで
見積もりだせばいいじゃん。
考え直すと思うよ。
675 :
デフォルトの名無しさん :03/04/03 13:00
>>674 Linux&Postgresでとか言われる罠
そういう無駄な知識は持ち合わせている罠
>>675 MyBase(Delphiとかに付いてるやつ)でも教えてやれば
ファイルベース(通常はXML)のDBだから軽くて邪魔にならないよ
677 :
デフォルトの名無しさん :03/04/07 16:50
PostgreSQLって一時テーブルみたいなのはありますか?
Oracleでさえ9になってから出来たようなものが postgresにあるわけない。
一時表はOra8iにもあったような気がするけど…? もしかして釣られたか?
>>680 俺 postgres しか使ったことないのね。
で、いつかは Oracle 使いたいなー、と思ってる。
そんな俺の心の隙間を突く巧みな煽りを入れて、
情報を引き出そうとする
>>678 は煽りがうまい、ってことで。
682 :
デフォルトの名無しさん :03/04/07 20:36
>>680 8iにもあったよ〜
8i Platinum MASTERより
8iってことは8までなかったのか? SQL Serverはもっと早く実装していたぞ。
>>683 そうなんだ〜
つーか、8iしかしらねえよ。
8にあったのかどうかは
昔からシステムやってるおっさんに聞いてくれ。
しかし、SQL鯖は読み取り一貫性すら保障できてないくせに
その辺は一応実装してんだね。
大抵のRDBMSには昔からアターヨ>TEMP表 Oracleに対する要望の上位だった。 8でようやく実装。あるのが当たり前だけに Oracleに無いことに気付いたときにはビクーリですた。
8にはないでしょ。なんかi付けた良く分からんバージョンから。
>>685 > しかし、SQL鯖は読み取り一貫性すら保障できてないくせに
あんたの書いたSQLが悪いだけ。
689 :
デフォルトの名無しさん :03/04/07 22:05
>>685 読み取り一貫性以前の問題で、
更新中の未コミットのレコードを読むことは出来ないじゃん(藁
(ダーティリードかコミット/ロールバックを待つかすれば出来るけど)
どっちにしても、使えねえのには変わりねえけどな!
> 更新中の未コミットのレコードを読む ゴミデータを読めちゃうって事だね。Oracleできちゃうの? 信頼性ねーな。
>>691 OracleはREAD UNCOMMITEDはできない。
他のDBMSには、あえてできるものもあるらしい。
単なるREAD COMMITEDでもロックが発生してしまう
ようなDBMSの場合らしいが。
>>689 > (ダーティリードかコミット/ロールバックを待つかすれば出来るけど)
すんまそん。
そのこと言いたかったのだ。
更新中のレコードはダーティリードじゃないと読めないじゃん。
そうすると読むタイミングと更新のタイミングによって読み込まれる結果が
変わってくるから一貫性は保証されてないんじゃないの?
言葉の意味取り違えてるのかな?(ちょっと弱気)
>>691 ボラクルは未コミットのレコードについて
・データ変更中のユーザーは変更中のデータを読むことが出来る
・それ以外のユーザーは変更前のデータを読むことが出来る。
SQL鯖はゴミを集めるしか読む方法は無い
695 :
デフォルトの名無しさん :03/04/07 23:28
結局どのDBMSもつかえねえのか? つーか、こういうシステムにはこのDBMSが向いてて このDBMSが向いてないってまとめたサイトとかないの? DBMSの長所・短所の一覧だけでもいいんだけど。
698 :
デフォルトの名無しさん :03/04/07 23:51
>>663 ローカルだとスキーマ変更の反映漏れが怖いんだよなぁ…
チームごとにインスタンス分けて、個人ごとにユーザ分けるとか。。。
それでも反映漏れはある、か…。
話は全然変わるんだけど、SYBASEのSQLAnywhereってまだあるの?
699 :
デフォルトの名無しさん :03/04/07 23:57
>>668 DBアプリはDB(SQL)でデータ操作する方がコーディングがラクだからじゃないの?
一般ファイルだとWinAPIゴリゴリ書かないとダメだし、
そもそもそれじゃデータ操作面倒くさいじゃん
700 :
デフォルトの名無しさん :03/04/08 00:01
701 :
デフォルトの名無しさん :03/04/08 00:04
>>699 XMLを記述したテキストファイルをつかって
RecordSet使うってのは反則?
実際はコーディングが結構面倒だけど(藁
>>697 (694)
方法もなにも
>>694 の仕様と同じだろ。
table_a
カラムa b
データ1 x
で
ユーザAが
begin tran
go
update table_a set b = 'z' where a= 1
とトランザクション使用の更新をかける。
ユーザAがcommitするまで
ユーザBが以下のSELECT文を発行すると
select b from table_a where a = 1
は
b
x
ユーザAは上記のSELECT文を発行すると
b
Z
だけど。
オマエはどんなSQL鯖を使った夢をみたんだ?
使ってないと同じくらいの知識とか思えないが。
Oracleが読み取り一貫性を実現しているのはそれはそれで立派だとは思うが。
しかし、使うとやばいデータを引っ張ってくるのには何の変わりもないわけで、
for update が今日も元気に働いている。
>>695 Oracle使いのためのSQL Server入門みたいなムックが出ていた。
とりあえずの比較用に立ち読みでもしてみたら?
>>699 ファイルで済む規模なら、XMLでいきゃいいじゃん。
ロジックは書きやすいし、XPathも併用すれば普通に使える。
>>703 そりゃ単にその案件が「リピータブルリードが保証されないとやばい」
設計になっていたというだけだろう?
パフォーマンスやデッドロックの事を考えれば、むやみに高い分離
レベルを使わずにすむよう考えるものだがな。
あーっはっはっは。 ロックだトランザクションだと難しい事を考えるから複雑になるんだよ。 瞬間的には1人の人間しかアクセスしていないんだからそんな事気に せず作ればいいじゃないか。 mdb共有でC/Sだと言い張るうちのバカSヨなら絶対こう言う。
>>705 > mdb共有でC/Sだと言い張るうちのバカSヨなら絶対こう言う。
Consultant/Slave?
707 :
デフォルトの名無しさん :03/04/08 13:06
>>705 瞬間的に1人の人間しかアクセスしないような
軽いシステムしか作ったこと無いなんてうらやましいね。
今のシステム瞬間的に最大10人はDBにアクセスしてるよ。
WEBのセッションなんて同時に500ぐらい張られてるし。
瞬間的に1人の人間しかアクセスしないような軽いシステムだが、 馬鹿な管理者でも管理でき(半年に一回くらい馬鹿じゃない管理者がメンテできれば良い) できるだけ金をかけず、なおかつWindowsで動かすには どんなDBを使えば良いだろうか?
>708 Excel
Firebirdなら管理者そのものが不要だろ
713 :
デフォルトの名無しさん :03/04/08 19:23
>>708 アクセスでいいじゃん。
バックアップも簡単だし。
アプリでアクセスするのも簡単。
厨房プログラマにはもってこいだよ。
どう考えてもCSV
Windowsのレジストリを活用するという手も!!
>>708 テキスト形式で公開して gooooooooooooooooooooooooooooooooooooooogle 検索
最強
namazuがいいかもね。
(^^)
719 :
デフォルトの名無しさん :03/04/17 17:33
Access で NOT NULL 宣言したカラムって、ある日突然ブランク (長さ 0 の文字列) を受け付けなくなるのか?
∧_∧ ( ^^ )< ぬるぽ(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
723 :
デフォルトの名無しさん :03/04/21 03:43
初心者プログラマーなもので基本的な質問で恐縮です。 現在W2kでASPとCOM+とSQL Server2000を使ってWEB系のシステム作っています。 (ASPとCOM+が動くサーバは複数(ロードバランサ使用)でDBサーバは1台です) この場合DBサーバのMS DTCを使用しないとまずいのでしょうか? また、ロックの制御はCOM+のトランザクション設定だけで大丈夫なのでしょうか? COM+のプロパティでトランザクションを未サポートにした場合でも with(nolock)などのヒント句を使用しないとselect文で共有ロックが使用されているようですが、トランザクションとロックは別にして考えないといけないのですか? SQL Serverの場合SQL文のヒント句でロックの制御を行っているようですが...
VB6.0 + JetDB + ADO で sql = "CREATE TABLE HOGE(" sql = sql & "Year CHAR(2)," sql = sql & "Time CHAR(36)" sql = sql & ")" vCom.CommandText = sql vCom.Execute などとすると、"フィールド定義の構文エラーです。"(-2147217900)が発生します Year とか Time がそのまま使えないキーワードの用ですが どうやってエスケープしたらよいのでしょうか シングルクオートで囲むと、そのままシングルクオートを含んだフィールドが生成されてしまいました。
>>725 Accessからは、その名前で作れるんですよ
いや、もちろん、不可能であることが明確になれば 妥協策を検討せざるを得ませんが・・・
728 :
デフォルトの名無しさん :03/04/21 13:51
予約語を使うやつはアフォ
なんか、
>>724 に話題を持っていかれてしまったようですね。
[year]
>>719 それってPostgreSQLと同じアーキテクチャだったりするよ。
733 :
デフォルトの名無しさん :03/04/22 03:09
>>732 つーか MVCC (多版型同時実行制御) 実装してない DB の方が少なく感じる。
たまーに ODBC 経由で Access 叩くツールとか作ると、楽だねぇこの DB。
735 :
デフォルトの名無しさん :03/04/22 19:42
ごめん、ほんとにごめん 主キーってのはユニークじゃないと駄目なのよね? 皆さんはどうやって動的な主キーを決めてるのでしょうか? (例えばそのレコードが作製された日付+時間とか?) また、ユーザーがレコードを編集するとき、主キーは 編集できないようにしたほうがいいよね? ほんとにごめん、、、
謙虚杉。悩むくらいなら連番 主キーは編集も更新もしない
YYYYMMDDHHMMSS0000 0000 は 1 秒間に採番される最大想定数より余裕を持たせたシーケンス番号。
ありがとうございます やはり連番か時間がいいみたいですね 連番だとSELECT MAX(主キー) FROM list とSQLを発行して最大値+1くらいで続けていこうと 思ったのですが、仮に20レコードあってその中の 15レコードがユーザによって削除された場合 (・・・12、13、14、16、17、18、19、20) となり15が無駄に空きますよね? こういうときの15が空きという情報の取得方法を 教えていただきたいのですが、お願いできないでしょうか?
>>738 ・番号は詰めない(削除後は再利用しない)
・レコード生成するたびにそんなクエリは行わない (737 の方法とかで済ます)
主キーを「抜けの無い連番」という別のものと混同・代用しない方がよいよ。
初歩的すぎるけど一応スレの趣旨にそって突っ込んどく。
ほんとうに有難うございます。 日付+時間だと030422205460256と数字で 認識させるとものすごい数になるのでやめようと 思ったのですが、文字列で試してみようと思います >>主キーを「抜けの無い連番」という別のものと混同・代用しない方がよいよ。 >>初歩的すぎるけど一応スレの趣旨にそって突っ込んどく。 どうもやりはじめたばかりでいろいろ考えてしまい 変な方向に行きそうでした ご忠告いただき有難うございます。
741 :
デフォルトの名無しさん :03/04/22 21:31
>>739 だよねー、これやっちゃうと
外部キーとして引っ張って来れなかったりする
なんていう寒いバグと友達になれるんだよね
>>735 RDBMSによるが、SEQUENCEやらIDENTITYやらが使えるのなら使ったほうが
楽だよ。
よさそうな情報有難うございます 本当にやり始めたばかりなので自分が何のRDBMS をしようしているのか(RDBMSとは何を表すのか) わからず申し訳ございません 私はDelphiでParadox7というものを使用 しているのですが... 明日SequenceとIdentityが使えるのかどうか 早速調べてきます。有難うございます
パラ毒巣って久しぶりに聞いたがまだ売ってるんだ。
>>743 あれあれ?
Paradox7ならカウンタ型が使えるでしょ?
>>735 >>745 さんの言うとおりParadoxならカウンタ型があるので使用す
るとよいでしょう。
ただ、カウンタ型等の無意味なユニーク値をプライマリキーとしなければな
らないテーブル定義に問題はないでしょうか?
今まで手作業で行っていた業務の移行でしたら
「請求書の束から人間はどうやって一意の請求書を見つけていたか」
請求書番号ですか?
「受注の際、何を基準に新規顧客と得意先かを判断していたか。」
名前や名前と住所・電話番号等の組み合わせ?
そういうものがプライマリキーとなりえます。
当然Sequence値をプライマリキーとする場合も多々ありますが、文面よ
り入門者と見受けましたので、テーブルの見直しもありかなと思いあえ
て書かせていただきました。
またもや良い情報を教えていただき有難うございます
早速カウンタ型を調べたところ、主キーにぴったりだと思い
利用しようと思います。
>>746 さん
>>今まで手作業で行っていた業務の移行でしたら
>>「請求書の束から人間はどうやって一意の請求書を見つけていたか」
>>請求書番号ですか?
>>「受注の際、何を基準に新規顧客と得意先かを判断していたか。」
>>名前や名前と住所・電話番号等の組み合わせ?
>>そういうものがプライマリキーとなりえます。
私も最初そう思ってましたので入力するコード番号+入力日付を主キー
として作成してたのですが、コード番号、入力日付はやはり人が入力する
ので、のちのち入力ミス等があった場合、コード番号が修正され
そうなると主キーとコード番号の関連性がなくなり主キーの変更が
起こってしまうと思ったので、まったく関係ない番号をとろうと思ったのです。
ご指摘有難うございます。
>>747 > コード番号、入力日付はやはり人が入力するので
業務アプリを設計するならここを改善しようよ(^^;
>>735 まず業務分析からはじめよう。
コンピュータに向かうのはその後だよ。
コードの採番変更が各自自由に出来るということは、コードの同じ伝票が
複数存在しうるということ?そして、誰もそれを知ることも無く管理もされて
ないの?
それはDB以前に業務としてかなり深刻な問題だよ。
ちなみにプライマリキーは更新可能ですよ。
更新しようとする値が重複していないかのチェックはDBでしてくれるのだから
コードが最適だと思うけど。
現在はどういう基準でコード振ってるの?
>>749 さん
コードは1年間は絶対同じものがこないんです
コードの採番変更が自由にできるというのではなく
コードは伝票ごと既に決まっているのですが、そのコードを伝票から
DBに入力する際、間違って入力してしまい、その後入力ミス
を修正するときに、最初に誤って登録したコードから生成された
主キーだと、修正したコードとの関連がなくなるのでは?
と思ったのです。
入力ミスしたコードを修正する際に主キーも修正すれば、
と最初は思っていたのですが、736さんから主キーは変更しない
と教えていただいたので、まったく関係ないユニークなものに
しようと思ってるのですが、、
>>750 (´-`).oO(伝票にバーコードを印刷しておけばいいのに)
>>751 バーコードリーダをシステムに組み込むのかえ?
高くなりそうだけどいかほどでできるん?
>>750 もう一歩踏み込もうや。
伝票ありきで、それをDBに突っ込むんではなくて
DBで採番した伝票を作成するようにはできんかね?
>>753 に同意。
伝票発行はシステム化しないの?
>752 バーコードリーダなら1万円ほどから揃ってますよ。 業務で使うなら耐久性も考えてもう少し上のグレードが欲しいところですが。
おまいら、客先業務を勝手に定義すな
>>757 >それもありだが
1)より良いものを提案する場合
2)実現できないから妥協する場合
この話の流れでは後者のにおいがぷんぷん。
>>756 の意見は基本姿勢として当然持つべき考え方。
なんか私の話にいろいろ意見していただき有難うございます。
バーコード化とか私は思いもしなかった発想が聞けて、実現できるかは
置いといて良かったです。
今回DBを作成することになったのは、私自身の仕事がらみではなく、
知り合いが伝票管理をしていて、客先から送られてくる伝票を
バインダでとじ、何かあるたびにそれを開いて目で探してるので
どうにかならないか?ということで作成することになったのです。
それまでDBを作成したことがなく、(本職はPGではありません)、覚えながら
の作業になっており、大掛かりなものでもなく、その知人の個人管理
でしか使用しないようなものです。なので、良い案なのですが、
バーコードとかはちょっと無理そうな話で、申し訳ないです。
今日、カウンタ型を試してみました。が、どうもParadoxのカウンタ型は
トランザクション中にエラーがあった場合カウンタが戻らず
新しいカウンタがつけられる?などの不具合があるということを
Webで知りまして、それとカウンタ型にINSERT命令が使えないと
Delphiにいわれたこともありカウンタ型を使用するのは諦めました
それで主キー作成の為の連番作成方法なのですが、最初に書いたように
ダミークエリーにMax(CodeNo)で最大値を求めて+1する方法しか
思いつかず、今日はそのやり方で進めてみましたが、
>>739 さんが
おっしゃるとおり番号を知るためだけにクエリーを使うのも駄目そうだし、
いずれリストが大きくなったとき時間がかかったりしそうで、
どうしたものか考えてます。
>>759 カウンタ型(シリアル型、オートナンバー型)のINSERT文は
id dataとあるなら
INSERT INTO db(data) VALUES('oh,yes...')で出来るような気がする・・・
てかACCESSならそうだし
>>759 本当に「連」番である必要があるの?そうでなければ単純にシーケンスを使えば
良い話だが。
で、もし本当に必要あるのなら、採番処理の常套で、特定のテーブルで
次発行コードを管理するという方法がよく使われる。
コードを発行するトランザクションは最初にそのテーブルをロックして、
処理が成功したら+1更新する。uniquenessをDBMSが保証してくれる
わけじゃないから、めんどくさいけどね。
>>735 カウンタ型のINSERTは
>>760 の通り。
客先から送られてる伝票ならすでに伝票番号はついてるんじゃないの?
あと、何故抜けのない連番が必要なの?教えて。
763 :
デフォルトの名無しさん :03/04/25 09:07
>>762 伝票番号の件は
>>750 に書いてあるのでは?
あと、抜けのない連番が必要とはどこにも書いてないような。
必ずしも連番にはならないことをWebで発見したってだけじゃないの?
>>763 >>738 の文面からは「連番がほしい」と受け取れる。
>>759 を読んでも「諦めた」理由に「カウンタが戻らない」ことをあげている。
(メインの理由は「INSERTができない」だが)
やっぱり「連番がほしい」と受け取れる。
こんばんは
なんか、皆さんを混乱させてしまったようで、申し訳ないです。
伝えたいことが文章にできなく、ご迷惑おかけします。
>>762 ,764さん
特に抜けのない連番である必要なんてないんです。
最初は連番にしていて、そのレコードが削除されたとき、主キーが
歯抜けになり、感じ的になんとなく嫌だなと思っただけでして、、
また736さんが書かれた”悩むくらいなら連番”というが
あったので連番で行こうと思っただけなんです。
最初は伝票コード+日付でいってたのですが、登録する際の入力ミス
→訂正で主キーとの関連がなくなり、そのとき主キーも変更しよう
と思ったのですが、これもなんとなく、まずそうな感じがして
735で主キーの変更〜を質問させてもらったのです。
その後の736さんの書き込みの”主キーは編集も更新もしない ”で
DB登録時の入力ミスの恐れがある以上伝票コード+日付を
主キーとするのはまずいと思ったのです。
でカウンタ型を諦めた理由なのですが
ttp://www.users.gr.jp/ml/archive/delphi/47178.aspで Paradoxにおけるカウンタ型の不具合が記載されていたからです。
アドレス書くのはまずいかと思ったのですが、文章で書けるほど
理解してないので、本当にすみませんがURL記載させてもらいます。
>>765 Delphiでの開発ならFirebirdへの移行も検討してみるといいかもね〜
>>765 それだけじゃ不具合かどうかもわからない。Paradoxのカウンタ型ってのがどんな
仕様か知らないけど、連番生成用の仕組みは普通インクリメントされていくだけ
で空番を使う事はしないし、トランザクションをロールバックしてもインクリメントされて
しまう場合もある。それがいやなら自分でなんらかの連番取得用の仕組みを作る
必要があるけど、その程度の用途ならおすすめしない。
>>767 でも、deleteしたものをrollbackしただけで値が変わってしまうのが
不具合じゃなくて仕様だったらすごくやだなぁ。
>>768 Paradoxは所詮デスクトップDB
トランザクションを気にするのならまともなRDBを使うべき
>>769 前から思ってたけど、DBMSにあるまじき名前だよね。
>>768 記事を読むと、「レコードを削除して空いた番号を使ってくれない、任意の値も
設定できないので使いづらい」という意味のようですが。
普通そういうもんでしょう。それだけ見ると不具合ではないと思います。
>>771 DELETE後のROLLBACKでプライマリキーが更新されるのは不
具合ではないですか?
773 :
デフォルトの名無しさん :03/04/28 22:12
>>772 DELETE を ROLLBACK して更新される?
なんか意味不明だな。
INSERT を ROLLBACK しても、振り出されたシーケンスが元に戻らない、
というのならわかるが・・・。
>>766 が言ってるとおり、
BCBもしくはDELの場合Firebird+IBX(IBO)が最強だと思うけど。
既存のParadoxやACCESS+JETで作られてるものは、すべて乗り換え
るべきとまで思ってるけど。
777 :
デフォルトの名無しさん :03/04/29 08:49
>>776 「何故」DelphiならFirebirdが最強なのか。
「何故」ParadoxやAccess+JETではダメなのか。
そこを説明しないとただの最強厨だよ。
>>776 ,778
IBXはFirebird非対応だよ。
IBOは日本語の情報皆無だよ。
Firebirdはマニュアルないよ。Interbase6のマニュアルを流用するしかないよ。
まだ完全なODBCドライバもOLE DB Providerもないよ。
Interbaseならまだしも、FirebirdはDelphi使ってるからと言って無条件に
薦められる物ではないよ。
>>777 ParadoxやJetがなぜだめなのか解説しないとわからないか?
>>779 どういう使い方をするとFB1.0+IBXで不具合が出るのか教えて
もらえますか?
英語は読めませんか?
>>780 ParadoxやJETなんて使った事無いから知らないよ。
FirebirdにIBX使って不具合が出るかどうかなんて知らないよ。
不具合の有無は関係ないよ、IBXはFirebird非対応で今後対応することもないと
作者が明言している事が全てだよ。
英語が読めない人もいるよ。
自分もすらすらとは読めないから翻訳ソフト併用でがんがってるよ。
それに、英語も含めてちゃんとしたマニュアルが存在しないことは事実だよ。
ごめん、本職だと思いこんでたから聞いただけ。
便乗なのですが 1トランザクション開始 2一つ目のテーブルにカウンタ型でレコード追加 3二つ目のテーブルに1で追加したレコードのカウンタ番号を使用しレコード追加 4トランザクション終了 で2で自動振り当てされたカウンタ番号は3で取得するにはどうすればいいの?
>>783 せっかくテーブル分けてるんだから
UPDATE TBL SET ID = ID + 1
ってやって常に1レコードだけにしとけよ。
てゆーか2つ目のテーブルのカラムをカウンタ型にしろよ。
で、質問の答えだけどSELECTで普通にとれるけどINSERT+副選択つかえよ。
DBMS側で生成したカウンタ型なら、MAXじゃだめ?
いや、3の状態だと一つ目のテーブルのコミットが終わってないから SELECTは使えないのでは? 一つ目のカウンタを主キーで二つ目のテーブルとリンクさせたいんだが
>>786 同一トランザクションでしょ?
>SELECTは使えないのでは?
憶測?試した?
MAXで取得するならSERIALIZABLEが必要だと思うなぁ。 カウンタ型なんてものを使わずに、素直にSEQUENCEを 使ったほうがすっきりすると思うよ。
まずDBMSを書けよヴォケ
>>788 SEQUENCEって使えないDBMSもあるでしょ。
カウンタ型も然り。
つーか、カウンタ型とSEQUENCEを両方実装してる
DBMSってどんな奴がありますか?
>>790 カウンタ型やオートナンバーの類はともかく、シーケンスはたいがいの
DBMSにあったと思ったが。まぁ俺もOracleとDB2とSybaseとPostgres
しか使っていないんで、Paradoxとかでどうなのかは知らないが。
Paradoxの比較対象といえた(過去形、Paradoxの方がね)のはAccess まともなRDBと同等のことができると思うのは期待しすぎというもの 某自身もはやParadoxでの開発は推薦していない (でもローカルで使うと案外便利なのでOracleあたりと併用する手はある)
>>774 >真偽のほどは知らんけど、その2つの記事で取り上げられて
いる問題とは別物。
まあそれはそうなんですが、そのスレッドの元々の話題は先の二つの記事でしょ?
で、「ありうるかもしれない」l根拠がその記事の、
>なにせ Paradox ではトランザクション内で削除されたレコードを Rollbackした
>としても、元のカウンタ値には戻りません (新たな値になってしまいました。す
>っごく不便です)。
これでしょ? これ意味わかりますか? 不具合だとするとどういう不具合だと思います?
私は元々不具合なんてなかったんじゃないかと思うんですが。
#というか、735さんはどう思っているのだろう
>>793 そりゃどう見ても不具合だよ。(某が仕様だって言えば仕様なんだろうけど)
ロールバックの意味分かってるのかえ?
795 :
デフォルトの名無しさん :03/04/30 09:26
>>794 どこら辺が不具合なの?
DELETE を ROLLBACK って言ってるが、
そもそも DELETE ならシーケンスが進むことはあり得ないんじゃないか?
私は postgres のシーケンス型・シリアル型しか知らないし、
pradox のカウンタ型がどういう機能と使用上の制限を持つかをわからないので、
何ともいえないけど・・・。
DBアプリ? ドラゴンボールのゲームですか? 発売はいつですか? ハードは何ですか?
>>795 > そもそも DELETE ならシーケンスが進むことはあり得ないんじゃないか?
進むはずのないカウンタ値が進んじゃうって事じゃん。
不具合でしょ?
798 :
デフォルトの名無しさん :03/04/30 10:00
>>797 INSERT じゃなくて、DELETE 発行したときも シーケンスが進むという話か。
じゃあ、ROLLBACK の有無は関係ないの?
>>798 わかんない人だなぁ。
ロールバックすると削除されたレコードは復活するけどカウンタ値のフィールド
は以前の値じゃなく進んじゃってるって事じゃんか。
>>799 そういうことか…それは想像の範囲外でした:-)
それじゃACID属性も満たしていないことになりますね。間違っても主キーには
使えないですね。
で、これほんとうなんでしょうか…ちょっと信じられないんですが。
# Paradoxを使うことはないと思うので、単なる興味です
Paradoxのカウンタ型は主要なテーブルに直接使うのではなく 固有ID生成専用のテーブルに使うのがいいのかな (主要テーブルへInsertするたびにID生成テーブルへInsertし そのIDを使用したらすぐに削除してしまうとか) これなら主要テーブルでDeleteをRollbackしても問題ないはず
すいません、質問させて下さい。 クライアントにAccess2000、鯖側にSQLServer7.0でシステムを組んでいるんですが、 クライアントから複数のテーブルを参照するクエリを組んだりすると、 ODBCでテーブルをリンクしているものだからコネクションの上限に すぐ達してしまうようなんです。 で、コネクションの上限を増やしたいのですが、これは どこのメニューから行えばよいのでしょうか? それともメニューでは無く、インストール時に出るあの接続アカウントの和を設定する部分でしか 設定できないのでしょうか…(ライセンスなんちゃらの部分)。 大雑把な質問ですが、ご教授頂ければ幸いです。
すんませんageます。
文章を変えて、再度質問させて頂きます。 意味不明だった…。 SQL Serverのインストール時に「クライアント アクセス ライセンス モード」において 「同時使用ユーザ数」を「5」にして選択したとします。 で、この設定で使ってみて後から足りなかったとなった場合、インストール後も 追加可能なのかどうか?と言う事なのですが…どうでしょう。 もしくは新しいユーザ数で再インストールするしかないのでしょうか?
806 :
デフォルトの名無しさん :03/05/01 20:34
807 :
デフォルトの名無しさん :03/05/01 23:26
いまどきODBC? いまどきAccess?
808 :
デフォルトの名無しさん :03/05/02 00:27
>いまどき ( ´,_ゝ`)プッ
自動連番型は扱い難いよね。 メンテの時にテーブルを再作成して何気なく放り込んだりすると カウントアップされてしまう。 これが主キーだと参照がはずれる。 と、3日まえにやらかしたミスを自慢げに語ってみるテスト。 モウレンバンツカワネー プンプン!
810 :
デフォルトの名無しさん :03/05/02 06:23
>>805 何万人でも追加可能です。コンパネのランセンスマネージャ使います。
ただしライセンスは購入するように!
無計画に何気なくテーブルの再作成をしたりする業者には 二度と発注しないからそのままでもいいよ
とりあえず、ノウハウをまとめた書籍とかosiete
oioi
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
815 :
デフォルトの名無しさん :03/05/31 01:05
DB設計できるようになりたいんだけど、なかなか実務で やらせてもらえる機会がないので、ちっとも身に付かない。 独学で身につけた人っている?
実務でやらせてもらえる機会がある人でないと (DB設計を身に付けるのは) 難しい
>>815 とりあえず身の回りにある業務を自分でモデリングしてみ。
モデリング技法は本が出てるから研究してください。
「業務別データベース設計のためのデータモデリング入門」 「生産管理・原価管理システムのためのデータモデリング」 「実践的データモデリング入門」 このあたりの本はどうなんだろね。データモデリングって奥が深そう。
プログラムはリファクタリングできても、DBはリファクタリングできないからなあ。 DBの設計が糞な時は、ビューとプログラムで吸収するしかないな。 OODB使えば変わってくるのだろうか。
820 :
デフォルトの名無しさん :03/06/29 18:09
age
保守
823 :
デフォルトの名無しさん :03/07/09 23:49
ノウハウを授けてください。 追加・更新・検索を毎日のように行うシステム。 普段使う検索範囲は過去2ヶ月分ぐらいが多い。 更新した場合その履歴を管理したい。 今後の分析に使うのでデータは残しておく。 テーブルの行数が1ヶ月に数万件程度増える。 こういったシステムだと 数年後には検索スピードが増大することになると思います。 皆さんはこういったシステムをどうやって設計しますか? (ロードバランサやハード系の変更以外で) 2ヵ月分のテーブルと、それ以外のテーブルの二つに分ける? (過去2ヵ月以外に検索範囲が及ぶ場合UNION ALLする) 2ヶ月分のテーブルと、全件のテーブルの二つに分ける? (定刻起動で別テーブルのデータ削除) 数ヶ月ごとに別テーブルにする?
824 :
デフォルトの名無しさん :03/07/09 23:53
>>823 過去2ヶ月以降のデータの粒度は落としちゃダメなのかよ?
825 :
デフォルトの名無しさん :03/07/10 01:14
>>824 粒度を落すとは具体的にどういう処理をするということですか?
[間違い]
(定刻起動で別テーブルのデータ削除)
↓
(定刻起動で2ヶ月分テーブルの範囲外データ削除)
824ではないが。。。。 サマリーデータを作ってしまう or データを間引く(毎分のデータを10分ごとのデータのみ残すなど) つーことだと思われる。
827 :
デフォルトの名無しさん :03/07/10 20:55
>>824 なるほどそんな方法もあるんですね。
ところで検索用の別テーブルを持つって方法は一般的ですか?
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
831 :
デフォルトの名無しさん :03/07/22 23:44
T字型ER技法の作者さまのセミナー(無料)を受けたのですが、 「LIKE を使って 部分一致で検索かけても秒速」とか言ってました。 先頭部分だけなら、該当カラムにインデックスを張ればいいのですが、 先頭以外の部分一致だと、どうやって「秒速」が実現できるか分かりません。 どーしてると思います? すみません、どなたか教えてください。
833 :
デフォルトの名無しさん :03/07/23 11:34
>>831 SISがフレームワークとセットで押してる手法だっけ?
実際のとこどんなもんなんですか?
836 :
デフォルトの名無しさん :03/07/26 01:04
>835 >SISがフレームワークとセットで押してる手法だっけ? そうですね、楽々フレームワークだったかな。 >実際のとこどんなもんなんですか? いやぁ、書籍を中心に勉強しているのですが、 よく分からないのですよ。 本当の所は、セミナーやコンサルを受けたりしないと わからないのかなぁという気がします。
>>831 それは前方一致(または後方一致)の場合のみ。
本を読んでも書いてある。Indexの特性を活かした場合のみ
というのはT字形に限らず、RDBなら当然。
%キーワード%のような曖昧検索では遅くなる。
ちなみにT字形は漏れも10年ほどやってきてるが
実装周りははっきり言って内容が古いと思われ。
838 :
デフォルトの名無しさん :03/07/26 18:17
ありがとうございます。 >それは前方一致(または後方一致)の場合のみ。 ここでいう後方一致とは、具体的には?? %キーワード なるパターンですか? これでもIndexって使われるんですか? >ちなみにT字形は漏れも10年ほどやってきてるが >実装周りははっきり言って内容が古いと思われ。 そうですか。 私は、書籍「T字形ERデータベース設計技法」と「論理データベース論考」を読み始めたところです。 リソースとイベントなる考え方は、役に立ったかなぁ・・・。
>>838 インデックスが使われるかどうかは最初っから決まっていて,
LIKE演算子なら先頭にワイルドカードを指定している検索の場合は使われない。
言い換えると,LIKE演算子の場合は,前方一致検索のみインデックスが使用される。
WHERE NAME LIKE 'hoge%'ならインデックスは使われる。'%hoge'なら使われない。
>>837 後方一致でもインデックスが使われるRDBMSってある?
841 :
デフォルトの名無しさん :03/07/29 06:48
843 :
デフォルトの名無しさん :03/07/29 13:06
>>842 どっかで聞いたことはあるが、詳しいことは忘れたんで
知ってるなら俺に教えてくれ。
845 :
デフォルトの名無しさん :03/07/30 00:01
俺にも・・・。
もしかして、Oracleの逆キー索引の勘違い?
847 :
デフォルトの名無しさん :03/07/30 06:35
推薦図書スレに書いたらスルーされてしまったのでこちらで。 C言語関連の書籍に話題が集中してたからか。 --- データベースに関する書籍を漁っているのですが、開発を始めるにあたってのRDBMSの選択から 仕様書の書き方、開発方法の選定、スケジュール組み、 更には運用方法、障害からの復旧、データ移行…など、 「自社で開発し、運用する」システムに特化した内容の書籍などございますでしょうか? 開発要員が私一人なので、何か参考になる書籍があればと思っているのですが…。 Oracle、SQL Serverなどの例が載っていればなお良いです。 どなたかご存知でいらっしゃいましたらお教え下さい。
>849 >運用方法、障害からの復旧、データ移行… であれば、そのRDBMSのヘルプ及び専門書籍でカバーできると思う。 が、 >仕様書の書き方、開発方法の選定、スケジュール組み になるとものすごく広い範囲の話になるので、全てをカバーできるような書籍は無いと思われ。 ノウハウとして蓄積されて中々表に出てくるような物ではないから。
そのノウハウを出してほしいな。
>>850 さん
確かに運用に関する事であれば、それぞれのRDBMSに関する書籍で大丈夫ですね。
どうしても1冊で完結させようとしていました。
>>ノウハウとして蓄積されて中々表に出てくるような物ではないから。
確かにその通りで。
>>851 さんの意見と被るのですが、
それらのいわゆる「DB関連開発者のノウハウ」が載っているような
書籍があればと思っていたんですが、流石に無いですかね。
パブリックなものでなく、どこかの誰かが「俺はこうして作っている」みたいな感じの
内容であれば良いのですが…
>>852 さん
リンクどもです。参考にしてみたいと思います。
これはなんだか本にして読みたい感じであります。
(^^)
■Aというビュー −−−−−−−−−−−−− | ID | 状態 | 子 | −−−−−−−−−−−−− | 10 | 元気 | A | −−−−−−−−−−−−− | 20 | 病気 | B | −−−−−−−−−−−−− | 10 | 元気 | C | −−−−−−−−−−−−− ■Bというビュー −−−−−−−−−−−−− | ID | 親 | 所在 | −−−−−−−−−−−−− | 10 | A' | 東京 | −−−−−−−−−−−−− | 20 | B' | 埼玉 | −−−−−−−−−−−−− から −−−−−−−−−−−−−−−−−−−−−−−−−−− | ID | 親 | 所在 | A | B | C | −−−−−−−−−−−−−−−−−−−−−−−−−−− | 10 | A' | 東京 | 元気 | | 元気 | −−−−−−−−−−−−−−−−−−−−−−−−−−− | 20 | B' | 埼玉 | |病気 | | −−−−−−−−−−−−−−−−−−−−−−−−−−− を作りたいんだが、あと一歩のところでできん。親A'の行が2行になって子の状態がわかれちゃうんよね。 どうすれば良い?
項目の数が動的なのか SQLではムリポ なんつーかテーブル設計が・・・
>857 回答ありがとうございます。 私が勉強不足なのかなぁ・・・。そこまでが限界か? あとはビューから結果を持ってきて言語レベルで編集するしかないのか・・・。はぁ・・・。
856じゃないのですが、 項目の数が固定の場合は可能なんでしょうか? 後学の為にご教授ください。
すいません、補足。 A、B、Cという列は可変ではなく固定です。 外部結合でやってたのですが、列が増えたら処理が遅く使い物にならなくなったので 列別名とかDECODEとか使って思考錯誤いるんですが、上記まで行って手詰まりになったので ここで質問しました。
>>856 できたところまででいいのでSQLをしめしてください。
sqlじゃ
select A.ID, B.親, B.所在, A.状態, A.子 from A, B where A.ID = B.ID;
までじゃねーの?
>>860 固定になるわけがないと思うのだが
おはようございます。
>>861 今日解決できなかったら示しますね。
>>862 上記例だとA、B、Cの3項目固定なんですよ。A、B、Cは必ず固定で表示します。
誰も病気でも元気でもなければ何も入らないです。
親、子っていう例が悪かったかな?
親をパソコン、子をパソコンのパーツ(CPU、メモリ、CDROM)としたら、
Aのビューは「パソコンのID、パーツの状態、そのパーツは何か」を示し、
Bのビューは「パソコンのID、パソコン名、パソコンの製作会社」を示していて、
AとBをまとめて見やすくしたいというのが目的ですね。
いづれにせよわかりにくい説明で申し訳ないです。
>>860 必要な結果を得る方法がわからないのか、できたけど遅くて
使い物にならなかったのか、どっちなのかはっきりさせよう。
こんばんは。
本日頑張って完成させました。
ちゃんと検索処理も充分な早さでできました。
外部結合でやっていた時とは比べ物にならないくらい速くなりました。
いろいろ意見をして頂きありがとうございました。
というわけで下記の式でA、B2つのビューから欲しいビューを作りました。
なんか希望の物できたけどMAXとかはせこい気がするなぁ・・・。
まぁ、仕事速く進んだからいいか。
>>864 さん
あえて表現するなら
「できたけど遅くて使い物にならなかったので、新しい方法を考えていたけどなかなか必要な結果が得られなかった」ですかね。
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.所在;
あれ・・・? 式を投稿したのにはじかれてる? 明日載せてみますね・・・。
のってた!(汗 連カキコすいません。
869 :
デフォルトの名無しさん :03/08/10 15:22
オブジェクト指向で言うデザインパターンのDOA版みたいのって、 書籍とかサイトとかないですか? 同一業種でも、パターン化は難しいのだろうか? でもベテラン設計者って、あるていどパターン化していると思うのだが・・・ メシの種だから、なかなか公開されないモノ?
どっかそういう感じのページ作ってオープンに作るしかないな。
>>869 なかなか公開されないんじゃない?
すくなくとも、複雑になるようなケースではそれで客に信用してもらうことになるわけだし。
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
873 :
デフォルトの名無しさん :03/08/16 03:26
すみません、質問させてください。 知り合いの事業会社が自社で基幹系のシステムを作ることになりました。 販売管理等でユーザー数は100、同時アクセス数は20程度。社内に専用線による ネットワークは整備済。開発要員は自社でトレーニングして充当するとのことです。 トランザクション量が多めなので、サーバーとRDBはいいものを、ということでUNIX サーバーにOracleというところまでは仮決まりですがまだ未定。 問題は、アプリの開発ツールをどうするかということなんですが、社内で意見が割れてます。 一人はC/C++/C#のRADツール、もう一人はJAVAのRADツール、あと、Delphiもいます。 決定の最優先事項は、 ・RDBとの親和性の高さ(ODBCじゃなくてネイティブで接続可なこと) です。個人的にはDelphiしかないような気がしてるんですが、ちょっと他の詳しい人の意見も 伺いたく質問させていただきました。みなさんだったらこういう状況で、どのツールを選びますか? 理由も添えて教えていただけないでしょうか。よろしくです。
>>873 >C/C++/C#のRADツール
ほう、俺の知らない間に世の中は進歩してるなぁ。ちなみに製品名はなんての?
>>873 ネイティブの意味がわからんな。
ローカルのDLL触る気か?oo4oにしたいってことか?
転送データ量や、RDBの負荷はちゃんと見積もったのか?
見積もったなら、アーキテクチャの設計に頭使った
ほうがいいんじゃないのか?戦略ミスを戦術でフォローしよう
なんてトーシロな考えはやめろよ。だいたいトーシロがoraの
DLL触ってどうしようっていうんだ?
>>873 アプリの詳細くらい書けよ。
Windowsクライアントなのか、Webなのか、サーバーサービスなのか。サーバーOSも。
多分Windowsクライアントなシステムだろうから、オレの推薦はC#。
あと、ORACLE使うならRDBとの親和性なんてどこも同じ。
トランザクションが多いってどれくらいかわからんし、ネイティブで接続って意味もわからん。
アプリとDB間のインタフェースが簡潔なほうがいいというなら.NET+SQLSERVERだと思うけど。
親和性も問題なし。
それからDelphiはどう考えてもなしだろw
そもそもそんなに意見が分かれてる状況で、どれかに絞って開発できるスキルあるのか?w
>>873 >決定の最優先事項は、
・RDBとの親和性の高さ(ODBCじゃなくてネイティブで接続可なこと)
少なくともこれだけの条件から、
>個人的にはDelphiしかないような気がしてるんですが、ちょっと他の詳しい人の意見も
伺いたく質問させていただきました。
この結論が出ることはないように思えますが。他に条件はないんですか?
ODBC使わずに接続できる、というのならC/C++/C#/Javaどれでもいいと思います。
おそらくクライアント/サーバ型のアプリケーションということは決まっているようなので、
・アプリケーションの配布方法
・データベース以外の制約
・その言語/ツールに習熟している開発者の数
など問題になってくると思うのですが。
Delphiも良いらしいよ。でもDBサポートのパッケージは結構高くなかったかな? 使ったこと無いからしらんが。 たしか、DBが更新されたらクライアントにイベントを送るとか言う特許使ってる やつだよね。C#のデータセットクラスも、ホントはそれをつけたかったんだろうけど、 やっぱりついてないしな。DelphiはそもそもOracle向けで開発された言語だし やっぱり良いのかもな。
C/C++ のRADなんてあるのか? まぁ、C/C++/C# を全部同一視して提案しているような奴の意見を真に受けないことだ。 C# は重いからやめておけ。.NETは次期Windowでネイティブ実装されてから使うのが吉。 Java も重いけど、Windowsクライアントも unixサーバ上の夜間バッチ処理も 同じ言語でかけるというメリットはあるな。 あと、JWS によるアプリケーション配布、更新。 どーせ、クライアントのUIなんて大したもんじゃないんだろ? 開発要員は自社でトレーニングして充当するって言ってるくらいだし。 であれば、Delphi か VB6 でちょいちょいと開発してしまうのが吉。 まぁ、VB6 を提案する人間が社内にいない、C/C++/C# を同一視してる… その程度の連中で開発したら、どう考えたってデスマーチだがな。
2階層のC/SならPowerBuilderが絶対おすすめ。 はっきり言ってバカにしてたけど、帳票なんかも含むばあいだと、 あれほど簡単にDBアプリを開発できるツールは無いと思う。 ただし、下手に作ると保守はたいへん。
881 :
デフォルトの名無しさん :03/08/17 16:51
2層クラサバならJavaはやめるべし。 重すぎて現場から文句でるだよ。
>>873 どれ利用しても要件は満たせるような気がするけど。
結局のところプロジェクトのメンバがどの言語に精通しているかによるかな。
C/SのRADだったらJavaはあんまり生産性がよくないからやめておいたほうがいいかもね。
>>881 「二層C/SならJavaやめろ」ってどういう意味?
単純に「GUIクライアントにはJavaやめろ」ということじゃなくて?
キミの書き方だと、C/SのS(サーバサイド)でもJavaが遅いようなニュアンスがあるし、
また、一層モデル(単一プロセスで全処理をこなすJavaアプリケーション)や
三層モデル(たとえばプレゼンテーション層にWebブラウザ+JavaApplet)の場合は
Javaでも遅くない、という意味に取れないこともない。
Javaの大きな問題点は、起動の遅さと、GUIの緩慢さ だね。
これは、GUIクライアントにとっては致命的な問題だ。
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 じゃないけど、何でもイイ!ってわけだ。
プロジェクトメンバによりけりということ。
開発要員は自社でトレーニングして、とか、なんかすごいゆとりある会社だね。 つか、販売管理ごときであればパッケージを使ったほうが・・・
パッケージ=帯に短し襷に長し
それを言っちゃうと フルオーダー=車輪の再開発 になるんじゃ。 販売管理で独自性出してどうする、と。
>販売管理で独自性出してどうする 販売を知らない奴の典型。まあ、再発明と再開発を混同してる時点で終わってるが…。
パッケージ否定派は皆そう言うわな。 ま、顧客自身が独自につくりたがるんだからしょうがないけど。 作り直しの効かない基幹システムをローカルルールで縛りまくって自分の 首締めてるユーザ、結構多いと思うんだけど。 「再開発」については、あえてそう言った。
>作り直しの効かない基幹システム コボラーの発想。そんな脅しがいつまでも通用すると思ったら大間違い。 >ローカルルールで縛りまくって自分の首締めてるユーザ システム屋の詭弁。ユーザーが自分の首を締めてるように見えて、実は 設計段階でローカルルールの取り入れ方を誤ってる。
わかったわかった。 「販売管理ごとき」などと書いたのは悪かったよ。 君が、他人の言葉尻捕まえて文句つけるのが得意なのも十分わかったから、 そろそろ本題に戻ろうよ。
>>892 いや、あの、書き方云々ではなくて、パッケージのお話をしてるんだが…。
>>893 逃げ出した奴に追い討ちかけんでもえぇやんw
つまり、DBアプリ開発の極意はとっとと逃げ出す事である。
中小企業、いや個人商店程度ならパッケージでもいいのかもしれないけど、 中規模以上のユーザーではパッケージなんて使ってちゃだめだよ。 そもそも販売管理ってのは基幹業務なわけで、そこに特色を出せない企業は 生き残れないよ。(販売管理システムの良し悪しによって、エンドユーザーへの サービスの質まで左右されるような時代になったからね。) いまは多様化していて、販売管理の範疇であっても 業種特有のロジックがあれこれと必要になっている。 基幹系システムと情報系システムの境なんて今後どんどんなくなっていくんだから、 パッケージなんて使ってたら、企業の独自性が出せなくて死亡。 販売管理と言ったって、お金と物品の動きだけで済む時代じゃないよ。
>Win限定なら(前レスの情報よりクライアント環境はWin以外ないと思うが。) >JavaにはSWTがある。 おまえ、SWT使ったことないだろ? Swingに比べればロードされるクラスが少ないけど、 それでも起動は非常に遅い。それと、独自描画を行わない SWT は Swing に比べて 高速だと思われているけど、必ずしもそうではない。 JNI に依存している SWT は、テーブル表示など JNIコールが多発する状況では Swing よりも遅くなる。
899 :
デフォルトの名無しさん :03/08/18 23:16
900 :
デフォルトの名無しさん :03/08/18 23:21
つっこみどころはそこじゃなくて SWTがWin限定じゃないところじゃなかろうか
902 :
デフォルトの名無しさん :03/08/19 00:41
>>898 はいはい。他人の文章の抜粋はいいから勉強しろ。
903 :
デフォルトの名無しさん :03/08/19 08:26
あ〜だこ〜だと、ウンチク語る奴がまだいたのか・・・ Javaやってる奴にもいるんだよな・・・内部にアレ使ってるから処理が遅いの早いのとウダウダ・・
>>890 パッケージ使ったこと無いだろ。
使えばシステム屋がパッケージ薦めない理由や、少し目端の聞く顧客がフルオーダー
したがる理由がわかるよ。
>>900 書き方がひじょーに悪かった。
>(前レスの情報よりクライアント環境はWin以外ないと思うが。)
でも書いてあるように、クライント環境がWinだけでなく、Unix系でX使用等
複数のOSが混在していないということ。
それだと、SWTで使用した場合、複数のクラスモジュール
管理しなくてはいけないから(Javaの利点がなくなってしまう)ね。
(まぁ、クロスコンパイル可能な製品だと同じことがいえるけど。)
>>898 がんばれ(w
え? なに、みんな SWT でパフォーマンスに全然不満ないわけ? おっかしいなー。
>>906 いやあるよ。かなりある。
だから使わない。
ただこのスレの話題ではない。
908 :
デフォルトの名無しさん :03/08/23 21:45
CMP使えよ。 きょうび、ソースコードにSQL記述するのってダサイよ。
909 :
デフォルトの名無しさん :03/08/23 23:13
910 :
デフォルトの名無しさん :03/08/23 23:26
CMPてなに
911 :
デフォルトの名無しさん :03/08/23 23:39
>>910 EJBだろ。MS厨には縁のない代物だ。
知らないんだったら火傷するからふれないほうがいいぞ。
>>913 ブリブリブリビチビチ・・シャー
たしかにあんなもの手を出さないほうがいい
916 :
デフォルトの名無しさん :03/08/24 04:38
質問です。 今日始めてDBに触るのでとんでも無いことを聞いてるのかもしれませんが、その辺はご了承ください。 実は、SQLにDBを登録して検索するようなプログラムをCで組んでるのですが 稼動環境はBSDなのですが、テスト環境はWinなのです。 それで、MSのSQLとPosrgreSQLとでは互換性はあるのでしょうか? プログラム組んだ場合共通のコードで使えるのでしょうか?
>>916 すごい文章だな。でもなんとなく意味がわかったぞ。
>>それで、MSのSQLとPosrgreSQLとでは互換性はあるのでしょうか?
あるあるといえばあるんだけど、ちょっと凝ったSQL書くとぜんぜんだめ。(普通日付関数とか使うよね)
そもそも開発するなら同じDBMS使わないとだめです。
PosrgreSQLはcygwin使えばwindowsでも動かすことができるので、それで開発しましょう。
918 :
デフォルトの名無しさん :03/08/24 11:16
テストはWinでやっていきなり本番でBSDなんてことはないよね?・・・
>>916 まあそういう無茶はせずに本番と同じ環境作って開発しましょ。
そもそもCのプログラムのほうの心配すべきだと思うけどな。
>916 SQLに関しては、DBMS間での方言がいっぱいある。 単純な文でもない限り、互換性は無いと言っても過言ではない。 あとな、気持ちはわかるが、SQLServerをSQLと略すのヤメレ。 話がややこしくなるから。 せめてSQL鯖と書いておくれ。
>>920 ほっとけ。「SQLServerをSQLと略す」ようなヤシにマトモなのはいない。
オレの周りにはハードディスクドライブをハードと略すやつがいて頭が痛いです。
>873がどうなったのか気になる。
オレのほうも女性です。そんなもんなのかw
うちの母はCPUの事をIntel insideと呼ぶw 例のステッカーのせいw
>>922 ,924
昔の知り合いにもいたなぁ・・・
やっぱり女だった。
でも、元は知り合いの男の影響ぽかった。
話しててものすごく違和感あった。
928 :
デフォルトの名無しさん :03/10/25 23:11
すいません、ちと質問させてください。 静的SQL、動的SQLっていう言葉をよく聞くけど、 これって一般的にそれぞれどういう意味なんでしょうか。 なんか、いろんなところでばらばらの意味で使っているような気がして、 混乱してきました。
俺はハードコートされたSQLと状況に応じて変化するSQLだと思ってるが。
動的SQLは実行時にSQL文が確定するもの。 静的SQLはデザイン時にSQL文が確定するもの。 性的SQLは…
動的SQL、静的SQL というのはいくつかの使われ方をしてるからね。 どれが正しいとか間違っているとかいうことじゃないと思う。 (1) まず、昔はプログラミング言語では、SQLをソースコードに記述して プリプロセッサで処理をするというものがあった。 これらは、SQL構文チェックがその段階で行われる。これが静的。 それに対して、0040,DAO,RDO,ADO などライブラリにSQLを文字列として 渡すタイプ。これは実行時まで構文チェックされない。これが動的。 (2) 技術的な話ではなく、プログラマが意味的に使い分けることがある。 ユーザーの選択に応じて Where句などが変化するものを動的SQL、 常に同じSQLが発行される場合に静的SQLという。 (3) データベースおよび呼び出しライブラリによっては, プリコンパイル(プリペアド)SQLというものをサポートしている。 これは、構文解析・オプティマイズしたクエリを保持しておくもの。 プリコンパイル(プリペアド)SQLを静的SQL。 毎回、構文解析・オプティマイズを行うクエリを動的SQLという。
933 :
デフォルトの名無しさん :03/10/27 21:59
>>930 が言ってるのは (2) だけじゃないの?
934 :
デフォルトの名無しさん :03/10/29 01:06
こちらにはプロのDB屋さんが大勢いると思うので質問させて下さい。 Yahooのようにカテゴリーが階層になっているデータをうまいこと DBに格納するにはどのようにするのが良いやり方なのでしょうか? 自分で考えたやり方なんですが、サイトのデータを入れるテーブルと カテゴリの階層を表すテーブルに分けてみました。 ちょっと簡単に書くと以下のようになります。 サイトデータテーブル サイトID,カテゴリーID,URL,タイトル,コメント カテゴリテーブル カテゴリーID,親カテゴリーID,カテゴリー名 サイトデータテーブルとカテゴリーテーブルはカテゴリーIDで リレーションを張ります。 階層構造はカテゴリーテーブルの親カテゴリーIDを再起的に 辿っていくことで表すことができます。 DBの設計に関しては独学で誰かに教えてもらったことがないので これでいいのかどうか不安です。 他に良いやり方などあったら教えてほしいのですが・・・。 よろしくお願いします。
>934 カテゴリ3階層のショッピングサイトを作ったときは、そんな感じで作ったなぁ。 カテゴリテーブルに何階層目かもいれると、検索しやすい?
936 :
デフォルトの名無しさん :03/10/29 03:10
>>984 Webサイトはお遊びだからいいけど、積算等の基幹業務系になると
再起呼出しでは高速に集計できなくなるので、フルパス的な方法の方がいいかも。
ツリーの操作や探索なんてRDBじゃムダすぎ。 ファイルに落としてメモリマッピングしてRAMディスクの要領で扱うべきかと。
938 :
デフォルトの名無しさん :03/10/29 09:27
>>937 同感
メモリ 4G 積めば、そこそこの操作はオンメモリーでできるので;
ツリー情報は自前で処理だね。
確かに再起で何回もDBにアクセスするのでそこがネックでした。 ただ、DBだとWeb上の管理画面からブラウザで階層構造の変更が できたりと良い面もありましたが。 >ファイルに落としてメモリマッピングしてRAMディスクの要領で扱うべきかと。 つまり多次元配列などにカテゴリの階層を記述し、DBを介さずに 階層構造を扱うということでよろしいでしょうか?
>>937 更新・削除を考えたら、ただのファイルの方がムダが大きい可能性も
大きいと思うけどね。メモリマップで扱えて部分更新が可能でしかも
検索が速いファイルフォーマットなんて考えていたら、自分でDB作る
ようなもんだし。
941 :
デフォルトの名無しさん :03/10/30 13:13
>>934 どんなDBMSを使っているかにもよるけど、ストアドにしたり、再帰時の
呼び出し方を工夫することでいくらでもパフォーマンスは上げられる。
OracleなどはSQLで階層構造の検索ができるようになっているし。
使用しているDBMSとミドルウェア、再帰の部分のコードを貼り付ければ
もう少し現実的なアドバイス(RAMで云々などでなく)が貰えると思うよ。
ファイルシステムっつっても基本はファイル割り当てテーブルで ディレクトリ/ファイルのツリーを管理してんだから、そんな感じ のテーブル定義しとけば良いんじゃない? だめっすか?
現在のカテゴリのパスを表示するときなど 再帰処理で親カテゴリーIDがNULLになる(ルート)まで 辿る(階層分問い合わせる)ということをしているのですが、 このような部分をストアドプロシージャにすると一般的には パフォーマンスは上がるのでしょうか? ちなみに今の開発環境はPerl+DBI+MySQLでやっております。 MySQLは現在のバージョンではストアドプロシージャは未実装ですが、 近々出る次のバージョンでは実装されるそうです。 MySQLにこだわっているわけではないのでPostgreSQLにしてもいいんですけど。
>>943 > このような部分をストアドプロシージャにすると一般的には
> パフォーマンスは上がるのでしょうか?
DBMSにもよるけど、かなりのパフォーマンス向上が見込めるよ。
ストアド言語が再起処理可能でないとダメだけど。
>>944 なるほど。ストアド言語って素晴らしいですね。
色々有益なアドバイスありがとうございました。
今取引を記録していくシステムを考えているのですが、繰り返し発生する取引の登録の簡略化を考えています。 取引DB ID 取引日 得意先C 1 11/01 A000 2 11/01 A001 3 11/01 A002 を 4 12/01 A000 5 12/01 A001 6 12/01 A002 としてIDをキーとして登録しようとしています。 今はクライアント側で転記を行っていますが、SQLを使って 何とかサーバー側で行えませんか? InsertSelect文では同じテーブルでの操作はできないので それに代わるものを考えています。 このような実装はどのようにするとスマートに行えますか?
取引の実績を記録したいのか?それとも計画を記録したいのか?
>947 取引の実績を記録しようとしています。 今回の取引内容が前回と同じ場合に、前回の取引から内容を複写 したいわけです。 たとえばA社(A000)の12/1の取引は11/1の取引と同じ内容で登録 とできないかと考えています。 946では 取引DBの列を簡略化していますが、他にも列があります。 実際にはできませんがこんな感じでSQLで処理できればと INSERT INTO 取引DB (取引日,得意先C,取引内容) SELECT #12/1#,得意先C,取引内容 FROM 取引DB WHERE 取引日=#11/1# AND 得意先C='A000';
>>948 いや、なんでわざわざ過去の履歴から情報を複写したいの?
ぜんぶ初回取引とおなじ処理じゃだめなの?
もし一連の「繰り返し取引」に固有の情報があるなら、別テーブルに分けるべき。
>949 >いや、なんでわざわざ過去の履歴から情報を複写したいの? オペレータの入力の負担を軽減するためです 業務にもよると思いますけど「過去の取引を検索して複写する」って あまり使われないのでしょうか > ぜんぶ初回取引とおなじ処理じゃだめなの? 駄目ですわ 実際のところ毎回同じ取引内容で動いてる訳ではないですから
>>950 クライアント側のフォームか何かに必要な情報を入力して、それを
エントリしているわけだよね?その入力の手間を省くというなら、
前回の取引内容をクライアント側に取り出せば、あとのエントリは
初回だろうが繰り返しだろうがおなじ処理でできるだろう?
サーバー上で複写云々なんて考える必要はない。
>駄目ですわ
>実際のところ毎回同じ取引内容で動いてる訳ではないですから
それって入力内容が違うってだけの話だしょ?
それとも取引ごとに入力項目が不定で毎回変わるとか?
952 :
デフォルトの名無しさん :03/12/26 18:11
レコードをソートするためだけのフィールドを作るのですが、 数字型と文字列型どちらがいいでしょうか? 識者のご意見をお聞かせ下さい。
SQLでソートすればいいじゃん
>>952 型とか何とかよりまずインデックスを張ることを考えるけど
何の順でソートする?
追加するフィールドの値はどうやって導出する?
そっちのほうが気になる
955 :
デフォルトの名無しさん :03/12/27 00:01
952じゃないけど、たぶん human interface を作るときに表示する順番を レコードに持たせたりするんじゃない? 例えば受注投入画面でお得意さんを上に表示して選びやすくするとか。 ちなみに数値型でいいでしょ。
>>955 言葉足らずですいません。そうゆうことです。
表示する時の並び順の為だけのソートIDです。
数値型にしてみます。ありがとうございました。
957 :
デフォルトの名無しさん :03/12/27 00:23
お前らあほか ぱんてぃーは昔から白色いうてきまっとんのじゃ 赤とか黒とかは萌えんのじゃ ましてやのぉ くもの巣みたいなんはいてみぃや しばくど のぉ梅宮
958 :
デフォルトの名無しさん :04/01/21 07:41
すいません、ちょっと相談に乗ってください。 ユーザーテーブルに10000人分のレコードがあります。 また、10000件ほどのドキュメントがあり、各ユーザーがそのドキュメントを 読んだかどうかのデータを保存したいんですが、どういう設計にすればいいでしょうか。 各ユーザーが各ドキュメントごとに未読既読を保存するテーブルを作って・・・ と考えていたんですが、よく考えるとそのテーブルには100,000,000件も レコードができてしまって、ちょっとこれは心配。 ドキュメントのテーブルにひとつフィールドを設けて、ユーザー分の既読フラグを バイナリ化して入れてもいいんですが、バイナリ化はプログラム側で行うため、 複数のユーザーが同時に既読フラグを立てようとするとタイミングによって、 フラグが消えてしまうユーザーが出てきそうで・・・ こういう場合、どうすればいいんでしょうか。
>>958 >各ユーザーが各ドキュメントごとに未読既読を保存するテーブルを作って・・・
と考えていたんですが、よく考えるとそのテーブルには100,000,000件も
レコードができてしまって、ちょっとこれは心配。
下手なこと考えるより、これでやってみたほうがいい。
>>958 >各ユーザーが各ドキュメントごとに未読既読を保存するテーブルを作って・・
これが正解です。
ユーザと未読ドキュメントの組み合わせではレコードを作らず
ユーザがドキュメントを読んだときに既読レコードを作れば
実際のレコード数は100,000,000件よりずっと少ないでしょう。
レコード数増加に伴う検索時間増加はインデックスで解決できます。
>ドキュメントのテーブルにひとつフィールドを設けて、ユーザー分の既読フラグを
>バイナリ化して入れてもいいんですが、バイナリ化はプログラム側で行うため、
RDBをRDBとして使うにはデータが正規化されている必要があります。
ユーザ数は不定でしょうからこの設計は第一正規形すら満たしておらず
RDBを単なるランダムアクセスファイルとして使うことになります。
これではいったい何のためにRDBを使うのかわかりません。
的外れな心配を間違った解決策で回避しようとせずに、
RDBの基本的な仕組みに合わせた素直な設計をする事をお勧めします。
961 :
デフォルトの名無しさん :04/01/22 06:31
962 :
デフォルトの名無しさん :04/01/22 19:54
Oracleで全てのSQLをストアド化しようとすると SELECT系のものはカーソルを返す関数をいちいち書かなきゃならないような 気がするのですが、皆さんはどうされていますか? 「サーバ側で一元管理しなきゃ!」と思ってやり始めたのですが 面倒くさくて挫折しそうです。。。
963 :
デフォルトの名無しさん :04/01/30 10:52
ディレクトリ構造を表す以下のような構造のテーブルがあるのですが、 [テーブル1] ディレクトリID,親ディレクトリID,ディレクトリ名 ショートカットの概念を入れることになり、ディレクトリなら0、 ショートカットなら1が入るフィールド(ディレクトリタイプ)を 追加することになりました。 [テーブル1] ディレクトリID,ディレクトリ名 [テーブル2] ディレクトリID,親ディレクトリID,ディレクトリタイプ すると今までディレクトリIDがユニークなIDだったのですが、 テーブル2のディレクトリIDがユニークなIDではなくなってしまいました。 一応、ディレクトリIDと親ディレクトリIDとの組み合わせでレコードを 特定できるのですが、この場合ユニークなIDを設けるべきでしょうか?
>>963 ショートカットには名前いらないの?
もしかしたら要件満たしてないかもしれないけど、
[テーブル1]
ディレクトリID,ディレクトリ名,親ディレクトリID,ディレクトリタイプ,実ディレクトリID
のようにショートカットにも独自のディレクトリIDを振って、ポイントしている
ディレクトリは実ディレクトリIDで示すのはどうですか?
>>964 ショートカットは単独で名前を持ちません。
(Yahooのカテゴリのような非常に単純な構造なので)
元ディレクトリの名前が変わるとショートカットの名前も一緒に変わるように
テーブルを分けた方が都合がいいのです。
それにしても独自のIDを振った方がいいのでしょうか?
複数のIDからレコードが特定できるなら独自のIDを振らなくても
いいのでしょうか?
いまいちそこら辺のセオリーが分からないです。
966 :
デフォルトの名無しさん :04/01/31 17:32
自動で重複しないIDを振る方法を考えています。 自分で思いつく限りでは以下のような方法があると思うのですが 皆さんならどうしますか? ・オートナンバー型を使う ・アプリ側で重複しない文字列を生成 ・ストアドで重複しない文字列を生成
自動でというのはINSERTする際にということです。
968 :
デフォルトの名無しさん :04/01/31 18:40
トリガを使う。
969 :
デフォルトの名無しさん :04/02/03 00:39
SQLでSELECTに続けてカラム名書くやつはすげーむかつく。 SELECT COL1, COL2 FROM TABLE1 WHERE ... こう書け SELECT COL1, COL2 FROM TABLE1 .. 上のは美しいが、死ぬほどメンテしづらい...
>969 SQLでカラム名に続けてカンマ書くやつはすげーむかつく。 COL2をコメントアウトしたときに上の行までいじらないといけない、死ぬほどメンテしづらい...
>>971 実行するまで気づかないってパターン多いよな(w