データベース

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
データベース全般の話題です。
2デフォルトの名無しさん:01/09/25 02:13
Accessって、データが大きくなるとすぐ不安定になるって話を
何年か前に聞いたんだけど、最近のバージョンはどうです?

使ってる人いますか?
3デフォルトの名無しさん:01/09/25 02:21
http://cocoa.2ch.net/test/read.cgi/unix/955533785/
UNIX板にいいスレがあった。
>>2
Win9x で Access2000 使うと
立ち上げるだけでみるみるうちにリソースがなくなってフリーズする。
という現象に出会ったことがある。
何気にどうしようもない。
5デフォルトの名無しさん:01/09/25 02:57
>>2
200MB〜400MB のMDBを一年以上使っているが、不安定ってことはないみたい。
社内100人以上が個々のPCに持って、ローカルで利用している。
6デフォルトの名無しさん:01/09/28 12:46
最大で5人くらいが同時接続するシステムを作りたいのですが、
Accessって使えますか?
(スタンドアロンでしか使えない?)
Jet-DBEの使用は避けたほうが良いと思うのだが。
データ格納部 => MSDE
Form & Report => Access
ってな感じが良さげ。
8デフォルトの名無しさん:01/09/28 13:36
アクセスって何?
SQL構文使わないでテーブルにアクセスできるの?
なにやら簡単らしいが・・・・・・
ToHeartの歌
10デフォルトの名無しさん:01/09/30 02:39
>>6
サーバー側にMDBを置いて、クライアント側で起動したときにつなげにいけばいい。
クライアントはMDEのほうがでいいかもしれない。
>>8
アクセスはマイクロソフトが出してるオフィス製品のひとつ。
確かに、クエリーはSQLをGUIで作れるので便利。
ただ、結構癖が強い。集計関数が更新でつかえないとかあるよ。
クロス集計クエリーも便利だけど、SQLではつかえないし。
10人くらいでデータが数万くらいなら、これ以上のものはないと思う。
11デフォルトの名無しさん:01/09/30 03:18
クライアントのORACLEってどんなん?
12デフォルトの名無しさん:01/10/02 00:48
ORACLEって、サーバじゃないの?
13デフォルトの名無しさん:01/10/02 11:03
>>10
MDB使ってC/S組むとパフォーマンスが凄く落ちない?
Jetエンジンでやってるからしょうがないんだけど。
2000ならMSDE使って、クライアントをMDEにすると便利。
プロジェクトってローカルクエリーがないから不便だよね。

アクセスのクエリー、集計関数に「先頭」「最後」が使えるのがいいよね。
SQLだとダイレクトには呼び出せないもん。
あれ、どういうSQL発行してんだろ。フェッチ使ってんのかなあ。

>>12
ORACLEって、クライアント作成用のデベロッパーがあるよ。
見た目はVBぽかった気がする。
14デフォルトの名無しさん:01/10/04 10:34
15デフォルトの名無しさん:01/10/09 16:03
InterBase6.0.1 + XTG ODBC Driver 1.0.0 beat12の組み合わせが
ライセンスフリーな環境としては何気に良さげ。

Access97とBorlandのBDE5.2は表面的に問題なさそう。
(いや、あるかもしれんが)
16デフォルトの名無しさん:01/10/09 20:26
Del6Ent+Oracle8iにいじめられた
dbExpressのコンポーネントに頼りすぎたのがいけなかったのか
結局、生SQLで対処して事なきを得たが・・・
17デフォルトの名無しさん:01/10/18 14:55
助けて〜。
ADO+MDB+VCでプログラム作っているけど、
1つのテーブルに連続でUPDATEするとロックでエラーになる〜。

データ比較しながら必要な項目に更新かけて、エラーがおこったら
まとめてキャンセルってやつなんだけど・・・。
トランザクション使えばキャンセルの方はなんとかなるけど、
ロックが・・・。

上手い方法教えてくださいな〜。
あくせすのろっくはにきろばいとのぶろっくろっく〜
>>17
>1つのテーブルに連続でUPDATEするとロックでエラーになる〜。

具体的なエラーコードとエラーメッセージを引用すべし。

>トランザクション使えばキャンセルの方はなんとかなるけど、
>ロックが・・・。

ロックが、何ですか?
2017:01/10/18 17:05
>>18
 それかも知れないですねぇ。
 でも、SQL−Server使用しているときに2Kロックは知ってましたけど、
 MDBでも同じなんですかぁ・・・。
 連続クエリーは不可なんでしょうか? (悩

>>19
 エラーコードとメッセージですかぁ。
 コードっていうか、メッセージは
 「現在ロックされているので、更新できませんでした。」
 ってやつです。

 >ロックが、何ですか?
 いや、↑のようなエラーになるって事です。
21デフォルトの名無しさん:01/10/18 19:04
>17
DAOは?
22デフォルトの名無しさん:01/10/18 20:02
すいません、助けて下さい。
今、oracle+ColdFusionで開発してるのですが、
ローマ数字の混じった値(例えば"データU")をSelectしようとしたとき、
SQL*Plusでは抽出されるのに、ColdFusionのクエリーで抽出されないんです。

もし、同じような現象が出て解決できた方は教えていただけないでしょうか?
お願いします。
Oracleを触って2週間くらいだけど、
感覚はVBと同じ。
24デフォルトの名無しさん:01/10/19 00:36
>>20
> 連続クエリーは不可なんでしょうか? (悩

んなわけない
25デフォルトの名無しさん:01/10/20 23:50
ここは馬鹿ばっかりだな
26デフォルトの名無しさん:01/10/27 04:01
卒業研究でwebアプリの開発するんだけど、アクセスで構わんよね?
運用しないんだし。発表の時のデモで触るくらい。
>卒業研究でwebアプリの開発するんだけど、アクセスで構わんよね?
>運用しないんだし。発表の時のデモで触るくらい。
DB選定も課題の一つだろうが・・・ヴォケ
>25
 誰が?多分 >5 のことだと思うけど。

>5 よ。そんなでかいMDBを社内で100人がローカルに
使用している状況は良いのか?貴方が開発者なら設計
診なおした方が良いよ。
>>26
>卒業研究でwebアプリの開発

せっかくやるんならWEBサービス作ってみ。
今一番おもしろい分野だし将来性も期待できる。
ダカラAccessハヤメトケ
30みちゅ ◆zzfy/JR2 :01/10/27 22:57
こっちもよろしくなり(*'-'*)

データベースにどれ使ってる?
http://pc.2ch.net/test/read.cgi/prog/1003005568/l50
31デフォルトの名無しさん:01/10/28 00:53
ここで良いのかなあ。スレ違いだったら誘導してくださいまし>識者

fileコマンドってあるよね?/usr/share/magic見ると凄い量の
マジックナンバーがあるけど、どうしてあんなに一瞬で検索
できるの?
マジックナンバーってどんなファイルにもある訳じゃないのに
どうやって判断してるのか知りたいんだけど・・・
>>26
>>29
お薦め構成もあげたほうがいいんじゃない?

MySQL + Apache + PHP4なんてどうだろ。
OSがWindows、Unixどちらでも同じ構成で構築できるし。
あとPHP4をPerl or java(JSP?)に変えても良さげ。
>>27
>>29
環境整えるための予算がつかない場合は
IIS(PWS)+ASP+Accessも有りだと思うのだが駄目か?
>>26
やっぱ 3-tier モデル?
3529:01/10/28 03:10
>>33
その構成ならAccessの代わりにMSDEでさらにお安くなります。
Windows 2000さえ有ればOK。
>>35
Windowsのライセンスは問題ない?
3726:01/10/28 03:49
環境はIIS、ASP、accessを考えてます。access以外のDB使えそうなのが
自分ひとりしか居ないんで、出来ればaccessが良いです。。
学校のPCで使えるのは2〜4台です。3層は無理です。それ程意味も無いし。
IIS、ASPを触ったこと無い状態から始めてるので、他のメンバーに
SQL教えて、DBの使い方教えて〜ってやってると時間的に厳しいです。

自分のスキルはC、C++、java、VB、VC
DBはaccessが触ったことがある。oracleはチューニングとかは出来ない
けどテーブル作るくらいなら出来る。SQL、PL/SQLは使える。
サーバ関係は触ったこと無い。今ちょこちょこ触ってる段階。
C以外は込み入ったことやると怪しいです。動けば良いってレベルなら
なんとかなりますけど。

他のメンバーは3人居てC、VB、accessが使える程度です。
access以外は自分の方が知識があります。

ライセンス的に使えるのはwin98、ofiice2k、VS6。
win2k pro、oracleも使えるはず。oracleは怪しいかも。
MSDEはVS関連が無いと使えないですよね?この場合はOKですけど。
MSDEをあんま良く知らないんですけど、SQL serverのサブセットと
考えれば良いのですか?
>>37
>ライセンス的に使えるのはwin98、ofiice2k、VS6。
>win2k pro、oracleも使えるはず。oracleは怪しいかも。
>MSDEはVS関連が無いと使えないですよね?この場合はOKですけど。
>MSDEをあんま良く知らないんですけど、SQL serverのサブセットと
>考えれば良いのですか?

つーか、そういうことを調査するのも研究のうちだろーが。
結果じゃなくて、「調査すること」に意義がある。
>>37
ふと思ったが、まさかWebアプリを「作る」のが目的だったりしないよね。
おっと、
s/目的/研究目的/
>>37
>学校のPCで使えるのは2〜4台です。3層は無理です。それ程意味も無いし。

ぉぃぉぃ、n層と台数は関係ないぞ。
3層だから3台必要なんて思ってたりするのか?
>>31
ftp://ftp.iij.ad.jp/pub/FreeBSD/branches/4.0-stable/src/contrib/file/
でも見てみたら。俺はどういう実装か知らんけど。
4331:01/10/28 18:30
>>42
cygwinのソース見てみました。どうやらリニアサーチっぽいです。
file-3.33/softmagic.c
今のマシンだとこんなに速いの??
1.表領域をユーザー毎に分ける。
2.shared_pool_sizeを50Mにする。
3.REDOログファイルを50Mにする。
4.もっと早くしたければRAID化する。

こんな感じでしょうか?
まだOracleの設定でパフォーマンスを上げる方法があれば教えてください。
>>44
なにかの罠?

とりあえずマジレスすると、そんな断片的な情報を集めるより、
パフォーマンスチューニングの本を買って読んだほうがいいよ。
とりあえずオラマスの銀でも勉強してみるとかさぁ
48デフォルトの名無しさん:01/11/02 23:34
データベース初心者ですが、質問させてください。
今「日付を入力すると、その月のカレンダーが出来上がる」という物を
作ろうと四苦八苦しています。

具体的には、日曜から土曜までを5行という一般的な形の
枠と曜日だけ書かれたカレンダーのテンプレートに、
その月の曜日に対応した日付がきれいに並ぶようにしたいと
考えています。

その方法がわかれば、その次の段階として考えている
「シフト表一発作成」ができそう、と思っています。

「その月の1日が何曜日か」を数字で返すところまでは出来たのですが、
そこからが全くお手上げになってしまいました。

日 月 火 水 木 金 土
↑     ↑   ↑
このカレンダーのどこに「1日」がくるのか、
そして「2日」や「15日」はどうやって導いたらいいのか、
スマートな方法ご存じの方、よろしく教えて頂けないでしょうか?

マック野郎でファイルメーカープロ5.5使ってます。
あんまり先進的な関数とかないと思うんですが、よろしくお願いします。
表示の問題?
50デフォルトの名無しさん:01/11/02 23:56
>>49
私にレスくださったのでしょうか?
そうだったら嬉しいです。
とりあえず今考えてるのはカレンダーの一行目の部分、
例えば今月なら

日 月 火 水 木 金 土
        1 2 3

こんな感じのとこはifをいっぱい並べてなんとか
するくらいしか思いつかないのですが、
そういう風に組み立てると後で発展させるときにすごく
やっかいになりそうなんで、立ち止まってしまっています。

もっといい方法ないでしょうか?
51>>48:01/11/03 01:16
これがデータベースと関係あるんですか?
52デフォルトの名無しさん:01/11/03 03:05
>>51
48です。最終的には、カレンダー上にデータベースのデータが
どかんと乗る物をつくりたいのです。
1日から31日までタテに並んだカレンダーなら簡単なんですけど、
「ふつうのカレンダー」みたいなレイアウトの方が今回は
都合がいいので、それをどうにかして作れないものかな、
と思って質問させていただきました。

今のところ日付をなんとか並べることは出来るのですが、
どうしても無理矢理っぽい感じになってしまい、
データベース的な発展が望めそうにない構造なんです。

データベースのプロが作ったデータベースってホントに
スマートな作りになっているなあと感じるのですが、
いまわたしが作ってるものはホントにダッサダサだなあと
思うんです。

エクセルなんかと連動させて作った方が早いのかもしれないので
51さんのその気持ちはすごくまっとうだと思うんですが、
逆にエクセルだけで何でもやっちゃう人もいるわけで。
ウイルスまで!

そういうわけで、ファイルメーカーをつかいこなしたい!
というこのメンドウな向上心につきあって頂けたら嬉しいです。

よろしくお願いします。
つーか、48の問題にしている部分については全然データベースは関係してへんと思うし、
もっと基本的ななんかが48には欠落しとるとは思うけど、まぁ、方針だけ示したるわ。
 その月の1日が何曜日かわかっとるんなら、(0:日 ~ 6:土)
「月月火水木金金」を表示したあとで、
曜日のインデックス分の長さだけ空白を表示させて、そのあとで、1,2,3などの
日付の表示を行うルーチンに移ればよろしい。(もちろん、日付表示する
ルーチンには、その事を伝えて善処してもらうこと。)
 個人的には、空白にはせずに、前月の分の日付を表示させて、
フラットなカレンダーにしたほうが何かと便利ではないかと思うのだが、
それは置く。
月 月 火 水 木 金 金
29 30 1 2 3 4 5
54デフォルトの名無しさん:01/11/03 20:09
48です。53さん、ありがとうございます。

>曜日のインデックス分の長さだけ空白を表示させて、
>「そのあとで」

っていうところ、すごく参考になりました。
私の考えの中に順序が抜けてたから
ぐしゃぐしゃになってるんだとおもいました。
これでスッキリとしたものが作れそうな気がしてきました。
本当にありがとうございます。助かります。

「データベースって、住所録のことでしょ?」
くらいのレベルの私なので、
>基本的ななんかが48には欠落しとる
ってほんとそうだと思います。
なんでもちゃんと基礎から勉強しないと結局、
わけなかんなくなって「あがいて」しまいますよね。

教則本のはじめの方に書いてある「データベースとはなにか?」
みたいな章をきちんと読もうと思いました。
オラクルのDBA_FREE_SPACEって表のレコードは
何されると増えるの?
表領域は4つしかないのにこのレコードが増えたり減ったりするんだよね。
ちょっと気になった。
使用可能領域ってのはわかったが何で表領域が4つしかないのに
50件もデータがあるのかなと思って。
56デフォルトの名無しさん:01/11/08 23:15
共有プールを9000000から100000000にしたんだけど
あんまり速度が変わらないんだよね。
皆はいくつくらいにしてるの?
他のパラメータも教えて。
>56
その数字はちゃんと計算して出したのかい?
58デフォルトの名無しさん:01/11/09 00:14
>>57
多すぎてもだめなの?
計算方法があるなら教えてください。
5957:01/11/09 00:21
>58
「キャッシュ ヒット率」とかで検索すればいくらでも情報は出てくるはずだYO!
速度に関しては、多くの要素が絡むからあえて書かない。
SQLをちょっと書き直すだけで劇的に早くなったりするし。
60デフォルトの名無しさん:01/11/09 01:14
>>59
SELECT (SUM(gets - getmisses - usage - fixed))
/ SUM(gets) "row cache"
FROM v$rowcache;

row cache
------------
.95738914

この値を共有プールのサイズにしたらいいのですか?
>>60
個別の数字を提示して、断片的な情報を収集してもしょうがないでしょ。
現状は「共有プール」というものが何なのかさえもわからない状況なんでしょ?

知識を付けたいのだったら、パフォーマンスチューニングの本を買って
読むのが早い。
その手の本には、大抵、状況を把握するためのSQLスクリプトが載っていて、
その数字が何を意味し、どれくらいだったら駄目なのか、また、どうチューニング
すれば良いのか具体的に書いている。

本当に9M -> 100Mと変更しても変化が無いのだったら、それはチューニング
する必要が無かったということ。

また本当に9Mで十分かどうかは、データ量と運用形態によるので(あるいは
アプリケーションの実装にもよる)、誰にもそれで十分かどうかは判断出来ない。

なお、>>60の数字は問題無いが、「キャッシュヒット率」というものは、事前に
予測できるものではないので、運用しながら、あるいはそれを想定したテスト
を行わなければ、本当に十分なのかどうかは分からない。

また、例えその数字が悪かったとしても、現状、満足できるパフォーマンスなら
チューニングする必要はない。
キャッシュサイズ変えても変化が無い

遅い原因はキャッシュじゃない?

あっ、インデックス張ってなかった!

張ってみよ

ウマー

っぽい気がするのは俺だけか?
63デフォルトの名無しさん:01/11/09 21:56
チューニングの参考図書はやっぱオライリーのやつ?
64デフォルトの名無しさん:01/11/09 23:51
富士通のデータベースでJasmineとかいうのが
あるらしい。
これは、オブジェクト指向DBらしいのだが、
使えそうだろうか?
誰か知っている人教えて。
65デフォルトの名無しさん:01/11/09 23:54
国際頭脳産業の国際頭脳DBってどうなの?
日本産DBなんだけどさ。
>>63
だね。翔泳社のやつはどうも・・・。つーか、翔泳社の本は
全部俺の性に合わん。

>>65
ネタかと思ったぞ(藁
検索したら本当にあった。
でもHPがちょっとヤバメだったけどな(藁
67オラクルマスター(ブロンズ):01/11/10 00:55
インデックスって使用不可とかに出来るの?
削除じゃなくてさ。
100列以上あるテーブルに更新や追加をすると処理が
むちゃくちゃ重くてインデックスを削除したら処理がむちゃくちゃ速くなった。
でも仕様でインデックスは削除してはだめなので
更新処理等の時はインデックスを使用不可にしたいのです。
こんな事出来ますか?
>>67
Oracleの話だとすると、8iから出来るかもしれない(マニュアルが
ないのでわからん)。
alter index unusable
ま、マニュアル読むことだね。

# つーか、本当にインデックスの問題なのか?という疑問が。
# 行連鎖とか、PCTの問題じゃないかと思ったり。
# あと、インデックスをリビルドしてみそ、とかも思ったり。
話は変わるが、先月のDBマガジンでこんな記事があった。

・画面入力する。
・Transactionを開始する。
・DBを更新する。
・ユーザに「更新してよいかどうか」を尋ねる(ここで入力待ち)
・YESならCommit、NOならRollbackする

で、「TransactionってRollbackできるところがスバラシイ」だってさ。
70業務でBorlandを使おう:01/11/10 02:09
>>69
一緒に仕事してる(自称)上級SEが
「RDBは信用できないからトランザクションなんて使ってられない」
と逝ってましたがなにか?
71業務でBorlandを使おう:01/11/10 02:12
そんな(自称)上級SEが「これを参考にして作れ」って逝った
VBのアプリ(oracle+oo4o)は一時テーブル使うために
Access+ADO使ってました(泣
72デフォルトの名無しさん:01/11/10 02:29
>VBのアプリ(oracle+oo4o)
なだけマシ(泣
73デフォルトの名無しさん:01/11/10 02:49
>>68
ほんとうなんです。
インデックスを削除してから更新処理を行うと速くて
インデックスをつけた状態での更新処理はむちゃくちゃ遅い。
74デフォルトの名無しさん:01/11/10 03:30
>>69 つーかそれ以前にソンナニ長時間トランザクション掴みっぱなしってのは
業界では普通なんですか?
だから行ロックマンセーなんですか?
>つーかそれ以前にソンナニ長時間トランザクション掴みっぱなしってのは
「それ」じゃなくて
>ソンナニ長時間トランザクション掴みっぱなし
が問題なんだろ
76デフォルトの名無しさん:01/11/10 05:33
>67
ちょいと想像してみな。インデックスを使用不可にした
後、追加や更新処理を流すよな。そしたら、新しく追加
したやつのインデックスはいつ張られるの?

 100行位で遅くなっているなら、インデックスの数が
多い等の問題がある筈なんで調査してみな。
>>73
それは当然だよ。

テーブルにレコードを更新すると同時にインデックスも自動更新する。
だから インデックス付けていると更新時には遅くなる。

だけど、テーブルからセレクトする時はインデックスからレコードの位置を
特定するから速くなる。

だから、インデックスをつける時は、更新処理と読み込み処理と天秤にかけて
どちらを優先するかを決めて付けないと駄目だよ。

レスを読んでると oracle8iからインデックスのenableを変更できるなら
バッチで大量にデータを書き込む時にインデックスを無効にしておけば速くなるよね。
それで、更新が終わったらenableを有効に戻す。
有効にした段階で、RDBが再びインデックスを再構築する。
大量データを更新しながらインデックスも 同時に更新するよりこの方法の方がパフォーマンスは上がるよ。

レコード情報を書き込むディスクドライブとインデックスを書き込むディスクドライブは
基本的に別にしておかないと駄目だよ。

インデックスも種類があって b-treeインデックスからbitmapインデックス等
そのデータの性格に合わせて付けてあげると効果があるね。
>>73

ゴメン。
100行程度で遅くなるんだね。
>>76の言っている可能性が非常に高いな。
>>75
実はその筆者に「同時更新がかかるテーブルのTransactionは、
常に最短をめざすのが吉」という内容のメールを送ったんだが、

「RDBってスバラシイ。
Transactionの中でユーザ入力待ち出来ることがスバラシイ。
だって、Rollback出来るんだから」

と言う内容の、頓珍漢なメールが帰ってきたよ。トホホ・・・。
80デフォルトの名無しさん:01/11/10 12:56
>>78
行じゃなくて列ね。
81デフォルトの名無しさん:01/11/10 15:50
>>73
俺はそういう場合、
更新処理を行う前にDrop Indexして、
処理終了後にCreate Indexしているyo。
IndexのDrop&Createに要する時間より
Indexによる更新時間の劣化が激しい場合ね。
82Error401:01/11/10 17:47
つーか、>>67は、どの程度の単位で速い・遅いと言ってるんだ?

1. Indexがあると1sで、無いと0.1s
2. Indexがあると100sで、無いと1s
3. Indexがあると10sで、無いと5s

確かにIndexがあると、更新時間は増えるが、「むちゃくちゃ重い」というのが
Indexだけのせいなのかどうかわからないでしょ。
他に原因があるかもしれないし。

なお、Oracleの場合、SQL*Plusで
set timing on
とやると、Queryの時間が計測できる。
83オラクルマスター(ブロンズ):01/11/10 17:57
>>77
色々ありがとうございます。
勉強になります。

>>81
そういう手もあるのですね。

>>82
ストップウォッチで計測したところ
インデックス有りの更新処理は約38秒
インデックス無しの更新処理は約0.5秒
という結果が出ました。
84Error401:01/11/10 18:00
>>82
そんなに差があるんですか。
ちなみに、その表の

・行の長さ(バイト数)
・全行数
・更新対象となる行数
・その表に張られているインデックスの数

を、およそでいいので書けませんか?
85オラクルマスター(ブロンズ):01/11/10 18:15
>>84
すみませんです。
私はこのプロジェクトに入った(途中から)のが
この前の水曜日なので詳しくわからないのですが
その表はTEMPテーブルとして使ってます。
Oracle8iですとSybaseのように一時表が作れるらしいのですが
Oracle7を使ってるので大きなテーブルを作りそこに
一時的に保存したいデータを入れるという仕様にしてます。
テーブルのサイズなのですが
殆どの型を10個ずつくらい持っております。
例えば
VARRCHAR(255)
CHAR(255)
等の型がそれぞれ10以上ずつあります。
数字型も同じよう10以上ずつあります。
DATE型は2つくらいです。
このテーブルは一時表のような感じで使っているので
処理が終われば、この処理で使われた行を削除します。
更新対象は1000件前後です。
インデックスは1つ作成しております。

インデックスを削除したら劇的に早くなったので
リーダーにこういう状況なので削除してもいいですか?
と聞いたのですが「ダメ」との答えが返ってきて
何かよい方法がないかなぁと皆さんの知恵を借りさせて頂たいです。
よろしくお願いします。
86Error401:01/11/10 18:37
Oracle7か・・・。
それじゃあ、追試も出来ないね(汗

データベースの接続ごと、あるいは、トランザクションごとの一時表が
使えないから、全員で(全トランザクションで)その表を共有している、
ってことですね。

うーん。

表の構造を変えるか、処理方法を変えるしかないかも。
あるいは、そのリーダーをコロヌか(笑

残るは、資源が足りているかどうかを調べて、足りないものを増やす
(あるいは変更する)しかないけど、一言じゃ説明できないなぁ。

とりあえず、Create Index文をマニュアルで調べて、物理パラメータ
(初期サイズとかね)を余裕のあるものに変更するとかかなぁ。

お仕事中に書き込みする人は今日はいないだろうから、誰かがいい案を
書き込んでくれるのを月曜日まで待ってみるか、OTN Japanにでも質問
するかかな。
87からから:01/11/10 18:38
>>85
何でリーダーは「ダメ」って言っているの?
削除しっ放しじゃまずいだろうけど、
更新が終わったら再作成するなら問題ないと思うが。
インデックスの削除&生成はORACLEのシステムテーブル
(USER_VIEWSなど)を読んでDROP文やCREATE文を逆生成
すれば漏れもないし。
更新時にインデックスを削除するなんて一般的に多用されている
テクだと思うけどな。
もしかして、そのリーダーってメインフレーム系の古典的技術者?
88業務でBorlandを使おう:01/11/10 18:39
あんまりクライアントソフトの開発環境とかの話でてないけど、
みんなはなに使って開発してんの?
やっぱりVB(Javaも?)が多いのでせうか?

自分は今のところVBでやってるのだが、あまりにも
開発&配布がしにくいのでDelphi or BCBに移行したいYO!

BDE(SQLLink)とかdbExpressのパフォーマンスが問題になりそーだが
ODBCとかADOに負けることは無いと思うし。
89Error401:01/11/10 18:40
つーか、OMブロンズなら、そのへんの物理設計の知識や調査手段の
知識はあるのではないか?
という気もしたりするが、気のせいか?

OMを知らずにカキコ・・・。
90からから:01/11/10 18:42
もうひとつ、
同じ表を複数のセションで共有して使うことに
何か意味があるの?
各セションがそれぞれ必要な表をCREATEして、
処理が終わったらDROPすればいいんじゃないの?
91Error401:01/11/10 18:43
>>87
>更新時にインデックスを削除するなんて一般的に多用されている
>テクだと思うけどな。

だねぇ。
まずはその理由を小一時間問い詰めることが先だよね。
92Error401:01/11/10 18:47
>>88
Oracleに限って言えば、

「Delphi最強」

という決着が着いているようです(ほんとか?)。
93からから:01/11/10 18:52
>>88
最近はめっきりJAVAが増えましたね。
つーか、ほとんどJAVA。
去年くらいまではDelphiとかVBとかPBとか
使っていたんだけど、いまや客に提案することも
珍しくなった。
94業務でBorlandを使おう:01/11/10 18:57
>>91
みんな制約の多い中で開発してるんだなー。

今の仕事で設計やってる(自称)上級SEに小一時間問い詰めたことがあったが、
元汎用機とかやってたSEは知識が少な目、で妄想が多めに入ってる。これ最強。
で話が全然通じなかった。
へたに雑誌とかで覚えたVBしかしらんのにVBマンセーだし。

そんな彼の設計したDBにはIndexが存在しません。


愚痴スマソ
>>94
爆笑!
96業務でBorlandを使おう:01/11/10 19:06
>>92
(個人的には)そう思う。
まだ使ってないがDel6が出てdbExpressが入ったおかげで
OracleやMySQLとかにnativeに接続出来るようになったみたいだし。

>>93
GUIの使い勝手とかはどうなんですか?
あと、今やってる仕事だと配布のことも考えないといけないので
どんな環境(WinOS上)でも動いて、かつインストールが簡単っつー
制約があるんで、VMやJDBCの設定とかも気になるところだが。
>>96
イントラネットだと、JavaAppletというソリューションも結構あるみたい。
東京三菱の営業店システムもこれだったし。
>>97
ただし、データベースは使ってないけど(汗

ちなみに、僕の隣のチームはNetscape+Applet+Swing+Oracleで
システム作ってます。
99業務でBorlandを使おう:01/11/10 19:21
>>98
JavaAppletだったら敷居が低めでよさげだな。

(また愚痴だが)うちのSEはActiveX使えって逝ってます(泣
100からから:01/11/10 19:28
ActiveX......(以下省略)

>>99 大変だな。同情....
101業務でBorlandを使おう:01/11/10 19:47
週末のム板はマターリしてて良いな。

スレ違いっぽいが、DBといえば帳票も作んないといけないと思うが
その辺どうやってる?
Reportの類は表形式の帳票つくりにくいし、
今のところExcel使ってるけど、こっちも環境に依存しそうだし・・・
102デフォルトの名無しさん:01/11/10 19:51
>>101
俺のところは、もっぱらPDF(アクロバット)だな。
LinuxとかでExcel出る予定無いですか?
104業務でBorlandを使おう:01/11/10 20:03
>>102
環境はUnix?libPDF(だっけ?)か使ってるのか?
Winで簡単にPDF操作できるライブラリとかあるんだったら考えるんだが。
105デフォルトの名無しさん:01/11/10 20:06
>>104
Winでも「つばさシステム」とか「キャノン」とかが出していなかったっけ?
>>105
いわゆる「Web帳票システム」は馬鹿高いです。
数百万するのもザラ。
つーか、Webで価格公表しとけっつーの。
ちょーひょーシステムて何?
帳票出力するだけ?
>>101
帳票部分だけAccessで作ることが多い
クリスタルレポートを使うこともあるけど、
データを帳票印刷時にコーディングで加工できるので楽。

エクセルに出力することもあるけど、
本格的にエクセルを操作すると、バージョンとか考えないといけないので、
指定がある場合のみってことにしている

使ってる言語に影響してると思われ
仕事ではVB,VB,Delphiを使ってます。
109オラクルマスター(ブロンズ):01/11/10 23:24
いろいろありがとうございます。

>>87
ダメという理由は他の処理でインデックスがないと
重くなるという事でした。

>>90
セッション毎にテーブルを作る方法がわからないのです。
因みにOracle7.3です。
8iでは一時表があるようですが・・・

更新処理前にインデックス削除して
更新処理後にインデックス作成というパターンが
一番簡単そうですね。
ありがとうございました。
110デフォルトの名無しさん:01/11/10 23:31
>>109
一時表じゃなくても、普通の表領域に作る表でいいんじゃないの?
テンポラリ表領域でもかまわないけどね。
動的SQLでCREATE TABLE文を発行すればいいじゃん。
そんで、処理の終了時にDROP TABLE文で後始末すれば問題ない。
表領域のフラグメンテーションが気になるなら、各表のINITIALサイズ
とEXTENTサイズを同じサイズにそろえておけばいい。
111業務でBorlandを使おう:01/11/10 23:51
スレ違いぎみだが

>>108
クリスタルレポートは使ったことがないが、
DelとBCBについてるQuickReportはかなり使いにくかったな。
QuickReportやAccessは表形式の帳票(線帳票っていうんだっけ?)
出力するのにかなり苦労して断念してしもうた。
他のアプリの印刷機能使うにしても環境に依存しそーで悩ましい。

DBがらみではないが、以前作ったアプリの印刷は
さんざん試行錯誤した結果emfで吐き出すようにしてしまった。

Winで扱いやすいベクタ画像のライブラリがあれば解決しそうな問題だが、
なんかいいもんないかなー。
112オラクルマスター(ブロンズ):01/11/11 00:14
>>110
そっかあ。
普通に表を作って処理後に削除してしまえばいいのですね。
その場合はやはりセッション毎に違う名前の表でないと
ダメなのですよね?
113デフォルトの名無しさん:01/11/11 00:29
>>112
>その場合はやはりセッション毎に違う名前の表でないとダメなのですよね?
です。
一時表なんていっても、セション完了時に自動で表の後始末をしてくれるに過ぎない。
もっとも、そのリーダーさんが了解してくれればの話だけどね。
メインフレーム系の人って新しく表を作るって大変なことだと思っているからね。
ネットワークデータベースなんかだと結構大変だから。
114デフォルトの名無しさん:01/11/11 02:28
しかしオラクル(Win版)のGUIツールって使いづらい、っていうか
感覚的にきしょいね。
VBで作ったほうがまだマシのような気がするよ。
115デフォルトの名無しさん:01/11/11 02:33
>>114
俺も自分で作って使っている。
SQLの実行ツール、セッション管理ツール、スキーマ管理ツールなどなど
>>114
VBも文字列ベースだから検証が面倒臭すぎる。
こんどの仕事では
OO4O---VB---他のスクリプトなどの言語
という経路を試してみるつもり。
VBはただのインタフェース
オラクルがすごいからどんなもんかと期待して使用したが、
あれなら自分でデータベースを作ったほうがまし。
(大規模開発)の場合はいざ知らず。
118デフォルトの名無しさん:01/11/11 03:25
>>117
誰も止めていないよ。
119デフォルトの名無しさん:01/11/11 03:33
そういうば、Sunが家電向けに開発したJiniってのがあったな。
120デフォルトの名無しさん:01/11/11 03:34
>>119は誤爆。
>>113
最近のOracleの一時表は、セッション単位とトランザクション単位で使えるよ。
>>115
Object Browserがいいよ。安いし。
Windowsでしか使えんけど。
ちょっと質問。
今度関わる事になったシステム(DBはSQL Server)、開発はもう
既に後半に入っているようなんだけど、何故か「全ての」テーブルに
キーが設定されていない。

こういうのってアリなの?
124デフォルトの名無しさん:01/11/11 15:38
いちおあげとこう...
>>123

まぁ、純粋なストレージとしてしか使わないのであれば可かなぁ。
でも、そんなテーブル構成だとすると、正規化もなにもやってないでしょ。

あとで死ぬことになること必至と予想。
まあ設計したやつは首だな。
まぁ、そういうテーブルを作れるという意味ではアリだな。
「キー」というのが、「制約」なのか「インデックス」なのか不明だが、
十分に小さいテーブルで、制約もいらないなら、両方いらない。
128デフォルトの名無しさん:01/11/11 22:44
KeyにNullを使いたいんで主キー群にPrimary Key制約を使わず、
一意制約だけをかけているのはダメですか?
129デフォルトの名無しさん:01/11/11 23:11
Fkey を設定してないんです!
>>128
nullを使いたいということは、意味的に主キーでは無いと思う。
131デフォルトの名無しさん:01/11/11 23:16
>>130
主キー群の1カラムにnullがあっても主キーは主キーでしょ。
いろんな意味でダメ
133デフォルトの名無しさん:01/11/11 23:24
>>132
どんな意味で?
おそらく設計がダメ。
確実に性能的にダメ。
RDBの基本的なことを知らずにテーブル設計をしているようなのでダメ。
135デフォルトの名無しさん:01/11/11 23:40
>>134
具体的に説明してよ?
キーにNullがあるとNull以外の列を検索するのは早くなるよ。
136デフォルトの名無しさん:01/11/11 23:42
>>135
134を相手にするな。
>>134は人から聞いたことを鵜呑みにしているだけの厨房だよ。
137130:01/11/11 23:43
>>131
そういう技術的な意味じゃないんだ。

nullを使いたいということは、要するに「不完全な(未定義の)データ」と
いうことだよね。
一方、主キーというのは、データを一意に識別するもの。
だから、不完全なデータを一意に識別するというのは「意味的におかしい」
ということ。
138130:01/11/11 23:44
>>136
性能は実装依存かもしれないけど、基本的には>>134の言うことは
間違いじゃないと思うけど。
139130:01/11/11 23:51
ところで、セルコも、キー候補の項目のみならず、他の属性も
「原則null使用不可」って主張してたんじゃなかったかな。
記憶違いかもしれないけど。
140デフォルトの名無しさん:01/11/11 23:54
>>137
主キーすべてがNull値をとるなら意味的におかしいといえるかも
知れないけど、主キー群の中の1カラムがNull値をとるケースが
あっても意味的におかしくはないのでは?
そのカラムがNull以外の時はそのカラムを含めないと一意識別が
できないけど、Null値をとるときはそのカラム以外の主キー群のみ
で一意識別ができるような場合。
141PG1一年生 こと 128:01/11/11 23:59
>>140
Null不可の場合、例えば「会員番号」なんてカラムがあったとして、
まだ会員番号を取得していない会員の会員番号をどう表現すべきなの?
奇妙な固定値をセットするのは逃げの策にしか思えないんだけど......
142123:01/11/12 00:00
ご意見サンクス。
んー、やっぱりワーク的な使い方限定とかでもない限り、やっぱ
キー(制約)が無いってのは怖いスよね...
とりあえず設計者に意図を確認してみますわ。

...しかし、開発初期段階で誰か一人でもツッこまんかったのだろうか?
会員番号を取得してなければ会員のテーブルにはいるわけない、というのが
RDBの普通の設計なんだが、君のところは違うのか?
144PG一年生:01/11/12 00:03
>>142
その「キー制約」ってのは、一意制約+NOT NULL制約=PRIMARY KEY制約
の意味ですか?
つぎの、性能面。

いまあるRDBは、NULLが許可された列をキーにする場合、
キーの比較を、値の比較・Null値のチェックの二段階で行う。

Null値がないと保証されたキーを使用する場合、
値の比較だけで済む。

インデックスを使用する場合、インデックスだけをチェックするか、
インデックス+Nullかどうかの二段チェックをするか、の差になるので
やはり、遅い。
そういう基本的なことを押さえていないように見受けられた。

さて、三つとも具体的に説明したがなんか質問あるか?
147130:01/11/12 00:07
>>140
んーと、ごめん。この議論を続けるには、資料を読み直して、記憶を
掘り起こす必要があるので、ちょっと中断させてください。

>>141
これは、>>139に対するコメントかな?
会員番号が無い会員がいるということだね。

DDLで言うと、どういうテーブルを想定してます?
148PG一年生:01/11/12 00:07
>>143
別に実例ではなく、例えばの話しをしたんだけど.....
そりゃ業務しだいでしょ。
申請があればとりあえず登録しておくが、正式な手続きを経て会員番号が
発行されるまでには時間が掛かるから、会員番号がない会員が存在する
場合もあるんじゃないの?
>>144
文脈からして、primary key制約のことじゃないの?
あくまで例としてだよね。

その場合、正式な会員のテーブルと、
未登録(予約のみ)会員で別のテーブルを作るのが正解だろう。

正式な会員と未登録の会員は別物だ。
RDBに何かを処理するとき、いちいち正会員か、そうでないかを
区別しないといけないだろ?
もしかして、申請があっただけで同じテーブルに入れちゃうなんてこと
YahooBBみたいなとこではやってるかもね。

非開通なのにモデム送りつけたり、
非開通なのに、契約者数に数えてたり...
>144 >149
その通りス。俺って言葉が足りない...鬱
つーか、こいつらは「リレーション」の意味をまず勉強する必要があるな。
154PG一年生:01/11/12 00:15
>>150
あえて会員番号を持った会員と、持たない会員を区別する必要がないんだよ。
会員番号が未発番なのは事務手続きの問題であって、会員であることにはかわりない。
すべての処理で会員番号をもった会員と同等に扱われる。なのに別テーブルにするのは
違和感があるし、性能的にも得策ではないように思うんですが?
>151
ワラタ
いやぁ、DB壊れたらしいし、実はMDBだったんじゃねぇの?(死
>>154
YahooBBの顧客DBつくったのお前だな
>>154
で、主キーは何?
その場合、会員番号以外に主キーを持たせろよ。

連番でもなんでもいいから、登録時に主キーをつけろ。
>154
既に前のレスで書かれてるけど、会員番号以外の項目で
その会員を一意に判断出来る作りにすればOKなだけだよ。

別テーブルを作るかどうかはまた別の話。
160130:01/11/12 00:20
>>154
その「会員番号を持たない人たち」を識別する属性は何だと考えてます?
注意!注意!
会員番号はあくまで表示・検索用のおまけデータであることが判明しました。
Yahoo!BBの新顧客データベースの仕様を作るスレってココですか?
会員数取得クエリー

SELECT COUNT(*) FROM KAIIN_TBL

モデム発送用クエリー

SELECT NAME, YUBIN_NO, JUUSHO FROM KAIIN_TBL
164130:01/11/12 00:24
なんか>>154に攻撃が集中してますね(汗

僕は「一意キー(群)にnullを含めることの是非」の意見がまとまるまで、
この話題からは手を引きます。
165130:01/11/12 00:25
s/一意キー/主キー/
166PG一年生:01/11/12 00:25
実際は下記のような構造なんです。
Delivery#(出荷番号)がないものは、Product#(製造番号)で
一意識別が可能。Delivery#(出荷番号)があるものは
Product#(製造番号)+Delivery#(出荷番号)でないと一意識別
できない。

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
11111111 Null----- aaaaaaaa 999999
22222222 Null----- bbbbbbbb 999999
33333333 XYZ000001 aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999
44444444 XYZ000003 aaaaaaaa 999999
44444444 XYZ000004 dddddddd 999999
55555555 Null----- aaaaaaaa 999999
66666666 Null----- aaaaaaaa 999999
77777777 XYZ000005 aaaaaaaa 999999
77777777 XYZ000006 aaaaaaaa 999999
77777777 XYZ000007 aaaaaaaa 999999
まとまるまでもなにも、RDB設計時の常識として、
キーにnullは使わないことになってます。
168130:01/11/12 00:27
>>167
うん、僕もそう思ってるんだけど、根拠が示せないから、その根拠をさがそうと思って。
169PG一年生:01/11/12 00:27
>>167
常識としては知っているんですが、その理由を知らないもので......
許してください。今年入社したばっかりなんです。
>>168
>>143 >>145がその根拠。
今更だけど、NULLっていう存在自体がなんかキモイのは私だけ?
172130:01/11/12 00:32
>>170
んーと、僕が探そうと思っているのは、>>145のような技術面じゃなくて、
>>143の根拠。

>>169
最後にひとつ。
>>166のテーブルはおかしい。
33333333 null
という状態を許すにもかかわらず、そのレコードを2レコード作ることが
出来ない。それにもかかわらず、2レコード存在している。
173PG一年生:01/11/12 00:35
>>170
でも>>166の例で、Delivery#で検索する場合、
Delivery# is null の列はインデックスが作成されないからインデックスが
コンパクトになる。だからnull行が大量にある場合には、Null以外の検索は
高速になるよ。
>>166
その設計だと、出荷するまで製品を一意に識別するキーがないね。

主キーをつけないか(最近のDBでは可能)
一つ一つのブツを一意に識別するためのキーを作りなさい。

Serial(PK) Product# Delivery# xxxxxxxx yyyyyy
---------- -------- --------- -------- ------
0000000001 11111111 Null----- aaaaaaaa 999999
0000000002 22222222 Null----- bbbbbbbb 999999
0000000003 33333333 XYZ000001 aaaaaaaa 999999
0000000004 33333333 XYZ000002 cccccccc 999999
0000000005 44444444 XYZ000003 aaaaaaaa 999999
0000000006 44444444 XYZ000004 dddddddd 999999
0000000007 55555555 Null----- aaaaaaaa 999999
0000000008 66666666 Null----- aaaaaaaa 999999
0000000009 77777777 XYZ000005 aaaaaaaa 999999
0000000010 77777777 XYZ000006 aaaaaaaa 999999
0000000011 77777777 XYZ000007 aaaaaaaa 999999

Product#とSerialを複合キーにしてもいいよ。

どっちにしろ、ねじ一個一個みたいな、
個別に管理するのがばからしい製品じゃないんでしょ?
175PG一年生:01/11/12 00:37
>>172
下の文の意味がちょっとわかりません。
176PG一年生:01/11/12 00:39
>>174
個別に管理するのがバカらしい製品です。
>>175
>Delivery# is null の列はインデックスが作成されないから
というのは、DBの仕様であって、RDB一般の話しではない。
まず、その辺を理解しなさい。
個別管理するのがばからしい製品に出荷番号を個別に付けてしかも主キーにするな馬鹿
179PG一年生:01/11/12 00:42
>>174
実際の表は174みたいな連番が主キーになっているんですが、
ユーザーインタフェースに現れない列が主キーなのが非常に
わかりにくいと思ったものでカキコしてみました。
180PG一年生:01/11/12 00:45
>>178
馬鹿は余計ですが......
クレームつけられたら、どのロットの製品か特定する必要があるんです。
181130:01/11/12 00:50
レコードが無い状態から、

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
22222222 Null----- bbbbbbbb 999999
33333333 XYZ000001 aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999

に成長するまでをDMLで考えると、このテーブルには、これだけでは
わからない「ある制約」がある(隠されたビジネスロジックになっている)。

具体的に言えば
Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
22222222 Null----- bbbbbbbb 999999
33333333 Null----- aaaaaaaa 999999

という状態の次には
Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
22222222 Null----- bbbbbbbb 999999
33333333 Null----- aaaaaaaa 999999
33333333 Null----- cccccccc 999999
とは出来ないが、

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
22222222 Null----- bbbbbbbb 999999
33333333 Null----- aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
22222222 Null----- bbbbbbbb 999999
33333333 XYZ000001 aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999
とは出来る。
馬鹿は取り下げるよ。

ユーザーインタフェースに現れない列が主キー
になるのは、別に珍しいことじゃないよ。

>>179でいってるような意味の設計をしてるなら、
出荷済み製品のテーブルをつくって、そこに
出荷済みの製品の連番と、出荷時につけた出荷番号を対にして、
いれておきなさい。

その出荷番号は、個別の製品を管理するテーブルに
入れるべき値ではないよ。
だから、お前ら全員「関係モデル」から勉強しなおせって!
184PG一年生:01/11/12 00:56
>>182
珍しくないのは、RDBMSの製品の多くが主キーにNullを許さない
仕様になっているからではないのでしょうか?
今知りたいのは、なぜそういう使用になっているかなんです。
185PG一年生:01/11/12 00:58
>>181
そのとおりです。
181に示したとおりの状態をたどります。
>>184
主客転倒。
RDBMSの実装が主キーにnullを許さないから駄目なのではなく、
駄目だから実装がそうなってる。
187PG一年生:01/11/12 00:59
>>184
だからなんでダメなの?
>>186
勘違い発言なので取り消す。
>>143>>145がその根拠だって。

主キーしかないテーブルがあったとして
Nullを二つ入れようとしたとき、

両方の挿入を許す作りにすると、
同じNullなのに二つ入ってしまうという矛盾が生じる。
RDB的にダメ。

二つ目を禁止するには、
すでにNullが入っているかどうかを調べなければならない。
が、Nullは、インデックスとは別枠で管理しているので、
その比較を行うだけで莫大なコストがかかる。
製品的にダメ

というわけで
ダメなの。

OK?
ついでにいうと、Nullをインデックスに含める仕組みも思いつくが、
実際作ろうとすると無駄が多いのでダメ、といいうのが実情だ。

RDBでテーブル設計をする場合、キー値にNullを許すのは、
基本的にダメ、というのが常識。
>>189
複数の属性を複合主キーにしようとしたときに、そのうちのどの属性も
nullを使ってはならない、の説明になってないので駄目。

それから>>143も論理的な説明ではない。
つまるところ「駄目だから駄目」と言っているのに過ぎない。
>>189で十分説明になってるんだが、分からないかなぁ。

これ以上はきちんとした、RDBの解説書を読んでくれ。
オレは別にRDBの設計者でもないし、先生をやってるわけでもない。
193PG一年生:01/11/12 01:07
>>189
システムの構造上Nullの識別にコストがかかるからと言う意味なの?
Delivery#が未発番という状態を示すのにNull以外の値を使えばいいということ?
194デフォルトの名無しさん:01/11/12 01:09
>>192
わからないなら答えないでください。
>>192
全然十分じゃない。

>複数の属性を複合主キーにしようとしたときに、そのうちのどの属性も
>nullを使ってはならない、の説明になってないので駄目。

の説明になっていない。
なお、今の議論はこっちのほう。単一属性を主キーにしたときの話はだれもしていない。

>分からないかなぁ。
分からないよ。だって、説明してないし。
196デフォルトの名無しさん:01/11/12 01:10
>>192
誰も先生をやってくれとはたのんでないよ。
>>193
>>182を読んでね。
どこのSEに頼んでも、だいたい>>182の設計になると思う。

万が一同じ表で出荷番号を管理しなくちゃいけなくて、
キーとして検索しなきゃいけなかったりする場合、
かわりに空白' 'をいれて、出荷番号だけで一個の
インデックスを貼ればいいよ。

一度>>182のやりかたで、テーブルレイアウトを考えてみて。
198デフォルトの名無しさん:01/11/12 01:14
連番属性を主キーにするというのは逃げの手段だよな。
論理的には不要な属性だし。
複合キーの話しを説明しなきゃいかんとはね。

複合キーのいずれかにNull値が許されている場合、
インデックスが使用できなくなる。
Null値をインデックスとは別に管理しているからだよ。
>>198
同意。
>>174は駄目な見本。
>>182が正解(のうちの一つ)。

データベースがわかっている奴がいてほっとしたよ(藁
>>199
アホか。

そんなRDBMSの実装や技術的な話をしているのではなく、
論理的にどうなのか、という話をしているのだ。
202PG一年生:01/11/12 01:19
>>197
実際には既に連番を主キーにしています。
でも、実装方法を教えてといっているわけじゃなくて
主キーのNullを許せば、そんなヘンな対応を取らずに
済むのに........
と思ったのでカキコしただけです。
「Delivery#未発番」という状態を示すには、Nullが
最もしっくりくると思うのですが。
Nullが不自然だから、>>182の様に設計するんだよ。
204PG一年生:01/11/12 01:23
>>199
実装の話しをするなら、
インデックスが使えないんじゃなくて、
Nullの列のみインデックスの適用が除外されるだけ。
逆に、NotNullの列の検索は早くなるというメリットもあるよ。
>>203
PG一年生は不自然ではないと思ってるんだろう。
よって「不自然だから」では説明になっていない。

まぁ、俺も、なぜ駄目なのか理詰めの説明が出来ないから、逝ってよしなんだが(爆
あーあー、はいはい。
検索キーにNUllいれてもいいよ。
はいはいおわり。
207PG一年生:01/11/12 01:28
>>205
そう不自然ではないと思っています。
つーか、「Delivery#未発番」という状態を表す値として
他にしっくりくる値を思いつかないんです。
208デフォルトの名無しさん:01/11/12 01:29
>>206
終わったと思うなら勝手にお帰りください。
209デフォルトの名無しさん:01/11/12 01:31
>>205
汎用機時代のファイルならタイプクリアっていう表現方法があったのにな。
>>182のように発番済みの製品を集めたテーブルを作るのが
RDBとしてもっともしっくりくる作りなんだけどね。

そのやりかたでもできるけど、
もうすこし、テーブルレイアウトの設計について考えてみた方がいいよ。

ただ、じっさいにRDBとして使うときのことをいうと、>>182の方が
性能面で有利だと思う。
未発番のレコードを処理するとき、どうするか?って問題があるよね。
説明が出来ないことにやっと気がついた>>206は、
捨て台詞を残して逃げていった。

カッコワルー。
206=182だよ
213デフォルトの名無しさん:01/11/12 01:41
>>210
わかります。
表を分けるというのは、RDB的にはしっくりくるのですが、
システム全体を見た時、あるいは業務的にもしっくりこない感じがするのです。
列の状態が遷移しただけで表を分割するというのは...........
分割じゃないよ。
出荷番号(PK) 製品の連番
------------ ----------

のテーブルをもう一個作るだけ。
元のテーブルにあった製品の連番は、いらない。

こういうこと。
215デフォルトの名無しさん:01/11/12 01:44
主キーにプライマリキー制約をあえて使わず、
ユニーク制約だけにするというのは、賢い選択だと思うがね。
同意
217214:01/11/12 01:45
製品の連番じゃない、
まちがえ。

元テーブルにあった出荷番号はいらない

のまちがい。
218PG一年生:01/11/12 01:49
>>214
ごめんなさい。
よく理解できないです。

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
11111111 Null----- aaaaaaaa 999999
22222222 Null----- bbbbbbbb 999999
33333333 XYZ000001 aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999
44444444 XYZ000003 aaaaaaaa 999999
44444444 XYZ000004 dddddddd 999999
55555555 Null----- aaaaaaaa 999999
66666666 Null----- aaaaaaaa 999999
77777777 XYZ000005 aaaaaaaa 999999
77777777 XYZ000006 aaaaaaaa 999999
77777777 XYZ000007 aaaaaaaa 999999



Product# xxxxxxxx yyyyyy
-------- -------- ------
11111111 aaaaaaaa 999999
22222222 bbbbbbbb 999999
55555555 aaaaaaaa 999999
66666666 aaaaaaaa 999999

Product# Delivery# xxxxxxxx yyyyyy
-------- --------- -------- ------
33333333 XYZ000001 aaaaaaaa 999999
33333333 XYZ000002 cccccccc 999999
44444444 XYZ000003 aaaaaaaa 999999
44444444 XYZ000004 dddddddd 999999
77777777 XYZ000005 aaaaaaaa 999999
77777777 XYZ000006 aaaaaaaa 999999
77777777 XYZ000007 aaaaaaaa 999999

ということでは ないんですか?
>>215
言っている意味がよくわかりません。
220214:01/11/12 01:53
Serial(PK) Product# xxxxxxxx yyyyyy
---------- -------- -------- ------
0000000001 11111111 aaaaaaaa 999999
0000000002 22222222 bbbbbbbb 999999
0000000003 33333333 aaaaaaaa 999999
0000000004 33333333 cccccccc 999999
0000000005 44444444 aaaaaaaa 999999
0000000006 44444444 dddddddd 999999
0000000007 55555555 aaaaaaaa 999999
0000000008 66666666 aaaaaaaa 999999
0000000009 77777777 aaaaaaaa 999999
0000000010 77777777 aaaaaaaa 999999
0000000011 77777777 aaaaaaaa 999999

Deliverty#(PK) Serial
-------------- ----------
XYZ000001 0000000003
XYZ000002 0000000004
XYZ000003 0000000005
XYZ000004 0000000006
XYZ000005 0000000009
XYZ000006 0000000010
XYZ000007 0000000011

こういうこと。
検索するとき・表示するときは二つの表を結合してください。
221デフォルトの名無しさん:01/11/12 01:55
>>219
上の例でいうと、
主キーは、Product# + Delivery# だが、この2項目に
プライマリキー制約(ユニーク制約+ノットナル制約と同等)を設定せず、
ユニーク制約でけにとどめて、NULL値を可能にするということ。
>>221
主キーがあるのがリレーションなのでは?と言って見たり・・・。
勘違いだったらスマソ。
主キーがなくても立派なリレーション(表)です。
224デフォルトの名無しさん:01/11/12 02:00
>>220
結合は上のテーブルを軸にしたアウタージョインだと思うが、
結果は結局、Deliverty#がNullの列ができる。
全部の製品を見たいときはouter join
出荷した製品を検索するときはinner join

OK?
>>222
勘違い。
ちなみに、第一正規形には主キーは必要ない。
第二正規形で始めて主キーが登場する。
227182=206=214:01/11/12 02:02
つかもう眠い。
後は勝手に本を読んでくれ。
228デフォルトの名無しさん:01/11/12 02:03
>>222
「主キーがある」ということと、RDBMSの提供機能である「PRIMARY KEY制約を適用する」
ということは違うと思うぞ。
痛い展開になっている模様。
ようするにまともにRDBわかってなくても仕事でつかちゃってるってことだ。
一応指摘しておくが、>>214は悪い設計の見本。
もうSerial#を入れてしまっていて、変更不可ならしかたないが。
232デフォルトの名無しさん:01/11/12 02:07
>>230
一番わかっていないのはチミだよ。
>>214じゃなかった。
>>220は悪い設計の見本。
234PG一年生:01/11/12 02:09
>>231 >>233
よい設計の見本を教えてください。
>>233こそ本物のYahooBB顧客DB設計者
実力と経験とうんちくもあります(藁
>>234
やだ。
なお、なぜ悪いのかの理由は>>198の通り(俺の発言じゃないけど)

正規化をしらなければまずはこれを勉強しろ(第三正規形まで)。
データベースの入門書も読んだことないんだろう?
238デフォルトの名無しさん:01/11/12 02:14
>>237
ケチはつけるが対案がない。
237は厨房の良い見本。
>>237
>>182の二の舞だぞ。
もうほっとけ
なお、良い設計を示して欲しければ、
Productの定義とDelivery処理の要件を提示しろ。
これがわからずに、あーだこーだ言ってもしかたない。
>>220の設計が悪いというのは言えるけどな。
241デフォルトの名無しさん:01/11/12 02:15
>>237は最近正規化を学んで、その言葉を使ってみたかっただけです。
>>240はYahooBBの経営者がこのスレを見て怒り狂うのが怖いので
必死に自分の設計を正当化しようともがいているのです。
>>239
そうしとくよ。吉外がいるみたいだからな。

>なお、良い設計を示して欲しければ、
>Productの定義とDelivery処理の要件を提示しろ。

は本気だからな>一年生

俺に限らず、良い設計見本を知りたければ最低限必要だろ。
244デフォルトの名無しさん:01/11/12 02:20
>>240
厨房丸出し。カコワルイ
245デフォルトの名無しさん:01/11/12 02:22
厨房の逃げ口上:
○○を勉強しろ
××を読め
246PG一年生:01/11/12 02:23
>>243
で、結局あなたは良い見本を知らないんでしょ?
247Error401(243):01/11/12 02:24
ああ、知らないね。
相手するのやめた。さよなら。
248PG一年生:01/11/12 02:26
>>247
さよなら。
眠いって場よ。

ところで>>220の意図するところは分かったか?
>>243がいう存在しないはずのデータがあって、
それをキーにしているのは不自然というのはもっともだけど
とりあえず、あれが一番よく使われる設計パターンだ。
あーあ、変な展開になってるな。
もう寝よ。
251PG一年生:01/11/12 02:33
>>249
>>220は理解しました。
でも、外部結合の結果は結局Nullの列ができるわけだから、
PRIMARY KEY制約を用いず、UNIQUE制約だけにするというのも
捨てがたい気がする。パフォーマンスが劣化するのは理解しているが、
業務的に実用に耐えるレスポンスなら
「Nullを含む主キーがあっても良いのでは?」という疑問は晴れません。
>>174の設計がいいんじゃネーノ?
253デフォルトの名無しさん:01/11/12 02:36
俺は主キーにNULLがあってもOKに同意。
254デフォルトの名無しさん:01/11/12 02:37
>>253
俺もそれに同意。厨房ばっかで困るよな、相棒。
まだやってたのか。

>>251
Nullを含まないものを主キーとするというのは定義。
よって、主キーにはNullを含んではいけない。

Q.E.D.
256PG一年生:01/11/12 02:46
>>255
Nullじゃなくて"*"なんてヘンな記号ならいいの?
Nullなんて実装手段を「定義」だなんていわれても......
>>256
>Nullじゃなくて"*"なんてヘンな記号ならいいの?

良いか悪いかを俺に聞かれてもこまる。
それは要件次第であり、それを知っているのは君だけだ。

>Nullなんて実装手段を「定義」だなんていわれても

nullは「実装手段」などではない。「未定義(不定)状態」という概念。
258デフォルトの名無しさん:01/11/12 02:51
>>255
256の言うとおり、番号未発番という状態を示すのにNULLを用いているに過ぎない。
表の論理的主キーなんてその値がNULLをとるか否かなど考慮しない。
259デフォルトの名無しさん:01/11/12 02:52
>>255
それは定義(それもいうなら定理だろ)でもなんでもなく、
RDBMS製品の仕様に過ぎない。
>>258-259
そうではない。
だとすると、なぜRDBMSの論理値が3つの値を取ることを前提に
理論構築されていることを説明できるのだ?
261PG一年生:01/11/12 02:57
>>260
番号未発番という状態を表すのにNullを用いてはならないと言っているだけですか?
>>261
その通り。

主キーの要件は「タプルを一意に決定できるもの」であり、
nullは「不定」を現す概念だのだから、主キーには使えないとしている。
これは定義なのだから、いくら「nullを主キーに使いたい」と言っても
駄目なのだ。

多くの(全てのかもしれない)RDBMSの実装では、「主キー」を
primary keyというconstraint(制約)で実装しているのだから、
primary keyにnullが使えないのは当然のこと。

Q.E.D.
なお、リレーショナルデータベースのモデルは、数学で厳密に定義
されているそうだが、俺はそれを知らないし、説明できない。

なお、俺が説明したことも誤りがある可能性はあるので、
その辺は承知しておいてくれ。
DB設計の入門書に書いてあることまだやってたのかよ。
ネロ
付け加えると、RDBの枠組みにnullという概念を入れてしまったことを
E.F.Coddも後悔しているというようなことをどこかで読んだ気がする。
(これは非常に曖昧な記憶なので間違っている可能性大)

Googleで検索してみたが、それらしいのがいくつかあったので、
興味があるなら、読んでみると良い。(E.F.Codd + null)
>>264
俺は起きたばかりなんだが(藁
質問者はもう寝たらしいので、勝手に話をすすめる。

未発送状態を"*"として、>>166のテーブルでProduct#+Delivery#を
PKとして良いのか?
あの表が他の表から完全に独立していて、なおかつ、将来拡張が
無く、Delivery#だけで、他と識別する必要がなければそれでよい。
つまり要件次第だな。

しかし、将来必ず更新される項目をPKに入れておくのは一般には
良くない。なぜならば、その項目をFKとして持つ表があった場合
Delivery#を更新する場合に、FKとして持つ表も更新しなければ
ならなくなる。
これは容易にシステム全体のデータの整合性を崩してしまう要因になる。
(ツールによるad hocな更新をしてしまったなど)。

ということで、「後から発送番号が付けられる」場合は、それを
単なる属性値として持っておくのが良い。
代わりに、システムが付番する「発送受付番号」のようなものを
作りPKとしておく。
つまり>>174のようにしておく。
>>202ということなので、今の実装で問題が無かったというオチだな。

なお、>>214は冗長だと思う。
特に「発送番号が付番済のもの」をひとまとまりに管理する必要が
なければ、テーブルを分ける必要がないと思う。

まぁ、データモデリングは人それぞれで、唯一の正解というものは
無いのが普通なので、どれが正解、どれが間違いとは一概には言えないもの。

ただし「無意味なSerial#」や「無意味な非正規化」は
間違いだとはいえると思う。
ん、ちょっと待てよ。
FK constraintを付けた場合、UPDATE出来なくなる実装のRDBMSが
あったような。これはRDBMSの実装依存の部分かもな。

更新されるPKなんてここ最近使ったこと無いので、>>267は微妙に嘘が
混じってる可能性があるので注意。
269mage:01/11/12 15:58
mage
270MB:01/11/12 16:12
>>262
>これは定義なのだから、いくら「nullを主キーに使いたい」と言っても駄目なのだ。
なんでその定義に従わなければならないんですか?
実装レベルでは、nullを許した方が性能がよくてもなおその定義に従うメリット
はなんですか?
>>270
というのであれば、主キーにnullを許す処理系を作って使えばいいじゃん。
いつまで、駄々こねてんだ。
>>270
PostgreSQLかMySQLを改造すれば?

俺は今まで主キーにnullを許すRDBMSを見たこと無いが、
それはそれなりの理由があると思う。それが何かは知らないけど。
そういや、主キーは更新不可というRDBもあったな。
273MB:01/11/12 16:33
>>271
初カキコなんですけど..........
>>270
>実装レベルでは、nullを許した方が性能がよくてもなおその定義に従うメリット
>はなんですか?

メリットなんかないよ。だから、>>271-272の言うように、自分の好きな
使用でRDBを作ってください。
>>270
主キーにnullを許すと、「null = nullが真」とせざるを得ない。
なぜならば、FKとしてそのPKを指定したときのことを考えれば明らか。
一方、「nullはあらゆるものと一致しない」という定義がある。
これは矛盾している。

主キーにnullを許すのであれば、「null=nullが真」という前提で
理論構築、実装をしなければならない。

そんなことするのめんどくさいし、移植性も損なわれるので、
既存の仕組みに従ったほうが良い。
これがメリット。
276デフォルトの名無しさん:01/11/12 16:56
>>275
なんか神学論争みたいだね。
>>276
そんなことないよ。
単純に、tbl1.col1(PK) tbl1.col1(FK)のときに、

select tbl1.col2, tbl2.col2 from tbl1, tbl2
where tbl1.col1 = tbl2.col1

がマッチしないよってだけ。だから、nullは「一意」という場面では
使えないよってこと。

使いたければ、ありとあらゆるものを変更する必要があるよってこと。
(誤)単純に、tbl1.col1(PK) tbl1.col1(FK)のときに、
(正)単純に、tbl1.col1(PK) tbl2.col1(FK)のときに、
279デフォルトの名無しさん:01/11/12 17:04
>>277
ヤパーリ、神学論争だ。
イスラムを侵攻するなら偶像を破壊せよ!
>>279
だから、違うって。純粋に集合論モデルの問題。
上のほうで誰か言ってたけど、E.F.Codd博士もnullの取り扱いには
困ったらしい。何度か理論体系の方向転換をしたらしいぞ。
281デフォルトの名無しさん:01/11/12 17:12
>>277の作るシステム目的は、いかに業務を効率化するか、ではなく
いかに論理に忠実か、なんだろうね。
282デフォルトの名無しさん:01/11/12 17:20
Nullを許すと性能が上がる理論が、さっぱり理解できないんだが
おまえら説明してください。
283デフォルトの名無しさん:01/11/12 17:22
説明するついでにRDBでよく使われるインデックスの仕組みについて
一度でも学んだことがあるかどうかも併記して置きなさい。
284デフォルトの名無しさん:01/11/12 17:28
NULLの列はインデックスの対象から除外されることを逆に利用して、
検索が頻繁に行われる行以外のインデックス対象列をすべてNULLに
設定しておくとインデックスの件数を抑制でき、NULL以外の行の
検索速度を上げることができる。

パフォーマンスチューニングのテクとしては結構知られている手法だ。
285デフォルトの名無しさん:01/11/12 17:32
で、バイナリツリーを使っているとして、どのくらい計算量が多くなるの?
中学校でてれば計算できるよね。

高校卒業してるんだったら、列の選択時にNullかどうかをチェックするコストも
全体の計算量に入れてみてね。
選択した列のがNullになっているかどうかをチェックするアプリケーションの
チェックにかかる計算料も数えておくとさらによいね。
ところで、今時Bツリーなんか使ってるRDBあんのか?
287デフォルトの名無しさん:01/11/12 17:34
ちなみに、>>284のテクはORACLEのパフォーマンスチューニングセミナー
で教えてもらったテクだよ。
どこでそんな糞テク教わったのよ(藁
JETエンジンのマニュアルか?
>>287
Oracle7.0.x時代の話か?
290デフォルトの名無しさん:01/11/12 17:38
>>289
8.0.4時代でっせ。
291デフォルトの名無しさん:01/11/12 17:42
OracleもSQL Serverも基本はBTreeだぞ。
クラスタ化してるかしてないかの違いはあるがね。
>>290
nullは必要な時に使う。これ常識。
そんな小手先テクニックぎっしりのテーブルなんか使いたくないな(藁
293デフォルトの名無しさん:01/11/12 17:49
7千万件ほどのテーブルに毎日1万件弱の行追加が発生するんだけど、
その新規追加行をバッチ処理で夜間に更新する。
7千万件の全行を対象にしたインデックスだと数分かかる処理が、
新規追加行以外のインデックス対象列をすべてNULLにしておくと
インデックスは1万件弱の新規行のみで作られるため、処理時間が
数十秒になった。
>>293
設計が悪い(藁
295デフォルトの名無しさん:01/11/12 17:52
>>294
どんな設計だったの?
296294:01/11/12 17:55
>>295
質問の意味がわかりません(藁
297さらでぃん:01/11/12 17:58
結局、論理だけじゃ飯は食えないってことだな。
>>293
それって、そもそもNull可にすべきだったカラムをNot Nullにしてたって
だけの話なんでしょ。それは概念モデルレベルでの設計ミス。

夜間バッチで大量に更新処理が入る場合は、Indexを削除して、
処理をするのが普通じゃないか?

Indexがある状況で、夜間バッチで更新時間を数分かかるのを
数十秒にするためだけに、Null不可のカラムをNull可にするのは
変だと思うぞ。
つーか、実際速くなるんだからそれでいいじゃん。
300デフォルトの名無しさん:01/11/12 18:07
>>298
>そもそもNull可にすべきだったカラムをNot Nullにしてた
プライマリキーはNot Nullにできないんだよ。知らないの?
>Indexを削除して、処理をするのが普通じゃないか?
7千万件のうちの1万件を検索更新する処理にインデックス削除したらもっと遅くなるよ。
徐々に糞スレ化してきた模様。
302デフォルトの名無しさん:01/11/12 18:09
>>300の追伸
当該のカラムはプライマリーキーの中のいカラムなんだよ。
303さらでぃん:01/11/12 18:12
>>299
効果はどうあれ、理論に抵触する設計は認められないって立場なんだよ。
>>302
話が良くわからんが、主キー以外のカラムで、Null可にすべき
カラムをNull不可にしていた。そこにIndexを作成していた。
で、それをNull可にしたら速くなった。
つーこと?
だったら、もともとNull不可にしてたのが間違い。

Indexの再作成は確かに遅そうだな。俺の間違い。撤回する。
305292:01/11/12 18:21
>>303
俺のことか?
「null」は使い方を誤ると、将来に禍根を残すので、使うべきところに
しか使っちゃいけない。これ常識。
306さらでぃん:01/11/12 18:21
>>304
本来主キーの中であるべき1カラムのムライマリキー制約を外し、
ユニーク制約のみにした。
それにより、夜間バッチで更新対象の1万件以外の当該カラムを
NULLにすることが可能になった。
307292:01/11/12 18:24
今までnull不可だと思ってたプログラマは、
where col1 = col2
とやっていたはず。
ところがこれをnull可にすると、マッチするはずだったものがマッチしなくなる。

で、全体を見直し、プログラムの変更をし、テストしなおす必要がある。

別に「理論」でいっているわけじゃなくて、null値属性を変えると、
とんでもない作業が発生する可能性があるから、良く考えて
設計しておくって話。
308292:01/11/12 18:26
>>306
ということは、それは「主キー」ではなかったのだ(ループ(藁
>>306
要するに、本来主キーでないものを主キーにするために、無理やり
Not Nullにしてたってこと?

だったら、それこそ設計ミス。
論理設計モデルと物理設計モデル、RDBMSの実装を利用した
テクニックをごっちゃにするから話がおかしくなる。

E.F.Coddを起源とするRDBのモデルにいちゃもんをつけたいなら、
新規にモデルを提唱して広めろ。誰も止めんぞ(藁
お前ら仕事一月くらい休んでいいから
きちんとRDBの仕組みを理解しろ(w
まとめてみる。
お前ら刹那的すぎ。

教科書レベルのRDBの設計の基礎を押さえているだけで
貴重な人材だと言うことでよろしいか?
ふむ、まるでHTMLにおけるw3c信者と実務主義者の争いのようだね。

違うか。
>>312
教科書レベルの事もきっちり押さえていない奴多すぎる。
べーター

デース
お前らはっきり言って、ISAMがお似合いです。
すげえ遅レス。
>>56

RBSとかTEMPとかREDOLOG置き場とかINDEX領域とかUSER領域とか、
同じディスク装置の上に入れてるだろ。

OracleのDBA向けの本を買って、テーブルスペースの
切り方を学んで、稟議書を書いてHDD買い足しなさい。
物理的に、それらのセグメントを分割しなさい。
とんでもなく低レベルなスレになっちゃったね。
「正規化」を勉強してから出直せ(プププ
>>314
というか、教科書レベルを*理解できない*奴が多いみたいだな(藁
教科書読まずにセミナーにいくと、
いいかんじに知識が偏るらしいな
321312:01/11/12 21:04
おい誰か反論してくれよ
ワシの暇をつぶしてくれ
>>321
的確な洞察により、反論は無いと思われます(藁
日付を空白にしたいとき何いれるの?
日付型はYYYYMMDDっぽい形式でCHARっぽい型で持つといいよ。
空白も入る。

dateやdatetime型はDBの種類によって精度が違うし、
バージョンによってサイズや精度が変わる(かもしれん)ので
あまり推奨されていない。
325デフォルトの名無しさん:01/11/12 22:23
>>323
DATE型なんて使わないな。
ついでにCHAR型も使わない。
NUNMER型も使わない。
全部VARCHAR2型だな。
使うときにキャストすればいい。
ぜんぜん突っ込み甲斐がないな、それ。
327プミポン:01/11/12 22:31
>>325
ついでに全部Varchar2(2000)すれば?
ExcelやAccessのValiant型と同じ。
男らしく和暦で入れとけ
漢だ・・・
330デフォルトの名無しさん:01/11/12 23:49
お前ら、ネタはマ板でやれよ。
日付(日時)は、出来る限りRDBが提供されている日付(日時)型を
使うのが吉。つーか、常識。
CHARにこだわるのは、化石COBOLER。あるいは、ネタ。
332デフォルトの名無しさん:01/11/13 00:43
>>331
で日時未入力はNULLでいいの?
>>332
いいよ。
上のほうでNullがどうこう言っているのは「主キーにNullを使いたい」という
野に対して「それは駄目」と言ってるだけ。
334デフォルトの名無しさん:01/11/13 03:20
板違いだが、JHBの「同値関係」論争を思い出したよ。
それもNULLがらみだったね。
NULLは諸悪の根源なのか??
>>334
まぁ、ここで「Nullを使いたい」と主張していた人は、
「だってそのほうがインデックスが小さくなるし、検索が速いでしょ」
が理由だからねぇ・・・。
同値関係の彼とはレベルが違うよ・・・。
ユニークキーをバイナリエディットしてNULLにしたら
検索速度が20%(当社比)アップしました
NULLキーマンセー
337デフォルトの名無しさん:01/11/13 07:22
>>331
DATE型使うと何が「吉」なの?
日付の計算をするときにいちいちdate型に直さないで済むってだけ。

別にいいこと有るわけではないよ
>>337
・RDBが用意しているSQL関数が使いやすい。
・表示フォーマットを操作しやすい
・日付の妥当性チェックなどをクライアントアプリでやらなくてよい
・バイト数が少なくてすむ
日付をCHARにした方がデメリットが多いので用意されている
日付型にしておく。これ常識。
341map:01/11/13 17:37
net.dataでwebを作成していますが、下記errorが出て、意味がわかりません。どうか教えてください。
DTWA000I: Net.Data detected an internal error DTWL032I: While communicating with
the specified SMTP server, the SMTP server returned the following error message:
342デフォルトの名無しさん:01/11/13 17:44
>>339
>日付の妥当性チェックなどをクライアントアプリでやらなくてよい
普通アプリでやるだろう。
オラクルのエラーメッセージなんかエンドユーザ向けに表示したら起こられちゃう。
Net.DataはDTWL032Iの内部エラーを見つけました。
(おたくが使っている)SMTPサーバとの交信中に
SMTPサーバは以下のエラーメッセージを返しました。

以下がねぇじゃねーか。
というより、エラーメッセージを
トラップできてないだけかもしれないが。
>>342
やらないよ。特にOOでは。
345デフォルトの名無しさん:01/11/13 18:10
>>344
「一意制約違反」みたいなメッセージをそのままユーザに見せるの?
クライアントで全てのエラーチェックをするのは時代遅れ。
>>342
339ではないが、
DBエラー番号があるだろう。
できれば、それもトラップして
ユーザ向けにメッセージ表示する。

342のところはDBのアクセスは全て
(業務)APなのか?

また、APに日付チェックを忘れた場合、
それにより引き起こされるデータ不整合の
被害の可能性と、
たとえ、ネイティブエラー表示で
ユーザが怒ったとしても、その場で
遮断するのと、
システム(会社)にとってはどっちが安全か?

強固なシステムはDBに業務ルールを
できるだけもたせる。
コンパイルチェックと
同じだ。
Int型とChar型の恩恵はわかるでしょ?
IntをChar型で保存しても良いわけだが、そうはしない。
それと同じ。
349デフォルトの名無しさん:01/11/13 18:30
>>346
クライアントでするかサーバでするかは同でもいいんだけど、
RDBMSが発行するエラーメッセージを生でユーザに見せるのか?
って聞いているんだけど。
350デフォルトの名無しさん:01/11/13 18:33
>>347
DBMSが変わったら業務アプリ大改造だね。
>>350
あたりまえじゃん。
RDBを単なるデータストアとしてしか使ってないの?
>>349
何をそんなにこだわっているのかわからないけど、当然見せないでしょ。
353339:01/11/13 18:45
>>342
>普通アプリでやるだろう。

うん、やってもいい。
日付型を使えば「やらないという選択もある」ということ。
例えば「ドメイン」という概念がある場合、それをRDBMSがチェックして
くれれば、クライアントアプリではやる必要ないでしょ?
そんな感じ。

>オラクルのエラーメッセージなんかエンドユーザ向けに表示したら起こられちゃう。

どちらにせよ、エラーメッセージは変換してユーザに見せます。
354339:01/11/13 18:49
そうそう、日付型を使えば、RDBMSの「暗黙の型変換」も使いやすい。
INSERTなんかで、「RDBが日付と判断できるフォーマット」であれば、
どういうフォーマットでもいいよね。

それと「ドメイン」というのは、例えば「郵便番号」とか「電話番号」とか
「メールアドレス」とか。

「メールアドレス型」ってのがDBに用意されてたら、それを使いたいと
思わない?
>354
いちお同意。
でもさぁ、なんかVBの「勝手にキャスト」みたいに、
なんとなく気持ち悪さが残ってしまう部分がない?
けっきょく使うけどな(ワラ
356デフォルトの名無しさん:01/11/13 21:39
俺が今いるプロジェクトでは、テーブル参照/更新用のクラスに全ての型変換や妥当性チェックを
集中させています。DBMSの機能を使ってできるチェックは限られているから結局アプケーション側
にも妥当性チェックは残る。だったらいっそ、アプリケーション側にロジックを集中させようとい
う発想です。データベースへのアクセスはすべてそのクラスを通じて行うのでDBMSの制約機能を
使う必要はありません。だからDBMSはただのストレイジです。
最初は違和感があったけど、これはこれで理にかなっていると思う。
ちなみに、カラムは全部Varchar2(2000)です。各カラムの桁数制限やデータタイプは、それ用の
ユーザーテーブルで管理しているので、桁数、データタイプの変更はダイナミックに
行うことが可能です。
(゚д゚)アイタクチガ....フガググ
>>356
それはそれでいいんじゃない?
XML on RDBMSなんか、その方法を取ってるものも多いみたいだし。

どこでエラーチェックをするのか、どこにビジネスロジック層を
構築するのかは、それぞれのシステムのポリシーで決めればいいことだしね。

ただ、メタデータをもRDBで管理してしまうと、パフォーマンスの検証や
保障が難しくない?
開発中はDBとアプリ層でそれぞれ助長性のあるチェックをしておくけど
開発終盤で品質テストを行うころに、DBから無駄なチェックをはずしていく。

入力データくらいかなあ。厳しくチェックするの。

あとは参照整合性制約程度でいいんでない?
>>356
>全部Varchar2(2000)
つーのはアバンギャルドだな。
シパーイしても性交してもそのプロジェクトの結果を教えてくれ。
361デフォルトの名無しさん:01/11/13 22:23
INDEXを使っているセッションがある時に
別のセッションでDROPしちゃったらどうなるの?
また使用中にDROPしちゃってすぐにCREATEしても
大丈夫?
やったことないが、INDEXを誰かが読んでいる瞬間は、
排他が効いて削除できないだろ。

CREATEし直してもよいが、
そんな場当たり的なadminがいる職場は
いつか必ず何か大きな失敗をするぞ。
読んでいるっても、インデックスに排他をかけて読む人はあまりいないから、
消せるんじゃないか?
DROPしたりCREATEしたり、アプリの中でやっているのか?
まさかね.....
364デフォルトの名無しさん:01/11/13 22:36
問い合わせの処理を上げたいのです。
索引を付ける他に何かよい方法はないですか?
とりあえずSELECT *の *を止めなさい。
>>364
リアル系のアプリが動いているまっ最中に索引を消したり作ったりするのか?
索引が消えている瞬間にアクセスしたら悲劇だな。
データに不整合が発生することはないけどな。
367オラクルマスター(ブロンズ):01/11/13 22:45
かなり前のレスでここの人達から意見を貰った者です。
更新が遅い場合は更新前にインデックスを削除し
更新後に作成するという意見を頂ました。
さっそくその通りやろうかなと思ったのですが
>>361で書いたように他のセッションで使用中の
可能性があるわけでして・・・
>>367
そんなに長く排他を保持するのか?
リアル処理ならロックを保持しているのは普通一瞬だろう。
とりあえずindex領域を、専用の物理媒体に分けて置いてみたら?
削除->更新->再作成は、オンライントランザクションがないと
保証された時間帯にやるならいいけど、
だれかが繋いでるかもしれないときにやるのは馬鹿。

あと、本当にそのインデックスが有効に使われているかどうか
調べて、それほど処理に貢献していないようなら消しちゃうのも手だぞ。
370オラクルマスター(ブロンズ):01/11/13 22:52
>>368
いえ。インデックス削除から作成までは
1秒もかからないです。
その間にインデックスを使っているセッションが
あったらどうするんだ!って言われて、、、答えられなかったです(泣
371デフォルトの名無しさん:01/11/13 22:54
さあ、お前ら正直に手を挙げなさーい。

Oracleのスキーマ、scottの上で業務を行っている者は
手を挙げなさーい。
>>370
使っている人がいたら1秒ほど遅くなるだけだと思うが......
別に検索が不整合になるわけでもないし、インデックスに排他検索
をかけているバカもいないだろ。
373オラクルマスター(ブロンズ):01/11/13 22:58
>>369
ご意見ありがとうございます。
インデックスはちゃんと使われておりました。
あと更新する行やインデックスのPCTFREE等の値を
いろいろ変えてためしたのですが処理速度に
変化なしでした。。。
>>370
索引のDROP&CREATEが1秒くらいなら、索引を使っている人があったと
しても全然気がつかないと思うYO。
「その間にインデックスを使っているセッションがあったらどうするんだ!」
『どうもしません。どうなると言うんですか?』と答えろYO。
375369:01/11/13 23:01
>>373
ごく基本的なことなんだけど、
indexは、別領域に取ってある?
376オラクルマスター(ブロンズ):01/11/13 23:01
>>372
そうなんですか?
例えばインデックスを削除した直後に別のセッションで
インデックスが貼ってあった表を問い合わせをした
場合はインデックスは使われないですよね?
という事はその問い合わせ処理は重くなるのですよね?
377オラクルマスター(ブロンズ):01/11/13 23:04
>>375
表領域は索引用の表領域がありまして、
CREATE INDEXの時にそれを指定しております。
>>376
その1秒ほどの隙間にはまればな。
でも、その不幸な処理はバッチ処理のように大量処理じゃないんだろ。
インデックスが効かなかったからといって絶望的に遅くなるわけじゃないんじゃないか?
もしその1秒にはまる処理が存在するのがイヤなら、そのインデックスが
ついている表全体に排他をかけちゃえよ。そうすれば1秒の隙間にはまる
ことはない。
379369:01/11/13 23:14
一秒程度で済むなら、drop&createだな。
あとは、専門家にきちっと見てもらわんとわからんわ。
indexを置いてるdiskがraid5で書き込み遅いとかいうだけだったら萎える。
>>379
OMブロンズなら一応専門家じゃないか?
382オラクルマスター(ブロンズ):01/11/13 23:17
>>378
排他ってSELECT文にFOR UPDATEをやればいいのですか?
FOR UPDATEはSELECT文も待ち状態に出来るのですか?
レベルが低くてゴメンなさいm(_ _)m
>>382
そうだよ。for updateだよ。
1秒くらいなら表ロックしても問題ないでしょ。
>>381
パフォーマンスチューニングの専門家に頼めということ。
性能評価やってる会社とかツールあるよ。
385オラクルマスター(ブロンズ):01/11/13 23:24
>>381
ぜんぜん違います。
専門家に頼めるような予算がなくて。。

>>383
インデックス削除前に表ロックすれば良いのですね?
ありがとうございました。

>>384
ここで聞くのも勉強になりますね。
>>384
ツール高いよね。
俺のところじゃ、SQL Expertってのを使っているが90万ほどする。
中規模以上のDBを構築してるなら、何らかの手段で
手を打っておくべきだと思うけどね。

専門家を雇ったら90万じゃ済まないヨ

値段に見合わないなら、チューニング止めちゃ売ってのも手だね。
台数にもよるけど、PCサーバならCPU取っ替える方がやすいし。
388デフォルトの名無しさん:01/11/14 00:18
オラクルマスター(ブロンズ)は消えちゃったかな?
ウソ教えちゃった。排他はFOR UPDATE? と聞かれて思わず
YESと答えたけど、前のレスの流れだとテーブルロックのことだった。

テーブルロックなら、
LOCK TABLE テーブル名 IN EXCLUSIVE MODE WAIT;
です。
前のスレってどれだ?
これがPart1じゃないのか?
390オラクルマスター(ブロンズ):01/11/14 00:58
>>388
良かった起きてて(藁
いえいえホント助かります。

>>389
>>67です。
前ってのは昔って意味です。

おやすみ。
おぃおぃ、どんなロックをかけても
検索処理はロックされないぞ。

それにDDL(createやdrop)文は実行直後に
強制commitされる(transaction処理不可能)。
従ってロックをかけても無駄に終わる。

更新処理はユーザから不満が出るほど遅いのか?
インデックス再構築に1秒くらいだったらそれ
ほど遅くはならないと思うのだが。

対象処理で発行されるupdate文は1文だけか?
それとも複数発行されるのか?
なんかAP側のロジックの問題くさいが。。。
結論:オラクルマスターは使えない。旧二種みたいなもの。
393391:01/11/14 10:56
ふっと思ったのだが、
それより、更新対象行を特定するのに
インデックスは使っているのか?

パフォーマンスにおける
インデックス作成と更新処理は
相反するものだが、
おれは、インデックス更新より、
更新対象行を特定するのに、
テーブルスキャンする方がオー
バヘッドが高いと思う。

更新処理のクエリプランを調査し、
更新対象行の特定にきちんとインデックスが
使われているか確認すべし。
こうしてちょっと突っ込んだところを教え込むのに
オラクルマスターという素養は役立つだろうけどね。

Nullがどうのとかごねるやつの何倍もまし
>>393
インデックスを削除すると更新が速くなるって書いてなかったっけ?

そんなような気がしたから、インデックス更新にかかるコストに
着目してたんだが..
396393:01/11/14 20:54
>インデックスを削除すると更新が速くなるって書いてなかったっけ?
おれの予想通り、現在、更新対象行の特定に
テーブルスキャンしているのならば、
削除前と削除後を比較すれば削除後の
パフォーマンスはインデックス更新
処理が抜ける分当然上がる。

削除前はテーブルスキャン+更新+インデックス更新
削除後はテーブルスキャン+更新
ということだ。

だから、
インデックススキャン+更新+インデックス更新
がもっともパフォーマンスが上がるのではないか
ということ。
この場合は2つのインデックスの更新をしなけれ
ばならないがテーブルスキャンよりもパフォーマ
ンスは良いと思う(はずだ)。

そこの現場を見たわけでもないから、あくまで予想で
はずれかもしれないが、考えられる要因のひとつでは
ないかと思う。
とりあえず更新処理中のCPU使用率とページングの状態、I/O要求数と
I/Oにかかった時間の平均をドライブごとに調べろ。

でないとなんで遅いのか想像でしか語れない
398デフォルトの名無しさん:01/11/14 22:10
>>394
Nullがどうのとかごねるやつの方が何倍もまし
399オラクルマスター(ブロンズ):01/11/14 23:29
今日は午前中にチューニング関係の本を買って
午後はずっと本と会社のOracleの設定とのにらめっこでした。
初期化ファイルのパラメータはとても重要なんですね。
全部デフォルトだったような・・・
皆さんはどうやって値を決めてるんですか?
とりあえず本に載ってたように
shared_pool_sizeは30M
db_block_buffersは10Mにしました。
log_bufferは1Mにしました。
1つ疑問に思ったのですがdb_block_bffersの単位は何ですか?バイトではなさそうなんで・・・
今は5000に設定しています。
db_block_sizeが2048だったので2048*5000で10M?
みたいな感じにしました(汗
最初の設定は3200だったのでサイズの認識としては間違ってないのかなと・・・

>>398
NULLがどうのこうの言う人なんているんですね。
何でだろう?


更新が遅いという件なのですが更新前にインデックス削除
更新後にインデックス追加という方法が採用されました。
皆さんありがとうございます。
これからもよろしくお願いします。です。
正直、君うざい。
お勉強日記は、自分のホムペでやってくれ。
おいおい、オラクルマスターって本当に使えなそうだな(藁
402デフォルトの名無しさん:01/11/15 01:41
学校の課題でjavaで全く一から自分でデータベース作れっていわれてる
んだけど、どうやって作ったらいいの?本屋行って、本、見てもデータベースソフトの利用の仕方
とかしか載ってなくて困ってます。
>>402
まっどてぃーちゃー
404デフォルトの名無しさん:01/11/15 02:01
学校の課題でjavaで全く一から自分でデータベース作れっていわれてる
んだけど、どうやって作ったらいいの?本屋行って、本、見てもデータベースソフトの利用の仕方
とかしか載ってなくて困ってます。
データベースって言っても、ピンからキリまであるが、どの程度のものを
要求されてるんだ?
マップやハッシュで読み書きして、
シリアライズでデータを永続化する程度のものじゃない?
>>406
それはインデックスファイル
408名無しさん@徒歩で帰宅:01/11/15 03:06
>>405
まったくだ。『学校の課題』って言うけど、どーゆー学校の、
どーゆーコースの、どーゆー進度で出された課題なんだい?

それから、『データベース』について。
俺が厨房だった15年前、名前と住所と電話番号だけしか登録できなくて、
ソートも検索もできないような住所録プログラムを BASIC で作ったけど、
それも一応データベースの実装例と呼びうるし、Oracle とか SQL Server
みたいに複雑で巨大なヤツもそうだ。
つまり、データの入力、保存、出力の機能が実装されていれば、概念的には
一応データベースの実装といえるわけ。

『学校の課題』にしても『データベース』にしても、言葉がカバーしてる範囲が
広すぎて答えようがない。その範囲をもっと狭めるような説明をしてくれれば、
具体的なアドバイスもできるけどね。

つーわけで、これ以上のことは、404 のレス以降に。
409デフォルトの名無しさん:01/11/15 03:37
sqlが使えるリレーションデータベースなんだけど、来週までにできます
か?
出来るでしょ。
411デフォルトの名無しさん:01/11/15 03:49
>>409
ちょっと大変ですが、
何とか間に合うでしょう。
できないこたぁないが、かなりきついよ。
>>409
絶対無理。最低でも10日はかかる。
俺なら3日で出来る
課題でSQL RDBMSの実装なんてネタだろ?
何事も要件次第。
この程度の課題は専門学校でも常識ですが何か?
俺35だけど、今から専門学校逝こうかな
419名無しさん@徒歩で帰宅:01/11/15 04:35
そんなモン一週間で実装できるヤツが専門学校なんか行くか ゴルァ!
すぐにでも世界に羽ばたいてくれ。

…っと…感情的になっちゃったけど、よく読んでみれば、別にフル
スペックのSQLとは書いてないな。
416の言うとおり。
たとえば、CREATE TABLE と DROP TABLE の実装だけなら今日の
午前中にできるぞ。

とかゆって、氏ね!ボケが!
>>419
画面からSQL入れて、結果を画面で表示する程度のリレーショナルデータベースなら、
SQLがフルスペックでも1週間あれば出来る。
サーバでのセキュリティや負荷分散まで実装すると、1ヶ月くらいかかる。

とかゆって、氏ね!ボケが!
421デフォルトの名無しさん:01/11/15 07:01
java.sqlライブラリ使って
CREATE TABLE送ればいいだけでは?
>>421
ですね。
お前ら、ネタはマ板にいってやれよ
424デフォルトの名無しさん:01/11/15 19:15
age
425名無しさん@徒歩で帰宅:01/11/15 23:57
>>421
それだめ。
既製のDBにアクセスできるだけよ。
>>425
さすがにネタでしょう。
っていうか、ここまでくると、質問もネタなら、回答もネタだらけって感じだね。
427仕様書無しさん:01/11/16 03:48
Oracle8i 金色ディスクに焼いて提出すれば?
オラクルコピーゴールドに認定
430map:01/11/16 12:06
smtpのエラーなんですね。調べてみます。ありがとうございます。
さらに教えてください。net.dataとSQLでコメント行を記載するにはどうしたらいいですか?
>>430
えーと、net.dataが何なのかしらないんだけど、SQLのコメントということなら、
--(行コメント。ほとんどのDBで使える)
/* */(部分コメント。非標準)
が使えます。
はずした?
432404:01/11/16 19:53
以下がその課題です。
めちゃくちゃ苦しんでおります。

リレーショナルデータベースを実装せよ。
データベース操作機能として,SELECT演算,PROJECT演算,
そしてJOIN演算を実装せよ.また,データベース検索機能として,
述語形式の検索式によるマッチング機能とユニフィケーション機能を実装せよ
(実装には今回実装したデータベース操作機能を利用せよ).
課題3で実装したプログラムを利用して複数のオンラインオークションサイト
(Yahoo!オークションなど)から得た情報の分析を支援するシステムを実装せよ.
具体的には,オンラインオークションサイトから得たデータを今回の課題で
実装したデータベースに入力し,ユーザがデータベースを利用して商品の分析
(ソート,特定の条件を持つ商品のピックアップなど)ができるようにすること.
433デフォルトの名無しさん:01/11/16 19:58
性能のことを考えなければ何とかなるな
>>432
隣の席の高橋君に聞きたまえ。
435デフォルトの名無しさん:01/11/16 20:04
俺なら憧れの田中さんに聞いて愛情を深めたいが。
436404:01/11/16 20:12
データはファイルに保存しておくとしてSELECT演算などは
どのようにやればいいのでしょうか?
437デフォルトの名無しさん:01/11/16 20:14
再起下降型の構文解析を行うオブジェクトでも作りなさい。
(javaで作るのは果てしなくばかばかしいがな)
本日の営業は終了致しました。
又のお出では御遠慮下さい。
439デフォルトの名無しさん:01/11/17 11:15
大量のデータを追加したり削除したり繰り返すと
index_statsの値が増えてパフォーマンスが落ちるね。
これを増やさないようにする方法ってある?
REBUILD以外で。
つーかさー、質問するんだったら、RDBMSの名称とバージョン位書こうぜ。
>>439は俺の知らないRDBMSだからどうでもいいんだけど。
>>440
どうでもいいなら書くなよ。
つーかオラクルだろ?
どう考えても。
バージョンはわからんが。
>>439
こまめにコミットしろ(藁
大場久美子?
コミットさ〜ん
445デフォルトの名無しさん:01/11/18 02:57
C言語でODBC経由でデータベースをアクセスする方法を考えているのですが、
参考になりそうなサイトありませんか?
それと、ODBCって古いのでしょうか。
ODBCは古くないけどCが古い
ODBCは古くないけど遅い
448デフォルトの名無しさん:01/11/18 15:16
>>447
マジですか?
じゃあ何が速いの?
>>448
oo4o、ADO
450デフォルトの名無しさん:01/11/18 16:52
>>449
マジで言ってます?
つーかドライバ次第では?
OO4OはOracle専用だし。
ODBCが遅いのはwindowsの話しだろ
ado,rdo,dao
早い
C言語でOracle相手ならOCI使ってバキバキ
呼んじゃった方が速くない?
まともな設計をする方が速い。
設計でカバーできない部分は、
ハードでカバーすりゃいい。
OracleだったらPro*Cがデファクトスタンダード。
他のDBは知らん。
>>456
Pro*cobolもね
458デフォルトの名無しさん:01/11/18 20:51
ODBCが遅い、というのは迷信。
少なくともMSのODBCのできはひどい
>>458
迷信じゃないよ。
461デフォルトの名無しさん:01/11/19 03:24
ADOってはやいの?
AOLより少し速い
ADOを使用して、Accessのファイルに接続してるんですけど、
リンクテーブルの元のテーブル名って取れるんでしょうか?
(Odbcリンクの時は、DSN)
Adoxを使えば、
Propertiesの「Jet OLEDB:Link Datasource」「Jet OLEDB:Remote Table Name」
から取れるんですけど、速度などの関係で、
できれば使いたくない。
どなたか教えてください。お願いします。
464デフォルトの名無しさん:01/11/20 09:49
「データベース全般の話題」ですな。
>463
ローカルマシンにあるMDBならDAO使ったほうが幸せになれるよ〜
466map:01/11/20 11:41
>>431
ありがとうございました。m(_ _)m
467map:01/11/20 11:44
初心者なので、最近とっても参考にしてます。
DB2のテーブル定義を作成しています。
チェックデジットを使った管理番号を用意したいのですが、
属性はIntegerでよいのでしょうか?
ほかのがよければ、最適な定義を教えてください。
また、チェックデジットを自動で行う機能はあるのでしょうか?
それとも、自分でプログラムしないとだめですか?
客が管理番号にアルファベットを混ぜないと分かっているなら整数でもよい。

客「あー、管理番号なんですけど、仕入れ業者は商品によっては -Aとか-Bをつけるんですヨー」

SE Σ(゚д゚lll)ガーン
>>468
ハハハ、ありがち、ありがち。
表示の時だけ冗長な分類記号を付加するのと、
サブキーとして分類記号や枝番をつけるのは
けっこうあるから注意。

客先の担当者を小一時間ほど問いつめてミロ。
471デフォルトの名無しさん:01/11/21 14:58
油age
472デフォルトの名無しさん:01/11/23 01:00
Access使えねー記念age
473デフォルトの名無しさん:01/11/23 01:13
どこぞのADSLプロバイダは顧客の解約処理を手打ちDELETE文でやってるんじゃないかと心配 age
474デフォルトの名無しさん:01/11/24 02:34
>473
いや、ファイル共有で壊したんだろと予想age
475デフォルトの名無しさん:01/11/24 02:41
access&ODBC接続でテーブルを開いて一個ずつ手で削除してるんだろうと予想 age
476デフォルトの名無しさん:01/11/26 15:01
むしろExcel使ってやってる事すらありえるような気がしないでもないage
477デフォルトの名無しさん:01/11/26 15:47
いや、あの会員数をexcel共有はむりでは?
ああ、でも、担当地区毎にxlsファイルを分けておけば...

え、え、そんな、まさか?age
478デフォルトの名無しさん:01/11/27 01:14
新事実。実はTextファイルだったんですage
479デフォルトの名無しさん:01/11/27 01:15
コクヨのノートだったりして age
480デフォルトの名無しさん:01/11/27 01:16
>>473-479
ところで誰か真相教えて
本当は単語帳。これ定説。
482デフォルトの名無しさん:01/11/27 04:32
実はさ、ずーっと疑問に思ってたんだけど、恥ずかしくて
今まで訊けなかったことがあります。今日は思い切って
訊いちゃいます。

Webと連動したDBで、例えば PostgreSQL + PHP + Apache のような場合に、
Postgreにトランザクション開始の「begin;」を送るPHPのページに
Web利用者がアクセスしたとしよう。
で、commitするまでの間に、他のWeb利用者がこのPHPページにアクセスして
もういっちょ「begin;」送っちゃったら、Postgreからみると同一ユーザが
beginを二回送ってきたことになるんだよね? これって処理がおかしく
ならないの?

つまりさ、不特定多数のユーザが使用するWeb + DBシステムにおける
トランザクション処理っていうのは、同時アクセスのことを考えると
実現できないんじゃないかと思ってるんだけど、そこら辺どうなんですか?
>>482
別プロセスだから大丈夫
別セッションの間違いだろ
>>484
PostgreSQLはコネクションごとにバックエンドが別プロセスになるのよ。
ページまたがってトランザクションかけるなよ。
って突っ込みはないのか?
>>486
ふつうはページごとにconnectionがcloseされるからトランザクションは
アボートされるけど、persistent connectionの時は注意が必要だね。
488484:01/11/27 14:27
>>485
しらんかった。
出しゃばってすまん教えてくれてありがトーン
489482:01/11/27 15:47
>>483, 485
ありがとう。長年の疑問が解決されました。

>>486, 487
そっか、プロセス毎なら基本的に単一ページ内でcommitしないと
ダメだね。複数ページに渡るトランザクション処理は書いた
ことないけど。
490デフォルトの名無しさん:01/12/02 20:37
ちょっと質問、
excelのシートに対してもsqlつかえるんですか?
バッチ更新をクライアントサイドでやるな、阿呆。
昼飯食っても終ってないやないか。
>>490
ODBCで繋げば可。
やってみれ。
493.490:01/12/03 15:15
>>492
確かにデータソースに指定できますね。驚きました。
でもselectのfrom句には何を入れたらいいんですか?
SQL>select * from [?] ;
494.490:01/12/03 15:30
ここ見たらわかりました。
http://webtech.gihyo.co.jp/uldev/uldev_sanko.htm
495.490:01/12/03 15:38
SELECT * FROM B3:D7
みたいな範囲指定もできるみたいですね。
updateなんかもできるのかな?
496492:01/12/03 15:39
>>493
ACCESSならODBC要らなかった、スマン(^^ゞ
どこぞのBB待ちぼうけサイトを覗いたら、ほんとに部署ごとにでーたべーすをもっていたらしいage
498デフォルトの名無しさん:01/12/06 00:37
age忘れage
499デフォルトの名無しさん:01/12/06 01:21
ちょと教えてくだされ。

oracle8iで9桁の数値(管理用の番号)があって、それをSQLで
上3桁-中3桁-下3桁っていうふうに分けたいんだけど、
なんかスマートな方法ない?

今は
select trunc(hoge/1000000) as hoge1,
(trunc(hoge/1000)*1000-trunc(hoge/1000000)*1000000)/1000 as hoge2 ....
とかやってるんで泥臭い。

で、これがキーになって他のテーブルとリレーションとってるんだけど、
RDBの設計として
  1.はじめから3つのフィールドに分けて管理する
  2.上記のように表現部をなんかの手段でサバく
  3.2つ用意する
のどれが本筋なんでしょ?

個人的には2なんだけど・・・
猿でも分かるようにTO_CHARとSUBSTRINGで取り出す。
んでもってTO_CHARとSUBSTRINGの組み合わせでindexをはっとく。
501499:01/12/06 02:02
>>500
多謝!

こんな便利なものがあったとわ・・・
ちゃんとSQL勉強しないとだめだな。
明日リファレンス本買ってこよっと。


で、リレーションの取り方なんですが
なんとなくindexはuniqueにしたいんだけど・・・

RDB初心者なんで、全然わかってない上での考えなんだが、
今の個人的な考えとしてはDBはデータの器なんで出来るだけシンプルに
設計してるんだけどこの考え方って間違ってるの?
んなんで、今作ろうとしてるのは
  Table:データの器(リレーションはこっちでとる)
  View:クライアントで使ったりするためにTableを整形したもの
つー感じで作っとります。
関数使ったインデックスってuniqueにできなかったっけ?
>>499
普通 1 だろ。
テーブル構造見た時にキーフィールドが明確でないってのは好きじゃない。
504デフォルトの名無しさん:01/12/06 11:40
教えてクンで申し訳無いが
>>494
見たいなサイトでテキスト(CSV)ODBC接続を解説してあるサイトっ
て無い?
色々調べたんだけど、なかなか良いサイトが無かった。
ttp://www.dd.iij4u.or.jp/~wanderer/sp/data/vbs/15.txt
↑みたいなサイトは見つけたんだけど、データソースとかスキーマファイル
の仕様解説とかがあるサイト知っていたら教えてください。
505499:01/12/07 00:09
>>503
なる。

で、気になってるのは、数十のテーブルとその番号をキーに
リレーション取ってるわけで、なんか各テーブル全部に3つフィールド
用意するのはなんか美しくないなーと思った次第で。

今やってるのは、現状動いてるものの標準化なんだが、
もし、キーが増えた場合(可能性結構高い)、
1つのキーならケタを増やせばいい(つーか多めに取ってる)けど、
3つに分けて設計したんだったら、各テーブル全部にフィールド
追加しないといけないし・・・

正規化の考えから逝けば分けるのが本筋だろうが、
リレーションとるのは1つのuniqueなフィールドのほうが綺麗かなと。

標準化考えずに作るべきか・・・
9桁の管理番号というのはDB以外で使うユニークな番号なんじゃないの?

管理番号id, 管理番号a, 管理番号b, 管理番号c

というテーブルを作って他のテーブルでは管理番号idとリレーションを取れば?
507499:01/12/07 02:55
>>506
9桁の番号は、保守的には意味がありますが、他の点では意味がないです。
んなんで、リレーションのキーをsequenceとかで作ってもいいんですが
それをやるとリレーションを切ったり戻したり出来なくなりそーなんで
最初の案に行き着いたと。

2つ用意しといて、Triggerとかでリレーションのキーを作る方が
保守しやすいんで、その手で逝ってみます。

実際運用してる人たちはどう設計してるんだろ?



自分の環境小出しにする初心者君になってもうた(鬱
508名梨産:01/12/07 02:58
初歩的な事ですいません。

VCでODBC経由でMS-SQLServerにアクセスするアプリを開発したいのですが、
DBはVBでJetを使ってローカルのMDBをいじったことしかありません。

どこから手をつけたものやら。。。
参考になるサイトなどあればお教えください。
509デフォルトの名無しさん:01/12/07 09:40
>>508
SQL Server 相手なら普通ODBCではなくADOじゃないの?
それとも、VCで組む場合は ODBC の方が一般的なのかな?
DBへのアクセス量が少なければODBCでも、まあ、いいけど。
一般的ってことはないよ。
511タンポポ:01/12/14 04:29
厨房的質問ですいませんが、質問させてください。
情報とファイルに格納することと、データベースに格納することとの違いって何ですか?

最近になってパソコンをいじり始めたので・・・
512Kusakabe Youichi:01/12/14 04:35
In article >>511, タンポポ/511 wrote:
> 情報とファイルに格納することと、データベースに格納することとの違いって何ですか?

それは「データベースとは何か」っていう質問にすぎないですね。
ひとことでいえば、
すばやく検索したり利用したりするための仕掛けや整頓つきかどうか
っていう違いでしょう。


> 最近になってパソコンをいじり始めたので・・・

そんなことをいちいち言い訳するやつは馬鹿です。
>>511
データベースは超高機能なファイルです。
>>511
DBにデータを格納すれば再利用しやすい。
>>511
単なるデータストレージではなく何重にもデータを守る仕組みがあるよ。
>511
例えるならば
ファイルに保存する→タンス預金。
DBに保存する→銀行に預ける。
なんか微妙によいたとえだな。
つまり、いつ破綻するかわかんないからDBなんか
使ってられねぇぞという事でよろしいですか?
つまり小さいデータならファイルに保存した
ほうが効率的ということでいいですか?
データベースは、項目名や属性までデータベース側で保持しているので
単なるファイルを、専用プログラムで読み書きするよりも使いやすいです。

初めて dBaseV使った時は感動しました。
つまり、DBに保存すると利息がついてウハウハという事でよろしいですか?
522デフォルトの名無しさん:01/12/16 23:26
オラクルのテーブルの設定でPCTFREEとPCTUSEDってあるけど
あれってセグメントの%なの?
それともエクステント?
PCTFREEが50で1エクステントが10Mの場合
5Mが常に空き状態って意味なのですか?
それとも指定出来るのですか?
例えば、表領域でとか、セグメントでとか、エクステントでとか。
わかりづらい説明で申し訳ないのですが、よかったら教えてください。
少し気になったもので。
523Error401:01/12/16 23:42
>>522
データブロック(だっけか?)の領域に対するパーセントです。
ブロックサイズって指定したでしょ。あれ。

4KブロックでPCTFREEが50%の場合、1レコード100バイト使うなら
20レコードINSERTするとそのブロックは一杯になり、次の1レコード
をINSERTしようとすると、次のブロックが使われる。

んで、何レコードか削除した後でINSERTするとき、いつでも今削除した
ブロックが再利用されるというわけではない。PCTUSEDを切る所まで
削除したときに再利用される。

簡単に説明するとこんな感じかな。
524デフォルトの名無しさん:01/12/17 00:58
PL/SQL初心者です
どうコーディングしたらよいか、教えて下さい
テーブル  キー  条件
----------------------------------------------
(1)
MST1 KEY1 MST2.TYPE = 'A' (MST2.ID = MST3.ID)
MST2 ID
MST3 KEY1

(2)
MST4 KEY1 FLG = '1'
KEY2

(3) MST5 KEY1
KEY2

※(1)でMST1よりKEY1を取得
(2)で(1)と紐付くMST4のKEY2を取得
(3)でMST5より(2)で取得したKEY2の金額を取得
   金額の集計単位はMST1の月単位
 尚(2)で取得したKEY2は以降の処理で使用する為ワークに保存する
525デフォルトの名無しさん:01/12/17 01:24
PL/SQL初心者です
どうコーディングしたらよいか、教えて下さい
テーブル  キー  条件
----------------------------------------------
(1)
MST1 KEY1 MST2.TYPE = 'A' (MST2.ID = MST3.ID)
MST2 ID
MST3 KEY1

(2)
MST4 KEY1 FLG = '1'
KEY2

(3) MST5 KEY1
KEY2

※(1)でMST1よりKEY1を取得
(2)で(1)と紐付くMST4のKEY2を取得
(3)でMST5より(2)で取得したKEY2の金額を取得
   金額の集計単位はMST1の月単位
 尚(2)で取得したKEY2は以降の処理で使用する為ワークに保存する
526デフォルトの名無しさん:01/12/17 14:22
>>525
もう少し具体的な質問をしろ。
(1)PL/SQL上でのデータの検索(SQL検索)の仕方がわからない
(2)データの検索方法はわかるが、検索した結果を次のSQLへ使う方法
   が分からない。
(3)そもそも、PL/SQLのコーディング方法が分からない。

とりあえず、ソース晒してみそ。
527Error401:01/12/17 14:57
>>526
そもそも、Queryのレベル(Joinの方法とか、集計関数の使い方とか)が
わからないような気がするんだけど・・・。

ってことで、

(4)クエリーが思い浮かばない

も選択肢についかー。
528デフォルトの名無しさん:01/12/17 19:41
javaでservlet作っているんですが、DB(Access2000)を利用する必要が出ていて困っています。
とりあえず作ったんですが。エラーが出ます教えてください。

java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver]パラメータが少なすぎます。1を指定してください。

いったいどういう意味なのでしょう。
>528
そのまんまです。
クエリを開くときのパラメータが足りてないっす。
530デフォルトの名無しさん:01/12/17 20:42
>>529
どうすればよいですか?
パラメータはプログラムから引き渡す数値のことですか?

ResultSet myRs = mySt.executeQuery("SELECT * FROM FRIEND_DAT WHERE Number=\"" + number + "\"");

WebページのフォームからNumberを指定すると、DBから検索してレコードを出力するようにしたいのですが。
Numberのフィールドにあるデータを指定しているのですが。
531デフォルトの名無しさん:01/12/18 00:47
255です。
クエリーがよくわかりません。
とりあえず頑張って書いてみました。
ASの使い方もよくわかりません。

SELECT SUM(M5.KINGAKU),
MTUKI,
MBILLCODE,
MKEY2,
FROM MST5 M5,
(SELECT M4.KEY2 AS MKEY2,
M1.TUKI AS MTUKI,
M1.BILLCODE AS MBILLCODE
FROM MST1 M1,
MST4 M4
WHERE M1.KEY1 IN
(SELECT M2.KEY1
FROM MST2 M2,
MST3 M3
WHERE M2.ID = M3.ID
AND M2.TYPE = 'A')
AND M1.KEY1 = M4.KEY1
AND M4.FLG = '1'
ORDER BY M1.BILLCODE,
       M1.TUKI)
WHERE M5.KEY2 = M4.KEY2
GROUP BY MBILLCODE,
MTUKI;

もう1つ質問です。
DATE型の日付から年月だけとるにはどうしたらいいですか?
>530
とりあえず、Execute時に使用されているSQL文をデバッグかなんかで表示して、
そのままコピペでAccessのクエリに張ってみ。
533526:01/12/20 11:06
>>525=531
亀レススマソ。
ところで>>531で書いたクエリーは動いたんか?
少なくとも、入れ子の中のORDER BYはいらないと思うのだが・・・

んで、このクエリーはPL/SQLを使わないでSQLだけでやろうとしたも
のだよな?PL/SQLを使うんだったら、>>525で書いた(1)〜(3)
のクエリーを別々に書いてみそ。値を指定できない部分があると思う
けど、それは変数に置き換えてな。まずはそこからだ。

後、ASの使い方は列名に別名(エイリアス?)を与えるために使う。
例)
SELECT a.BBB FROM
(SELECT COUNT(*) AS BBB FROM TABLE1) a
こんな感じで、列名が存在しないものについても列名の定義が使える
ようになる。
DATE型の日付から年月だけとるにはTO_CHARを使う。
SQL PLUSで以下の様に叩いてみそ
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') from DUAL
これで今日の日付が取れる。もちろん、この場合CHAR型に変換されている。
534デフォルトの名無しさん:01/12/20 16:56
oracle8iをlinuxにインストールしようと思ったんだけど
途中までいってX-Windowが入ってないと入れれないことを知って鬱
535デフォルトの名無しさん:01/12/20 18:18
>>534
どっかにXserverが動くマシンがあれば、そこへ画面を飛ばしてやれば
OKなんだけど。その調子じゃ、それも無いんだろうな。
536 :01/12/20 18:19
>>534
Java部分はSolarisとかも同様
パッチとかでも使うのでXを入れる方向で設計しなおしとけ
VGAでいいから入れとけば?
たぶんインストールでしかつかわんし。
538デフォルトの名無しさん:01/12/20 21:49
いまOracle8iのクライアント作ってるんだが
予算無い客のために同じものAccessで作れっつー話が来た。
Access使うのは気が向かないんでフリーのRDBMS使いたいと思ってるんだが
フリーのRDBMSってどうよ?

開発はDelでやってる&DBサーバーのOSはWinの可能性が高いんで
1. InterBase
2. MySQL
3. PostgreSQL
ぐらいで考えてるんだが、InterBaseのライセンスがいまいちわからん。

このへんのRDBMS業務で使ってる人いる?
Accessでダメな理由でもあるの?

というのはおいといて
業務に必要な用件が決まっていなければ、
Accessでやれってかんじだね。

InterBaseは詳しいことは知らない。
MySQLはISAM。軽いし、オンライン業務はそもそもこれで足りるものの方が多い。
PostgreSQLは、コミュニティの人には悪いけど、バグが目立つ感じ。
簡単にキャッチアップできる運営体制だったらこれでもいいよ。重いけど。

ただ単に金がないだけなら、Accessで十分でしょ。
バックアップや保守に掛ける金もないんだろうし。
540一日がかり。:01/12/20 22:27
愚痴なのでsage。

>●Oracle9i Database Release 1 for Windows NT/2000 EAP(早期アクセスプログラム) ダウンロード
>disk1〜disk3までがデータベースのファイルです。9ifsはOracle Internet File System for Windows NT/2000 R9.0.1のファイルです。

>ファイルダウンロード
>disk1.zip (512,263,014Byte)
>disk2.zip (585,422,601Byte)
>disk3.zip (151,381,927Byte)
>9ifs.zip  (105,244,508Byte)

ま、待て・・・・・・1GB超をDLするんか(汗
>538
小規模だがマルチユーザってならMSDE。無料。最強。
クライアントツールが無いのがアレだが、まあその辺の
SQLServerからひっこぬいとけ(ワラ
MS-Accessのランタイムのようなものってある?
つまりAccessで作ったものを
Accessのインストールなし環境で使いたい。
>542
でべろっぱーEditionならあるよ。
おまえらきちんと使用許諾よんでおいてください
545538:01/12/21 11:18
>>539
AccessでC/S組む自信が無いともいう(w

>>541
MSDEってDelと一緒に配布できないライセンスらしーな。
これよくしらんのだが、AccessがSQL Serverに見えるってかんじのもんなの?

Del使うのも結構いばらの道だな(w
Accessって安定し動いてる?
2つのテーブルを結合て絞り込みを行う場合って、
select * from a,b where a.code = b.code and a.code = '10';

select * from (select * from a where code = '10') a, b where a.code = b.code;
ってどっちが速いでしょう?
基本的には前者が速いと思いますけど
場合によっては後者が速かったりするのでしょうか?
速いってのは検索速度の話です。DBMSによっても変わったりするのかな。
548デフォルトの名無しさん:01/12/21 11:39
後者は副照会用結果表を作るので明らかに遅いのでは>>547
>>548
なるほど。表を動的に作成しているのですね?
では、副問い合わせはなるべく使用しない方が
よいですね。
550デフォルトの名無しさん:01/12/21 12:34
>>547
PostgreSQL で EXPLAIN(実行計画と予想コストの表示) したら同じ結果が出たよ。
その辺はオプティマイザ次第じゃないかとおもいます。
551ElseIf:01/12/21 12:39
スレ違いかもしれないけど。ASPでAccessのDBで、宿泊の予定表を入力する画面を
作っているんだけど、宿泊が月をまたぐ場合、レコードを1つ増やさなくてはいかん。
If Session("宿泊開始月") <> Session("宿泊終了月")でイコールでない場合
レコード追加ってどう書くの?ASPはVBScript使って書いてる。

ACCESSで次のレコードに移動とか言うのがあったようななかったような・・・
>>550
DBMSが最適なSQLに変換してくれるのでしょうか。
SQLを考えるとき、どうしても副問い合わせの方が
簡単に考えれるので多用してしまいます。
553デフォルトの名無しさん:01/12/21 13:19
>>552
使用するDBMS次第でしょう。
一度、ご自分の環境でテストしてみては?
554デフォルトの名無しさん:01/12/21 13:20
最適SQLに変換は当たり前>>552
オプティマイザ。
555冬厨なのれす:01/12/21 13:26
>ElseIfさん
If Session("宿泊開始月") <> Session("宿泊終了月") Then
Connection.Execute("INSERT INTO ...")
End If
556ElseIf:01/12/21 14:00
>冬厨さん
ありがとうございます〜!!何だかうまくいかないんですけど(w
頑張ってみます!!
557デフォルトの名無しさん:01/12/21 14:21
>>545
> MSDEってDelと一緒に配布できないライセンスらしーな。
VBの適当なプログラム混ぜりゃ良いじゃん。
それこそメインメニューをVBで作り、主要処理は全部Delにするとか。

> これよくしらんのだが、AccessがSQL Serverに見えるってかんじのもんなの?
違う、SQL ServerからGUI管理ツールを取っ払い最大DBサイズを2GBとしたもの。
558538:01/12/21 17:22
>>557
> VBの適当なプログラム混ぜりゃ良いじゃん。
あんた頭いいな(藁

> 違う、SQL ServerからGUI管理ツールを取っ払い最大DBサイズを2GBとしたもの。
Access∈SQL Serverってことれすか?(∈の使い方あってる?)
559557:01/12/21 17:47
>>558
というか
ACCESS2000を使う場合(それ以前のバージョンはネイティブは無理)
Jetベースだと *.MDB、SQL Serverベースだと *.ADPという拡張子の別物になる。
ADPだとテーブル、ビュー、ストアドプロシージャ等の作成が出来る。
それ以外にもコマンドベースのOSQLってのもある。

でもやっぱりエンタープライズマネージャーとBookOnlineは有ったほうが良い。
要するに機能限定版SQLServerという認識でOKっしょ。
MSはクライアント数5以下を推奨してるみたい。
ただしちゃんとしたクラサバになるから、Accessオンリーの時みたいな
ダルい組み方すると後で泣く事になるかも。

>559
クエリアナライザも〜
561デフォルトの名無しさん:01/12/26 08:56
仕事前age
562デフォルトの名無しさん:01/12/26 11:14
で、MSDEってどうやってインストールするんですか?
>562
OfficeのCDに入っとるで
Office2000にSQL Server2000のCDはあるけど、それですか?
コンポーネントのインストールでMSDEのみを入れることは出来ないのかな。
>>564
Office2000(又はAccess2000)の \SQL\x86\Setupから 「Setupsql.exe」を実行。

Access2000+MSDEによる「体験的」 SQL入門:山田健一著 技術評論社 2380円(税別)
程度は買って読んだ方が良いかと思われ。

(個人的にはテーブル、フィールド名に日本語を使いまくるので違和感あるが...)
有難うございます>>565

ちょうど間違ってSQL Server2000のCD\MSDE\setup.exeしてたとこですぅ。
>Office2000(又はAccess2000)の \SQL\x86\Setupから 「Setupsql.exe」を実行。

SQL Serverとして起動するようになちゃった。やっぱ本なきゃ出来ないな。
使い方がすげー分かり難いのはどうかと思うな。
568デフォルトの名無しさん:02/01/17 10:45
postgoresでの検索方法について教えてください。

レコードが20万件あり、そのうちの複数Colに対してフリーワード検索をかけたい
のですが、単一テーブルにも関わらず6秒ほどかかってしまいます。

where col1 Like '%keyword%' or col2 like '%keyword%' or ...
と書いているので、当然インデックスは使われていません。
このようなクエリーをを実用レベルの速度(2秒以内)で返すにはどのような
方法があるのでしょうか。
569デフォルトの名無しさん:02/01/17 11:44
>>568
スキーマとサンプルデータを教えなさい。

570568:02/01/17 12:14
CREATE TABLE hoge (
ID serial,
noSearch1 varchar(16),
noSearch2 varchar(16),
Search1 varchar(255),
Search2 varchar(255),
noSearch3 varchar(12),
noSearch4 varchar(12),
Search5 varchar(8),
Search3 varchar(20),
Search4 varchar(80),
Search5 varchar(255),
Search6 varchar(16),
Search7 varchar(16),
Search8 varchar(80),
Remarks9 varchar(80),
CreateTime date,
UpdateTime date default current_date not null,
);

データは、住所、名称、ふりがな、電話番号、などです。
検索対象のカラムにはとりあえずインデックスは張ってあります。

宜しくお願いします。
571デフォルトの名無しさん:02/01/17 12:39
%keyword% でなくて keyword% ならindex searchに
なるでしょう。indexがbtreeである必要がある。
これではだめ?
572568:02/01/17 12:49
いや、それはわかってるんだけど、フリーワード検索なもんで
前方一致、後方一致ともにかけたいのです。
573デフォルトの名無しさん:02/01/17 12:55
無理っぽい。
10000rpmのディスクを買うとか(w
574568:02/01/17 13:02
そうですか。。。

ありがとうございました。
もしくは徹底してメモリ積むとか?
576PPP:02/01/17 13:34
PostgresSQLの検索の仕方で、自分ではわからないので
助言をいただけないでしょうか?
下記のテーブルでtimeが新しく入っているgroup順で、
出力したいのですが、わかるかた、教えていただけないでしょうか?
お願いいたします。

テーブル
number | group | time | name
----------------------------------------
1 | 1 | 02/01/11 21:00 | taro
2 | 2 | 02/01/11 21:01 | jiro
3 | 1 | 02/01/12 03:03 | momo
4 | 1 | 02/01/12 04:03 | pepe
5 | 1 | 02/01/12 06:03 | toshi
6 | 2 | 02/01/14 18:02 | mama
7 | 3 | 02/01/15 18:00 | mmmm
8 | 4 | 02/01/15 18:04 | jjjj
9 | 1 | 02/01/16 21:00 | test


出力後
number | group | time | name
----------------------------------------
9 | 1 | 02/01/16 21:00 | test
5 | 1 | 02/01/12 06:03 | toshi
4 | 1 | 02/01/12 04:03 | pepe
3 | 1 | 02/01/12 03:03 | momo
1 | 1 | 02/01/11 21:00 | taro
8 | 4 | 02/01/15 18:04 | jjjj
7 | 3 | 02/01/15 18:00 | mmmm
6 | 2 | 02/01/14 18:02 | mama
2 | 2 | 02/01/11 21:01 | jiro
577デフォルトの名無しさん:02/01/17 16:50
これだけでは何がしたいのかさっぱりわからない。
日本語も不明瞭。
nameが入ってきた順に出力したいというだけではないの?
もし、INSERTしかしない(UPDATEなし)なら
select * from table でいいじゃん。なにも小細工する必要なし。
578デフォルトの名無しさん:02/01/17 16:52
>>575
今は4gigくらいのメモリは簡単につめるから
確かに可能だな
579575:02/01/17 17:52
>578
っしょ?
チューニングよか前にハードスペック上げたほうが安いケースが多いし。
もちろん、しっかり設計・実装されているという大前提があっての話だけどね。
580デフォルトの名無しさん:02/01/17 21:33
>>568
挿入&更新を頻繁に行わないのであれば、
検索用の列を追加してそこに各列の値を結合した物を入れておき、
その列に対して部分一致検索をかける。

それでも満足な速度が得られないならば、
全文検索ソフトとの連携を検討する。
581デフォルトの名無しさん:02/01/18 17:22
>>538
MySQLはトランザクションがない。
あっても限定されてる。なくても
いいなら高速でいいけどね。
582まりりん:02/01/18 19:29
こんにちは

現在、PostgreSQL7.1を使用してます。
group番号が同じもので登録日が新しいものを
優先して表示するので、groupの番号が同じ
ものをひとつのかたまりにして、3つかたまりを
表示したいのですが、selectで行おうと思うのですが
どのようにしたらよろしいでしょうか?

select * from tetable order by group desc,
登録日 asc; まではできたのですが・・・・。



対象のテーブル(tetable)の内容
group | name | 登録日
---------------------
2 | 太郎 | 02/22
4 | 真美 | 02/21
2 | 一郎 | 02/12
1 | 雅恵 | 02/11
2 | 花子 | 02/04
3 | 次郎 | 02/04
5 | 聡 | 02/03
4 | 正子 | 02/02
1 | 太郎 | 02/01

※ 結果
group | name | 登録日
---------------------
2 | 太郎 | 02/22
2 | 一郎 | 02/12
2 | 花子 | 02/04
4 | 真美 | 02/21
4 | 正子 | 02/02
1 | 雅恵 | 02/11
1 | 太郎 | 02/01
>>582
結果セットに 5|聡|02/03を含まないのは、記述ミス?仕様?
584デフォルトの名無しさん:02/01/18 20:20
descなら5,4,2,1の順で出力されるはずだけれど?
585デフォルトの名無しさん:02/01/18 20:21
>>576,>>582
そっくりですねえ。同一人物?
586デフォルトの名無しさん:02/01/18 20:33
select * from table order by group desc, 登録日 desc;
これで望みの結果がでそうだけれど、何が問題になっているの?
groupは予約語だから避けたほうがいいと思うぞ。
587デフォルトの名無しさん:02/01/18 20:35
おお、3つの塊っていうのは上位3グループの
ことを指しているのか
588デフォルトの名無しさん:02/01/18 20:37
それならそれで、
5 | 聡 | 02/03
4 | 真美 | 02/21
4 | 正子 | 02/02
3 | 次郎 | 02/04
が求める結果か?ちゃんとかいてくれよ〜
589588:02/01/18 21:01
ああ、やっとわかった。
>>587
が正しい。ってことは582が
結果として出しているのが正しいわけだ。
鬱だ...sage sage
590588:02/01/18 22:04
一発でやらないで二つに分けるほうがよさそうです。
雰囲気
select * from hoge where grp in
(select grp from hoge
 group by grp
 order by max(登録日)
 limit 3
);
見たいなことができればいいのだろうけれど、これは動かない。
サブクエリー単体なら動くので結果をどっかに保存して
select * from hoge where grp in (結果) order by grp , 登録日 desc

それか別テーブル一つ作って各グループの最終登録日を記録
しておくとか。
591sage:02/01/18 23:21
>>568
KWIC検索とかを調べてみるとよし。
592568:02/01/20 22:50
レスが遅れて申し訳ありません。

>>580
それを試したところ、2秒程度で返ってくるようになりました。
あとは本番機のスペックに掛けてみる、といった状況です。

>591
無知で申し訳無いのですが、これってNamazuみたいな全文検索システムの
ロジックですか?DBのフィールドに対して使えるのでしょうか?

みなさんありがとうございました。

593デフォルトの名無しさん:02/01/20 23:22
KWICってkeywords in contextのことだろ?
全文検索の一種だよね?分かち書きして、
単語拾ってインデックスはるだけ?
594デフォルトの名無しさん:02/01/22 18:42
一つ質問させてください。
掲示板のようにフリーフォーマットのテキスト文書を送信し、
WEBで表示するアプリケーションがあります。
文書の本文はファイルに、検索用の索引はDBに格納しました。
ここで、「なんでDBに本文を格納しないんだ?」と問われ、
「メリットがない、使い勝手が悪い」と答えました。
「もっと説得力の在る反論はないのか?」と返されました。
さて、テキストファイルをDBに格納することの
是非について、意見をお願いします。
595sage:02/01/22 21:36
>>593
うん。そんなかんじ
中間一致でも検索効率が落ちない。

でもインデックスがでかい。
596デフォルトの名無しさん:02/01/22 22:35
 索引がどういう種類のものかがわかりませんが・・・

> さて、テキストファイルをDBに格納することの
> 是非について、意見をお願いします。

メリット:
 WEBサーバーが複数台(複数クライアント構成)の場合、
DBのテーブルに入っている方が共有しやすいです。
 またOracleやSQL Serverなら全文検索インデックスをかけ
ることができます。
 バックアップをとるときに、まとめてとれるので管理コス
トが少ないかも知れません。

デメリット:
 古いPostgreSQLなどでは1カラム・サイズに制限があった
気がするので、大きなテキストだと問題が出るかも知れませ
ん。
 オラクル等でも1レコードが大きくなると、検索効率が低下
します。

※とりあえず思いついただけ・・・
597594:02/01/22 22:59
>>596
こちらは一台のマシンにPostgreSQL+CGIでクライアントは
IE/Netscapeという構成です。掲示板風のソフトだから
文字化け警戒してMIMEかUUENCODEして入れるか
ラージオブジェクトかってハナシが出てます
(そこまでして入れなきゃだめかって疑問があります)。

昨今、テキストや画像なんかを格納する機能
(BLOBとかラージデータというもの?)が追加されている
みたいなんですけど入れる理由、入れない理由ってのが
いまいち掴めなくって。
598デフォルトの名無しさん:02/01/23 11:36
初心者です
InteBaseってどうですか?
VBからでも使えますか?
599デフォルトの名無しさん:02/01/23 11:53
>598
InterBaseね
>598
素直にAccessにしといたら?
>>598
少なくとも6.0は使えるみたいけどなー。
http://www.borland.co.jp/interbase/
フリーの4.0だっけ?かは知らん。

つか、素直にMSDE。
http://www.microsoft.com/japan/developer/vstudio/msde/
602まりりん:02/01/24 19:41
皆さんありがとうございました。viewをつかってやってみることにしました。
お騒がせしました。
603デフォルトの名無しさん:02/01/24 19:46
>>597 ログが残っているんだったらファイル名とインデクスとサイズだけ
データベースに入れておけばよかろう。

使われたキーワードや解析など文書の有用性はあると思う。
タイトルでなくて文書内でのキーワード探索ぐらい
あって当然だし
604デフォルトの名無しさん:02/01/24 23:56
>>598
InterBase = Borland の有償パッケージ
Firebird = 無償版 InterBase
ただし InterBase, Firebird はベースは同じだが、
細かい機能がそれぞれ異なる。
ちなみにオレは今 Firebird 1.0 RC2 使ってる。
Win, Linux, FreeBSD, Solaris, ... などマルチプラットフォーム対応。
Delphi との親和性が高いけど、インタフェースはいろいろあるからVB でも当然使えるはず。

なんと言っても軽量、メンテが楽、バックアップが簡単などの特徴をもつ。

詳しく知りたければ↓ここを見れ
http://www.ibphoenix.com/
605デフォルトの名無しさん:02/01/25 04:39
>>602
viewは遅いYO!
607デフォルトの名無しさん:02/02/04 08:54
スタンドアロン(ローカル)で200万件のデータを検索、参照、登録、そして印刷するとなると
どういった環境(ソフトやプログラミング)が最適なのでしょうか?
OSはWindowsです。

どなたかご教授願えませんでしょうか?
>607
要件が漠然としすぎているのでなんとも言えないけど...

いっちゃんありがちなパターンとしては
言語はVB or Delphi 、DBはOracleかSQL鯖(デスクトップ版)って感じじゃないかなぁ。
DBの制限を考えると、件数よかデータサイズのほうが問題だね。
609デフォルトの名無しさん:02/02/04 10:58
>>608
漠然としててごめんなさい。まだその段階なので。

MS-SQLServerでも200万件の処理は可能なのですね?Oracle高すぎて…
あとはデータサイズや、それを十分に処理できるハード側の問題でしょか?
610608:02/02/04 11:46
>609
SQL鯖のヘルプによると

>テーブルごとの行数 使用可能な記憶領域によって制限されます。

ってあるんで、よほどヘボいハードでない限りはデータ件数面での問題は無し。
スタンドアロンって事なので、適切なテーブル・インデックスの設計がされていれば
パフォーマンス面も問題無いと思うよ。


MySQL, InterBase(Firebird) などのフリーのDBMSでも充分だよ。
コスト掛けてまで SQLServer にする必要があるのか疑問に感じる。
スタンドアロンアプリで。
612607:02/02/04 13:03
なるほど。MySQLなどでしたらWindowsにも乗りますね。

そうするとスタンドアロンで使う分には、SQLserverやOracleを使うことに
なんのメリットも無いということでしょうか?
613デフォルトの名無しさん:02/02/04 13:09
OTNからパクってくればOracle RDBMSタダですが。
もちろんサポートなし。ORA-600なんぞ出た日にはその処理は諦めるしかないけど
アヤシゲな新機能使わなきゃ地雷踏むこともないでしょ。
614デフォルトの名無しさん:02/02/04 13:33
Accessで「'」や「"」をSQL文に含める場合は、どのように
書くのでしょうか?例えば検索したい文字列が「'98」の場合です。
strSQL = "select * from hogeTable where field1 = "
ここからどうやって書けばいいのでしょう?
Oracle、SQLServerではどのように書かれていますか?
よろしければ教えて下さい。

今まで作ったものには、「'」や「"」で検索できない(;_;)
ことにしています。
保存する時はDAOを使っていたので問題なかったのです。
恥ずかしいです。
>>612
>そうするとスタンドアロンで使う分には、SQLserverやOracleを使うことに
>なんのメリットも無いということでしょうか?
将来LAN, WAN に拡張して大規模になるのなら、有償のDBMSの方がいいかもしれない。
もちろんケースバイケースで。
たいした規模じゃなければホント、フリーで充分だよ。
まぁ、フリーって言っても充分な機能持ってるものもあるから時間があれば
調べてみる価値があると思う。

顧客からそれなりの金取れて&楽したいならOracle でも何でもいいし。
>>614
ここで聞いた方がいいと思われ。
http://pc.2ch.net/test/read.cgi/tech/1005078204/l50
617614:02/02/04 14:20
>616
どうもです。あちらできいてもいいのですが、Access以外の
話も聞けるとしたらここかなと思って(w
>>617
InterBase/Firebird でもやったけど、
シングルクォート(ダブルクォート)2つ付ければいい。
Access でも試してみたけど同じだったよ。多分他でも一緒だと思われる。

例1)1'23 を検索
select * from hogeTable where field1 = '1''23'
または
select * from hogeTable where field1 = "1'23"

例2)1""23 を検索
select * from hogeTable where field1 = '1"23'
または
select * from hogeTable where field1 = "1""23"

DBMSによっては文字列リテラルの指定はダブルクォート囲みを対応してないものがあるから、
シングルで囲むようにした方がよいと思う。(SQL教科書みればシングルしか使ってない。)

select * from hogeTable where field1 = '文字列'

というように。
619618:02/02/04 15:05
訂正
× 例2)1""23 を検索
○ 例2)1"23 を検索
620614:02/02/04 15:14
>618、619
なるほど〜2つ並べるのですね。
SQL文中で文字列を指定する場合は、「'」を使っています。
strSQL = "select * from hogeTable where field1 = '1'23';"
(Accessです)と送っていたので、Jetから「なんじゃゴルァ!」と
突っ込まれていたのです。
次回にこっそり修正して、密かにバージョンアップすることにします。
あろがとうございます!
621デフォルトの名無しさん:02/02/06 17:45
Accessデータベースサイズの容量増大についてお伺いしたいのですが、
win98+VB5.0+ACCESS97の環境において、データ登録件数がほとんど増えていない
にも関わらず、一ヵ月後にはファイル容量が10倍になりました。
これは、どのような原因が考えられるのでしょうか?
また、この問題を回避もしくは解決する方法はあるのでしょうか?

プログラム自体は、追加更新削除を行うものです。
データベースは、テーブルが30、登録件数4万ほどです。
データベースへのアクセスは一日に2000アクセス以上です。

よろしくお願いします。
プログラムの中でワークテーブル作ってガンガン更新した後削除とかやってません?
最適化してサイズが劇的に小さくなるならそれだと思いますが。
623デフォルトの名無しさん:02/02/06 18:24
>622
ワークテーブルは使用していません。
最適化で確かに劇的に用量が小さくなります。
これは、大量のアクセスによって自動的に容量が増えていくものなのでしょうか。
最適化しか方法はないということですか?
プログラマーとしては回避しようがない、Accessの問題ということですか?
624sage:02/02/06 20:07
たまに「ツール」「ユーティリティ」あたりの「最適化」をやっとけ。
つーか毎日やれ。

バックアップとってからやれ。
625login:Penguin:02/02/06 22:26
データベーススペシャリスト
これは難しくてなかなかとおらないなぁ
626622:02/02/07 08:31
>623
読み取りのみのアクセスならサイズは増えないはずです。
どこかでレコードの大量追加・削除をしていると思いますなぁ。

まぁ最適化すりゃ解決って事らしいんで終了時に自動で最適化
するようにすりゃとりあえずOKじゃないッスかね?
(>624さんの発言通りにバックアップ取ってから。)
>>623
アクセスのMDBの肥大化は、ある程度大きくなったところで止まりますよ。(私の所では...)
登録件数4万件なら大きくなっても数十MBでしょうから、気にしなくてもよいのでは。
628デフォルトの名無しさん:02/02/08 23:37
今図解で分かるデータベースの全て
読んでるんだけど、ハッシュって何?
キー値からレコードアドレスを導き出す
と書かれてるけど、どうやって??
もう1段下げて猿でも分かるデータベースって本でも買ったら?
630デフォルトの名無しさん:02/02/09 09:30
やっぱり?でも読み進めたら先のページに説明
してた。先に説明しろって感じ。
俺プログラムってベーシックしか知らん
けど、ハッシュ関数って便利なランダム関数みたいな
もんなのかと理解。
>>630
なんか違うような。
まあ、気になるんならアルゴリズムの本読むのが良い。
632632:02/02/09 17:48
>>631
正しい意見だとは思うけど、まったくの入門の状況であれば

データの格納場所を決めるためのランダム関数 でもいいじゃん。

厳密な定義は、またの日に勉強するってことで。駄目かなぁ?

>>628=630は、だいたい判ったんだよね?

1000個のアドレスがあって、

格納するデータのキーが 000 から 999 までの
整数で、かつ、それらに重複

633632:02/02/09 17:52
とちゅうで書き込みおしちゃったよ。
=================================
キーが 000から999までの正整数であるとして、
かつそれらに重複が無い場合、

キー自体をアドレスにできる、ってのは判ると思います。


で、現実問題として、キーの部分を(例えば16進で評価して)
そのまま数字にすると、格納するためのアドレスが広大になるわけです。

てなわけで限られた領域の中に、データを振り分けるため
そういうものを使うことになります。

具体的な計算方法については、631 のかたが書かれたように、
アルゴリズムの教科書を読めば(本屋で立ち読みして該当個所を
読む程度でOK)よいと思います。


634デフォルトの名無しさん:02/02/09 22:03
>>632
うぉっっ!なんて親切なんでしょうありがとう!
大体(イメージで)分かります。私の持ってる
本には読み進めると、自乗中央法、除算法、奇数変換法、
シノニムとかの説明がありました。何か回りくどい
所が好きです。

自分は実はあのマイクロソフトのアクセスやってて
それの入門書とか読んでも納得いかない部分が多く、
それならリレーショナルデータベースってのは
具体的にどういうデータの処理がなされている
かが分かれば良いのだと思い、前に書いたデータベース
の本を読んだり、こちらにお邪魔した次第でございます。
失礼しました。
635631:02/02/10 01:34
いいたかったことは、ハッシュ関数ってのは
同じデータに対しては必ず同じ値を返すってことね。

ランダム関数だってシードが同じなら同じ値が返るけど、
普通はそれを期待しないだろうし。

633に補足すると、キーが文字列であったときも、
文字列とアドレスの紐付けのルールさえ決まればいいってこと。
この紐付けのルールがハッシュ関数な。
636632:02/02/10 05:07
>>633 = 631

まったくおっしゃるとおり。

ハッシュを説明しろってのなら、

キー値(input) に対するアドレス(output) の対応付けは
一意であることを明示せずにおり、ハッシュをランダム関数の
ようなものとして括ることを見過ごすのは不適切でした。

猛省デス。



637デフォルトの名無しさん:02/02/16 00:21
Sybaseっていいの?
638login:Penguin:02/02/16 10:42
>637

いいよ(CTC)
639デフォルトの名無しさん:02/02/17 23:55
なんか第二正規形と第三正規形の違いが何見ても
わかんねー。どなたか厨にでも分かる説明キボン。
640デフォルトの名無しさん:02/02/18 04:13
ネットワークごしのOracleの出力の速度をクライアントPCから、
1)ODBC経由
2)telnet接続(SQL*Net)
で測ったら、2)telnetの方が2倍以上速い感じなんですけど、
こういう場合telnet接続でプログラム作るべきですかね?
出力の解析工数が余分にかかりますけど。
>>640
スピード稼ぎたいんならなるべくストアド化してサーバ側で
処理するようにしたほうが良い。
642デフォルトの名無しさん:02/02/18 11:18
>>640
oo4o 使え
少々遅くても苦にならない範囲内ならシンプルに作った方が良いと思う。
目先の高速化は、なんとなくやりたくなるけど、後で訳がわからなくなるかも。
処理内容を完全に忘れてからの仕様追加でも、すく思い出せるぐらい単純なのが良い。
>640
ギガビットのネットワーク組むのは反則?
>>640
ODBC経由って何に比べても遅くない?
646login:Penguin:02/03/03 19:21
トランザクションについて誰か教えて!
>>645
質問の意味が良くわかりませんが、
ODBCでインタフェース作っておくと他のDBにも同じ形式でアクセス
できる(可能性がある)ってだけで、速度はあまり期待してないです。
648デフォルトの名無しさん:02/03/03 19:55
RDBMSの鉄則その1

ODBCは極力使わない。
>>648
なんで?
なんでよ?>648
マイクソソフト発祥の技術だから?
ドライバがクソだから?
え、なんでかなあ・・
648がVB厨房だから?
652デフォルトの名無しさん:02/03/03 20:55
>>648
なんかさ、そう言う風に言われるみたいだけど、
結局明確な理由を聞いたことが無いな。
信憑性の無さそうな「効率」の話ではぐらかされる感じ。
653デフォルトの名無しさん:02/03/03 20:55
RDBMSの鉄則その2

根拠を示さない主張に従う。
そういやPostgreSQLはODBCインタフェース持ってるね。
特に嫌われてるわけでもないと思うけど。
655DB初心者:02/03/03 21:38
DBに日本語を含む文字列を格納するとき、どの文字コードにしてますか?
単に格納するだけならバイナリ配列扱いにすればいいんですが(あってます?)、
文字列として部分一致検索をしたり、文字順に並べ替えをする場合には
やっかいなことになりそうな気がしますがどうでしょうか。
日本語に対応しているDBMSを使う。そのDBMSがサポートする文字コードを使う。
つうか、文字列格納するとき、どの文字コードにするかなんて考えたこと無いぞ。
おいらが無知なだけ?
657デフォルトの名無しさん:02/03/04 18:24
>>656
いや、その通りでしょ。
実際どの文字コードを使うかはRDBMSに依るでしょ。いやOSに依るのかな?
誰かおしえて。
ネイティブインターフェイス、
若しくはJDBCってのが今の標準的な
やり方なんじゃないの?
これからはPostgreSQLの時代だわさ。
>>658
JDBCってJava以外でも使えるの?
661デフォルトの名無しさん:02/03/04 20:23
>>658
>ネイティブインターフェイス、
つまりデータベース毎にバラバラってことでしょ?
なんで時代を逆行するような技術が主流なのか不思議・・
>>661
パフォーマンスの向上、自由度の高さ、信頼性あたりと思われ。
663デフォルトの名無しさん:02/03/04 20:57
>>656
日本語のソートとかしないかぎり文字コードはあんまり気にしないんでいいんじゃない?

select * from test where name like '%山田%'
とかなら、文字コード関係ないし。
664デフォルトの名無しさん:02/03/04 21:06
そういや、



をSJIS文字コードでソートすると悲惨な結果に
鯖とクライアントで文字コード違うと結構めんどうだぞ
>>664
日  num
---------
一  1
二  2
三  3

つう Table作って正規化すればよい (w
それなら壱、弐、でもいけるね。
それなら千三十二億六千万、千三十二億八万千三十でもいけるね。
>>665
嫌な DB だなぁ。
って俺、ORACLE しか使ったことないから気にしてないんだけどさ。
670デフォルトの名無しさん:02/03/04 23:49
>>639
本買って勉強しれ。
キーワードは「関数的従属」と「推移的従属」だ。
ODBCはまじ遅いなー。

そーいう漏れはWin&Borland限定ならBDE。

# が、ADOもよさげ。
>そーいう漏れはWin&Borland限定ならBDE。
InterBase(FireBird)はどうだろう?

Oracleと違ってデータグリッドもそのまま使えるし
只だし(FireBirdは)結構よさげなんだけど
673672:02/03/05 00:54
OracleはdbExpressを使った場合ね
674デフォルトの名無しさん:02/03/05 00:57
お前ら、VC6からMFC使わずに簡単にDB(Oracle/SQLserver/Access)に
アクセスしたいんだけど、何か手段ある?
ODBC API使え
簡単だろ。
676デフォルトの名無しさん:02/03/05 01:49
>>675
ありがとう。
ODBCのほかになにかある?
ない。
678デフォルトの名無しさん:02/03/05 02:05
>>677
え、マジですか?
んじゃODBCで作るとしよう・・
COMは?
何のCOMだよ?
DB-COMだっけ、OLEDBとかいうやつ。
682デフォルトの名無しさん:02/03/05 02:26
>>681
OLE使う時点で却下なんじゃ?
て、そのレスって674の回答だよね?
683681:02/03/05 02:46
VB6から使うなら、DB-COMのほうが簡単だよ。
MSでは、これからはODBCよりDB-COMを使え、っていう方向みたい。
VC6から簡単に使えるかどうかは知らないから、674の役に立つかどうか
わからないけど。

一応674-678関連レスということで
VB6だなんて誰も言ってねえだろチンカス
インターフェースはCOMだから、VBでもVCでも使えるっしょ
686681:02/03/05 06:53
VB使いはチンカスと言われたので少し調べてみた。(w

 どうやらDB-COMというのは公式の用語ではなかったらしい。COMテクノロジーに基づいた
DBアクセス方法ということでご理解いただきたい。
 でもってこのDBCOMの低レベルのインターフェースがOLEDB、高レベルのインターフェースがADO、

http://www.microsoft.com/data/oledb/default.htm
http://www.microsoft.com/data/ado/default.htm

ここのサイトに、VC用ののサンプルソースがあったので少し見てみました。
OLEDBの方は682さんが言うように、簡単ではないですね。ADOの方は比較する価値があるかもしれません。

まあODBC APIに比べると情報が少ないようですし、MFCからの移行ということであればODBC APIがベストかもね。
687デフォルトの名無しさん:02/03/05 10:30
Sybaseの場合について聞きたいんだけど……。
dump database でデータベースダンプを取ったとき、
できるファイルというのは、どれくらいの大きさになるの?
(圧縮率?とか?)
今度とりたいのは、DBが140MB トランザクション・ログが180MB。
Oracleだったら、確か元とほとんど同じ大きさだったよね?

目安でいいから判る人いたら教えて〜。
688デフォルトの名無しさん:02/03/05 11:22
>687
サイベースって判る人少ないからつらいよな…。
答えじゃなくてスマソ
OLDDBはVBからは使えません。
つか、VCでDBを使うというのが(以下略
>>672
InterBase使いたいんだけどな〜。
が、業務になるとなぜかOracle使えって話になる。
ISAMで十分なくらいの使い方しかしてないのになー(w
某のマーケがもっと強ければ・・・

> Oracleと違ってデータグリッドもそのまま使えるし
> 只だし(FireBirdは)結構よさげなんだけど
これって単方向データセットのこと?
dbExpressもTClientDataSet使えばよし。
Transaction管理も(多少)やりやすくなるし。

ただしTClientDataSetは(Initialが)劇遅という罠。
692デフォルトの名無しさん:02/03/05 18:36
Oracle Master Platinumって、Silverとか取得した後じゃないと取れないの?

とかいう質問している時点で試験に受かるはずは無いとは思うけど、
まぁ参考までに聞かせてください。
大学で留年して時間が出来たので、資格でも取ろうかと思いまして。
>>690
そうは思うけどVB使うなんてしたくないよ
694デフォルトの名無しさん:02/03/05 23:17
>>692
だったら国家資格にしときな
ベンダー試験は学生には金銭的に厳しいのでは
受験料1万で、3セットとってシルバー
プレミアムは12セットじゃなかったかなぁ、最速でも12万ってこと
(それもOracleのバージョンサポート終了と共に無効になる)
>>692
別にSilverを持っている必要は無いよ。
ただし、Platinumの必須試験科目にSilverの必須科目が
丸々含まれているので必然的にPlatinum=Silverとなるがな。
あ、ただし、Silverの申請をしなければSilverを持っていない
Platinumホルダーというのも可能だがな。
>>694
俺はOMの仕組みを全然知らないんだが、バージョンサポートって何?
国家試験だと「データベーススペシャリスト」とかいうのが過去にあったけど、
今は多分名前変わってるだろうな……
697デフォルトの名無しさん:02/03/06 01:52
C#でDBってどうなの?
698デフォルトの名無しさん:02/03/06 01:58
オラクルマスターねぇ。
製品がバージョンアップする度(正確ではない)に
再試験しないとイカン、メーカー資格なんて無駄。
学生が勉強するような資格じゃない。あれは、会社に
報奨金を貰って受験するモノ。

699672:02/03/06 02:00
>>691 サンクス
>これって単方向データセットのこと?
>dbExpressもTClientDataSet使えばよし。
TClientDataSetはなんか挙動不審というか
バグってないか心配になってついSQLで直にデータを操作しちゃうんだよね
700692:02/03/06 02:18
みなさん助言ありがとう。
趣味の世界でしかプログラミングしてこなくて、
Webプログラミングに疎いから、資格の勉強の途中で……と思ったんだけど、
あまり良い選択ではないようなので考え直します。

ところで皆さん、データベースを経験するのに、どういう動機ではじめました?
仕事で覚えさせられた以外の人がいらっしゃったら、簡単に体験を教えてください。

コソーリと700get
>700
最初は自宅にサーバ立てて遊んでたかなぁ?
>>699
> バグってないか心配になってついSQLで直にデータを操作しちゃうんだよね
というかBDEが(以下略
あいかわらずStartTransactionが挙動不審でよくわかんね〜し。
CacheUpdate使うと遅くなるしでわけわか。

>>697
VCLみたいなライブラリのっかるだろーからかなり楽なんでないかい?
703デフォルトの名無しさん:02/03/06 17:26
厨房な質問ですみません。
オラクルってMySQLみたく自宅のサーバにひょいと入れられるんですか?
704デフォルトの名無しさん:02/03/06 17:34
>>703
金さえ払えばな。自宅で入れるメリットは無いだろう。
PostgreSQLかMySQL入れておけばいいんじゃないの?
705デフォルトの名無しさん:02/03/06 17:40
試用版(30日)ならotn.oracle.co.jpからダウンロードできるよ。
706デフォルトの名無しさん:02/03/06 19:58
ぶっちゃけ、どう違うのよ?<MySQL、PostgreSQL、Oracle(、Microsoft SQL Server)
誰か簡潔に教えてくれ
kツールで無期限になりませんか?
>>707
個人で使っている限り、それほどメリットがないんだよ<ORACLE。
だからクラックなんて下らないことを考えてる暇があればフリーのを使えばいい。
ただ大規模になると、バックアップ等の部分でORACLEのメリットが増える。
で、そういう大規模なサーバの場合、社会的にクラックして使うのは許されない。
>>707
あなたがクラックするようなくだらない人間なら、Oracleの試用版は
夢のようでしょう、だって30日限定は文言だけで、なんら制限は
かかってないのだから。
ちなみにSQL Serverの試用版も同様。
だいたいのところ
 大規模:Oracle
 中規模:SQLServer, Postgres
 小規模:InterBase, MySQL
 ツール、インターフェイス程度:Access
くらいは異論はないだろう。(PostgresとMySQLの扱いは微妙なところだが)

「大は小を兼ねる」つー格言があるが、おれ的にはソフト設計にその考えを
いれるのはきらいだな。
Oracle はどう足掻いても管理者が必要。
SQL Server、Sybase ,Informix あたりは設計次第で
管理者不要なシステムができる、という感触。

経験的にトラブルの少ない Informix が好きなんだがなぁ。

>>711
いま、たいしたことないシステムを(w
Oracle使って作ってるんだけど、管理者って必要?

「規模が大きくなると管理者がチューニング?しないといけない」とかいうこと?


つーか、今作ってるシステムMSDEで十分なんだが(w
Infomix、Sybaseって聞いたことがないな。商用だろうと思うけど、
やっぱりPostgreSQL等のフリーなデータベースと比べると、サポートがあるのが売り?
知ってる人がいたら教えて
今までOraしかまともに触ったこと無いんだけど、
最近SQL Serverを触りだしたのよ。
で、質問なんだけど

SQL Serverで失っても構わないデータは障害直前30分前までの
データという用件があったら、トランザクションログファイルを
30分おきにバックアップ取らなきゃならないような気がするんだが、
この考えはあってる?
715デフォルトの名無しさん:02/03/07 00:27
>>709
 それに oracle.com の方の OTN なら、堂々と
「開発用ライセンス(シングルユーザ)の Oracle 9i その他諸々、全部持ってけ〜!」
状態ですが。
 ただし全部落としてたら誇張抜きに HDD の空き容量と相談が必要になる。
 むろん、開発用途だから実務に使うことはライセンス上許されない(w

 まあ、実務に使えてフリーが欲しいなら、Interbase なり MySQL なり、Linux 使って
PostgreSQL というのもありだしねえ。そっちのほうが Oracle 使うよリまとも。
 今の Oracle は、よほどの大型案件でもない限りオーバースペックです。大抵は
PostgreSQL で間に合うはず。
オラクルって、どういう機能が他のに比べて優れてるの??
717デフォルトの名無しさん:02/03/07 00:46
>>713
聞いたことないっすか。
ほんの数年前までは、OracleのシェアなんてInformix,Sybase に
比べれば屁みたいなもんだったんスよ。

何がOracleに勝利をもたらしたのだろう。
でも、同様にOracleのシェアが数年後まで続いているかどうかも
怪しい所。
ストレージが TB クラスになると Oracle しかないよなぁ…
>>717
O'Reillyのおかげだ。
なにもかも。

マニュアルだけ読んでさあ、開発するぞ、ッ手やつはいないからな。
720デフォルトの名無しさん:02/03/07 00:52
確かに Postgres めちゃくちゃいい。
7.2 になって vacuum 中にロックがかからなくなったし。
これでオープンソース & フリーってのは凄いよ。
721デフラグの名無しさん:02/03/07 01:01
>>713
SQLServerつったら、Sybaseでしょ。
パソコンしかしらんとそんなもんでは?

しっかりしたDBの解説書を読んでりゃそういったこと、書いてあるのになあ。

やっっぱ、ナツメとか、ああいうのあけで済ますPG/SEは逝っていいと思うわけよ。

723デフォルトの名無しさん:02/03/07 01:17
Postgres、割とソース読みやすいと思うよ。
結局商用ならMS SQLかORACLE、
フリーならPostgreSQL、といった所なんでしょうか?
このスレを読んでると無性にデータベースを触りたくなったので、
自宅にPostgreSQLでサーバを立てて遊んでみたいと思います。
UDBも選択肢に入れときなさい。
726724:02/03/07 02:07
了解
727サンコンさん:02/03/07 08:24
SQLを実行させようと思いまして下記の様にコーディングしましたが、
"\'m_Com1\'" を読み取ってくれません。シングルコーテーションの中では
なくて、’’も含めて読み取りたいのです。どなたか教えて下さい。
ちなみに、m_Com1はメンバ変数です。全体のコードはこれでOKなのでしょうか?

CString strSql = "Select timem,exp,tostn from jikoku where ";

if(m_Com1 == ""){
strSql+= "Stn = " + "\'m_Com1\'" + " AND ";
}else if(m_Com2 == ""){
strSql+= "Goto = " + "\'m_Com2\'" + " AND ";
}else if(m_Com3 == ""){
strSql+= "Day = " + "\'m_Com2\'" + " AND ";
}
strSql+= "Timeh = " +m_ji;
m_Recordset.Open(CRecordset::dynaset,_T(strSql));
UpdateData(true);
m_Recordset.Requery();
\'->\'\'
age
730デフォルトの名無しさん:02/03/07 22:31
ODBC経由でExcelのデータにアクセスできるみたいですが、
罫線引いたりもできますか?
>>730
ODBCはExcelのデータを取ってくるだけでしょう。
Excelの罫線を引くのは、CreateObjectでExcelを立ち上げて
VBAでコーディングしてやれば出来ますよ。
732データベースを悉く知らない男:02/03/07 23:54
すいません。データベースの勉強しようと思ってます。
それで、オープンソースのをデッバグしながら勉強したいのです。
それでVC6(スタンダド)とwin98を持ってるんです。

なにか良いデータベースはあるでしょうか?おねがいします。
>>732
とりあえず、データベースの何を勉強したいのか、
何が出来るようになりたいのかとか、目的をハッキリ
とさせた方が良いと思います。

ネタカト オモッタ・・・
SQLが直打ちできれば何でもヨイと思われ。

やる気は買うから、おまえもせめてWin2Kくらい買え。
そしたらMSDEや開発者用ライセンスのOracleを使ってまともな勉強ができるぞ。

LinuxやFreeBSDを入れるのがもっとも手早いように思えるが
UNIXの操作経験ゼロだったら、やめとけ。
とりあえずSQLがやりたいです。
Win2k欲しいんですけど、お金がないです。それとPCもへぼいので
ものすごく遅くなりそうです。LINUXに移行するのはちょっと厳しいです。

とりあえず、MySQLって言うのを見つけたのでダウソしてます。
ヘタレが。
オレは高房の頃にはOSとコンパイラ買うためだけにバイトしたぞ。
あの数万円の投資が15年たった今では数千倍にもなって返ってきてるからよし。
NT4ぐらいで充分じゃぁ?
それなら安く買えるし、HDDと込みで買えば2万もせんでしょ。

客先へ配布することも考えれば(客先の側に立てばだけど)
無料のデータベースは魅力あるよね

Oracleを中小さんへ薦めるのはちと気の毒な気がする
Oracleも買えないような中小さんはDBやサーバのメンテをする人のための
人件費をケチる、というかゼロなとこが多いので、相手にしないのが一番。

MySQL動きましたーー。
C:\mysql\bin>mysqld

C:\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.49-max-debug

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

だって。やったーー
>>740
やったーー

で、なにすんの?
とりあえずペットの情報を管理するデータベース menagerie を作成。

mysql> CERATE DATABASE menagerie;
Query OK, 1 row affected (0.49 sec)

ターゲットのデータベースを設定
mysql> use menagerie
Database changed

テーブルを作成!!
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
Query OK, 0 rows affected (2.91 sec)

テーブルのないようを確認
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.33 sec)

MySQL(・∀・)イイ! すごく(・∀・)イイ!
ほー。
ではとりあえずNULLを許可しない設定に慣れよう。
744デフォルトの名無しさん:02/03/08 04:40
スキルアップのためにデータベースのシステム一式を構築したいと思います。

需要のある部分を勉強したいのですがオラクルなどは個人で購入するのは厳しいです
フリーソフト、Win、Linuxあたりで構築できればと思っています。
おすすめのDB、OS、接続方法(VB、JDBC,ODBC・・)などありましたらご教授下さい
また、データベースのインストールなどから学べる本とかありますか?
お願いしますm(_ _)m

ボラクルに社名変更したら?
とりあえずチュートリアル終わりましたーー。
SQLの基本的なことはわかりました。
でもリレーショナルなことは載ってなかったです。

>ではとりあえずNULLを許可しない設定に慣れよう
NULLはなるべく許可しないほうがイイってことですか?
CREATE TABLE にNOT NULLを追加すれば良いんですね。
で、NULLの比較はIS NULLかIS NOT NULLを使うんでーす。
>742
MySQLって副問い合わせ出来たっけ?

>744
それぞれ構築するモノによって本も違うんちゃう
需要があるって言葉が引っかかるが
オールフリーでやるなら、
OS:Linux
DB:PostgreSQL
Language:PHP
このあたりが無難じゃない?

未経験で仕事の需要があるって言えば、
OS:Win2K or Linux
DB:ORACLE
Language:VB
このあたりが無難じゃない?(解説本もたくさん出てそうだし)
JDBCってどうなんだろうなー。

使ってみたいが仕事がGUIクライアントばっかなんで
Swing使う気しないしなー。


つーのは考え方古い?
749デフォルトの名無しさん:02/03/08 11:15
MySQLって、クライアント作るのどうしたらいいの?
インタプリタが動いてもあまり嬉しくないんだが
750デフォルトの名無しさん:02/03/08 11:31
>>747
 副問い合わせはできない。JOIN でガンバレ(w

>>749
 C のライブラリ API つかってがりがりと。つってもそれほど面倒ではないけどね。
751デフォルトの名無しさん:02/03/08 12:07
>>748

なんでもいいよ。そんなもん。

プラットフォームを選べる立場なら Ruby/GTK がオススメ。
Java/Swing でも全然かまわない。
Windows オンリーってことでかまわないなら、Delphi が速度的にも最強。
752デフォルトの名無しさん:02/03/08 16:29
現在、サービス契約の自社DBの再設計をしてます。

契約テーブル
・契約No
・契約者名
・契約日
・サービス1
・サービス2
   : 
・サービス8 (サービス数:約40種 うち1顧客に付き8サービスまで)

現在上記のような形でフィールドが組まれております。
この方法だと40種のサービスがサービス1〜8のどこに何が入っているか解かりませ
んので、サービスフィールドを含む契約者リストを出すのにOR検索になります。

サービス数の増減は”有り得る”というくらいで、絶対に有るというわけではありませんでした。
ですから前任の設計者は上記のようなテーブルを設計したと思われます。

契約するサービスの数・種類は各契約者ごとに異なります。
このような場合、一般的にどのような設計になるんでしょうか?
どなたかご教授願います。
関連付け用のテーブルを作ればいいんでないの?

関連付け用テーブル
・契約No
・サービスNo
って感じで
754752:02/03/08 20:09
>753
早速のレスありがとうございます!

>関連付け用テーブル
ということはやっぱり1契約あたり8レコードとなるワケですね。
現在、約500契約/日なので単純に4000件。。かなりヘコみですね。
1契約に対して8件ですが、ちなみに極端な話100以上のサービスが選択可能と
なった場合もこのようなテーブル設計なのでしょうか?
>1契約あたり8レコード
全部の契約に8つサービスが付くのならそうだけど、そうとは限らないみたいだし
>100以上のサービスが選択可能となった場合
今の設計を拡張してひとつのレコードに100の項目を設けるよりはましでしょ
抽出も単純にできるし

もっといい方法があれば自分も教えとほしいと思いますけど
756デフォルトの名無しさん:02/03/08 22:49
みんな業務アプリを作るとき、DBをクラスにマップし直してる?

また、SELECTで複数レコードが返ってきたとき、オブジェクトの
コレクションに変換するのを見たことがあるけど、その方が
やりやすいのかなぁ?
アホか
>>749
>MySQLって、クライアント作るのどうしたらいいの?
ローカルWEB鯖立ててPHPでMySQLにアクセスできました。

<HTML>
<TITLE>MySQL TEST</TITLE>
<CENTER><B>MySQL のテストです。</B></CENTER>

<?php
// データベースに接続し、選択する
$link = mysql_connect("", "", "") or die("Could not connect");
print "Connected successfully";
mysql_select_db("menagerie") or die("Could not select database");

// SQLクエリを実行する
$query = "SELECT * FROM pet";
$result = mysql_query($query) or die("Query failed");

// HTMLに結果を出力する
print "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";

// 接続を閉じる
mysql_close($link);
?>

いまVCからODBC経由でMySQLにアクセスしようとしてますが、
ムズイです。
760デフォルトの名無しさん:02/03/09 00:29
>>756
富士通などでは、クラスにマッピングしてるみたい。
また、.NETもスキーマから自動でクラスにマッピングする。
761760:02/03/09 00:42
Relaxerもスキーマから、SQLのCREATE TABLE、Javaクラスにマップする。
テーブルに対しての結果セットは、コレクションとして返される。
762デフォルトの名無しさん:02/03/09 01:23
もし、2chの全書込みをPostgresで管理するようにしたらどうなるの?
今とパフォーマンスはどう変わる?
今どうなってるの?
書き込み・読み込みに対する競合がものすごいことになるので
あっという間に破綻します。
765デフォルトの名無しさん:02/03/09 01:43
>764
多版型同時実行制御(MVCC)
とかいう機能で、ものすごい勢いで処理出来ない物かね。
はう、それ知らない。

実際のところ、DBに何を使うか、よりも
ネットワークのトラフィックの方が問題だと思われ。
767デフォルトの名無しさん:02/03/09 21:42
いやトラフィックはそれはそれとして、競合で破綻はしないんじゃないの?
破綻するなら簡単でいいので根拠がしりたい。

それと今の実装はどうなってるのかな?ソースどこにあったっけ
レプリを実装してるオープンソースのDBってあるんですか?
>>768
どうしても、というのなら Postgres + Usogres。
厨房質問でスマソ
PostgresとPostgreSQLって同じだよね?
onaji.

usogres ha siran
>>770
同じ。ぽすとぐれす・きゅーえる って正式名称で呼ぶのは面倒だから。

>>771
うそぐれすのおうち
http://usogres.good-day.net/
773デフォルトの名無しさん:02/03/12 22:30
PostgreSQL7.1日本語マニュアル
http://osb.sra.co.jp/PostgreSQL/Manual/
774デフォルトの名無しさん:02/03/13 07:11
オラクル@unixでプロンプトからSQLをたたいてるのですが
どうも面倒です。
コピーペしても複数行のやつだとうまく実行してもらえません。
テキストファイルにSQL書いてそれを食わすとか便利な方法教えてください。
よろ。
ルークよ、アットマークを使え。
776デフォルトの名無しさん:02/03/13 07:28
オラクルの便利or基本な小技集みたいなページありませんですか?
>776
OTN
ファイル末尾の/も忘れるな。ルークよ・・・。
779774:02/03/13 20:35
ヨーダさま、言ってることがわかんないんですけど・・・ウワアァァァァアアアン!!
sqlplus @すくりぷとふぁいる

スクリプトファイルの最後に / をつけろ。
sqlplus @すくりぷとふぁいる/
ルークよ。
過っておるぞ。
ttp://www.hi-ho.ne.jp/tsumiki/
cse使こうてるひといる?
便利でええと思うが
784デフォルトの名無しさん:02/03/14 09:22
ちょっと質問。
業務使用経験0なんですが、次のプロジェクトでオラクルが重要になりそうなので
短期間でオラクルマスター(しかもプラチナ)を目指したいと思っております。

ちょっとなめすぎているかもしれませんが、つい先日10日強の勉強でシスアド上級取ったし、
大学生の頃今は亡きネットワークスペシャリストも取ったので、こういった資格試験は強いと思ってます。
ま、取れなくても基本的な知識が付けばそれで嬉しいし。

そこで質問なのですが、この資格を取るのにお勧めの書籍はありませんか?
出来れば、資格試験だけでなく、今後業務で使う事を考えても学ぶものの大きい本を
読みたいのですが、経験豊富な皆さんの推薦を是非教えてください。
マニュアルと過去モンポケモン。
試験対策ならマニュアルはどうだろ?
実務ではマニュアルでOKだとは思うけど
787784:02/03/14 11:40
アマゾンで人気商品を見てみる限りでは、

翔泳社のいわゆる黒本
「Platinum Network/Backup/Performance (Oracle8i)編 オラクルマスター教科書」
http://www.amazon.co.jp/exec/obidos/ASIN/4798100595/qid=1016073452/sr=1-1/ref=sr_1_0_1/249-3925908-8446763
http://www.amazon.co.jp/exec/obidos/ASIN/4798100609/qid=1016073452/sr=1-2/ref=sr_1_0_2/249-3925908-8446763
http://www.amazon.co.jp/exec/obidos/ASIN/4798100625/qid=1016073452/sr=1-3/ref=sr_1_0_3/249-3925908-8446763
が良いみたいですが……

過去レスを見てみると、Silverを受けずにPlatinumを取っても問題ないみたいですが、
上記の参考書だけでいきなりplatinumに挑戦できるのかどうかも気になります。
>>784
i Study をひたすら、サルのようにやる。やり続ける。

お金は・・・会社が出してくれるんだよな?
俺は出してもらってない。。GOLDまで自腹だ。
プラチナ取ったらいくらか金くれるらしいが、そもそもベンダー系資格を軽く見ているようでゲンメツ
初級シスアドとった新入社員が毎月5000円もらえることがDQN。
>>789
じゃ、あんたもとったら?<シスアド
Gold狙うくらいなら、そのくらいの知識はあるんだろ
791デフォルトの名無しさん:02/03/22 01:41
オラクルでテーブルの一覧を見る方法はありますか?
SQL>
792 :02/03/22 01:46
SQL> select * from tab;
from all_tables;
from user_tables;
>>792-793
どうもありがとう。
795784:02/03/23 11:19
レス遅れてすまそです
とりあえずプラチナの勉強をしてみます。
途中経過など報告も織り交ぜていきたいかと思います。
鬱陶しかったら言ってください
796デフォルトの名無しさん:02/03/23 11:31
firebirdの評価を聞かせて
798デフォルトの名無しさん:02/04/02 14:58
 PostgreSQLとPHP初心者です。「リレーションシップ」という
ものについて質問があります。

 リレーションシップの役割や概念は分かってきたのですが、
自分が、「売上テーブルと売上明細にはリレーションシップを
設定して」と頼まれた時、具体的に何と何をすればいいのか不安です。

 具体的な作業として、「リレーションシップを設定する」とは
どういう作業をさすのでしょうか?教えてください。

 簡単に売上テーブル(売上No)と売上明細テーブルをつくる
作業を仮定させて頂いたとして、

「リレーションシップを設定する」というのは下記の、どちらでしょうか?
1.具体的な命令句ではなく、売上明細テーブルの中に売上No(売上テーブル)を
  含めた、段階でリレーションシップが設定された、と判定される(設計段階?)。
2.PostgreSQLのCreate Tableの命令で具体的に参照整合性を
  設定をすることが、リレーションシップの設定である。

 たぶん、まだ理解が足らないかと思われますので、
上記の例に含まれていない場合、可能なら具体的な作業を
例示してご教授いただけないでしょうか?

 もし、この本に全部書いてあるよというような
参考書がございましたら、そちらをご紹介頂いても
結構です。よろしくお願い申し上げます。

  
799デフォルトの名無しさん:02/04/02 16:24
PostgreSQLもPHPも知らないけど、
一般的にリレーションシップの設定はない、設計上の概念の話。
Accessだと、キーをドラッグアンドドロップでつなげておくと
あとで使うとき簡単!とかはあるけど。PostgreSQLはどうなんだろ?
だから、どちらかというと1
800799:02/04/02 17:40
気になってちょっと調べてみた
http://www.google.co.jp/search?hl=ja&q=PostgreSQL+%83%8A%83%8C%81%5B%83V%83%87%83%93%83V%83b%83v&lr=
つか、すぐ出てきた(笑)
このぐらい自分でやれよって感じだが、なんで俺もこんなに親切なんだ?そか、暇なんだ。
PostgreSQLではACCESSでいうリレーションシップに当たる「参照整合性制約」なるものがあるのですね。
んじゃ、設定するとは、そのようなCreate文を書くという事にもなりますな。
>798
頼んだ人に聞けばいいじゃん
またはインターネットで調べる

長文書く暇があったら見つかるで
802デフォルトの名無しさん:02/04/04 12:15
オラクルとcobol85の接続が出来ないんですよ!
明日納期で死にそうなんで教えてください!
コンパイルが出来ない!
ODBCかなぁ?????????????
>>802 これで答えられたら神だyo(w
>>802
明日になったら教えてあげるよ
ネタか?
まだProCOBOLって製品あるの?

コンパイルが出来ないって...
接続以前の問題ちゃう?
あるはずだけどね。<Pro*COBOL
まあ、>>802 がネタなのは間違いないだろう。
807デフォルトの名無しさん:02/04/05 19:31
質問よろしくお願いします。
A:列数が4
B:列数が40

の2つのDBテーブルがあって、型はすべて同じ型としたときに、

AとBにinsertするときに、
Aに10回書き込みと
Bに1回書き込みは、
やはりAの方が効率悪いんでしょうか?
使ってるDBによって違うとかいうのじゃなくて大体でいいので
どっちがよいのか教えてください。
そもそもBに1回書き込みが完了する間に
Aはそれ以上の回数書き込めるのかということが疑問です。
分かる方、どうか本当によろしくお願いします。
808デフォルトの名無しさん:02/04/05 19:34
A10回の方が圧倒的に遅い。
SQLの解析、トランザクション制御、などなど、俺もあんまり詳しくないが
一回の発行で書き込み以外に多数の仕事が発生しているはず。
809デフォルトの名無しさん:02/04/05 19:35
って、だからって1レコードに繰り返し項目入れちゃだめだよ
810デフォルトの名無しさん:02/04/05 19:37
早速の回答ありがとうございます。
そうですよね。やっぱりA方式のほうが遅くなりますよね。
もしかしてBで1回書き込み手続きが終了する間にAが2回書き込む
ことすら不可能なぐらい効率わるいのかな?
811デフォルトの名無しさん:02/04/05 19:40
>>810
そね、データ量による書き込みスピードの違いなんて無視できるぐらい
オーバーヘッドの方が大きいです。
812デフォルトの名無しさん:02/04/05 19:57
>>811
もしかしたらすごい初心者の質問に
親切に教えていただき、ありがとうございました。
勉強になりました。
813デフォルトの名無しさん:02/04/06 12:17
>>813
ただ、これをそのまま鵜呑みにするのは危険だぞ。
ハードの条件は書いてあるが、各DBサーバの設定(メモリの
使い方、SQL文でのヒントの有無などの各種チューニング)が
どうなってるのかわからないから。
結局最新のMySQLでは副問い合わせやINNER JOINはできるようになったのか?
>>815
副問い合わせは、Ver4.1 での実装になりそうです。
INNER JOINは知りません。
>>814
でもチューニング次第でそれだけの性能が出せるということだね。
818::02/04/06 18:25
質問なんですけど、VBAでPL/SQLのカーソルみたいなことってできますか?
819デフォルトの名無しさん:02/04/06 18:56
>>818
カーソルみたいな?
Dynasetとかを作って、do ... loop で回すと言うような単純な意味?

それとももっと深い意味があったりする?
820オードリー:02/04/06 19:08
机上でバックをしっかりやることを教えたかったのですが、
コンパイルをやたらとやりたがり、
しかもわたしって結構気弱なので
「机上でバグつぶせ」っと強く言うことができなかったのです。
き、騎乗位でバックですか・・・
騎乗位でバックでうつぶせ(・∀・)イイ!!
823おら初心の者:02/04/07 20:42
同一セグメントのLAN内
Server Oracle 8.1.7 WinNT
Client 1 Win2k
Client 2 Win98
Client 3 WinXP
の構成で、Net8 Assistantの設定時テストは、Client1,2,3共にOK
c:\>set ORACLE_SID=hoge
c:\>sqlplus
では、Client 2 Win98のみ、エラーになります。(Win2k,WinXP はOK)
sqlnet.logでは
TNS-12560: TNS: プロトコル・アダプタ・エラー だとか、
TNS-12541: TNS: リスナーがありません。 だとかいわれ(;ロ;)
Win95/98/Meでは何かあるのでしょうか?
>>823
ping と tnsping は通ってる?
825823:02/04/08 12:30
>>824
%%ORACLE_HOME%%Network\Admin\TNSNAMES.ORA
の内容は、Win98 Win2k 全く同じで、
Win98側にて
c:\>tnsping <TNS名>
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=<TNS名>)(PORT=1521))
TNS-12541: TNS: リスナーがありません。
となり、ホスト名の欄がTNS名になっています。
c:\>tnsping <ホスト名(NetBIOS名)>
とすると、
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=<ホスト名>)(PORT=1521))
OK
となります。
Win2k側では、tnsping <ホスト名>、c:\>tnsping <TNS名>共にOKです。

どちらの動作が正しいのでしょう?
tnsping <address> [<count>]
ですので、Win98側の動作が正しいようにも見えます。
>823
MS-DOSプロンプトからやってるんだよな。
sqlplus username/password@tnsname
の形でやってみ?
827826:02/04/08 19:17
>>823
それでだめなら、Net8の構成でホスト名を入れるところを
IPアドレスに替えてみて
828824:02/04/09 07:34
んっ? その前に...8.1.7って?
Win98サポートしてたっけ?(箱を確認してみてね)

tnsping が通らないって事は、きっとsqlplusも繋がりません

pingが通らないと、ハード異常orネットワーク設定異常が考えられます

次のコマンドを実行してみてください
1.ping <ホスト名>
2.ping <IPアドレス>


1ならhostsを設定してみるor>>827の設定にする
2ならネットワーク的に繋がってません
HUBやLANカードやケーブルを確認してみてください
829826:02/04/09 19:54
当然サポートしてる。<Win98/95
ちなみにMeはOracleの全製品でサポート外。
将来もサポート予定無し。
830823:02/04/09 20:59
>>828
c:\>tnsping <ホスト名(NetBIOS名)>
でOKになるので、悩んでます。
TCP/IPの方は問題ない。
>>826-827
今、出先なので、明日試してみます。
しかし、VB+oo4oやCSEの接続で7~8秒かかるのは、これはこれで、
そんなもんなんでしょか?接続した後は速いんですけどね。
それは絶対なにかがタイムアウトするまで時間がかかってる。
>>830
オラクルの最大のネックはコネクトと言われているが(俺だけかも?)
それでも2〜3秒だと思う
833826:02/04/10 10:30
>>830
厳密にはTCP/IPのホスト名とNetBios名は意味合いが全然
違うものだからな。
VB+OO4Oだと、OO4Oの初期化の時間も加わるからPLUSでの
Connectより時間がかかるのは当然。CSEは聞いたことないからパス。
でも確かに時間がかかりすぎてるかも。スペックにもよるが。

>>832
それはどんなDBでも一緒だろ。Oracleの場合は、サーバー側での
権限チェックやPGA領域の構築/初期化などいろいろやるから。
834デフォルトの名無しさん:02/04/10 12:35
ODBCやOO4OでOracleのテーブルにアクセスするのって遅いね。
コネクトでも時間かかってるけど、fetchも遅い。
今の所telnet経由のSQL>プロンプトから直が一番速いんだけど、
telnetプロトコルでアプリ作ってる人いる?
_
>>834
そんな面倒くさい事しない
836デフォルトの名無しさん:02/04/10 14:49
>>835
そうだよね。面倒だよね。
でも今、shellと連携するやつが必要だったんで、
telnetで動かすやつ作ってる。
結構速いので満足。
>>837
それって、サーバとクライアントでネットワーク的に距離があったりしない?
接続のたびに、プロセスが増えていくDBって嫌いだ。
AテーブルとBテーブル(レイアウトは同じ)があって、
AをにあってBに無ければBへINSERT
両方にあるなら、Aの内容でBをUPDATE

...というような事をやりたい場合、やっぱりプログラム中でループを使ってやるしかないですか?
SQL一発とは言わないけど、もっとシンプルな方法は無いでしょうか?

 
841デフォルトの名無しさん:02/04/12 18:42
>>840
なぜ質問をsageで書く(;´Д`)

Bの内容をAの内容で更新
UPDATE B
SET (B.col1, B.Col2, ...) =
(SELECT A.col1, A.col2, ... FROM A
WHERE A.key1 = B.key1 AND A.key2 = B.key2 AND ... );

AにあってBに無いレコードをBに追加
INSERT INTO B (key1, key2, ... ,col1, col2, ...)
SELECT key1, key2, ... ,col1, col2, ...
FROM A
WHERE (A.key1, A.key2, ...) NOT IN
(SELECT B2.key1, B2.key2, ... FROM B B2
WHERE B2.key1 = A.key1 AND B2.key2=A.key2 AND ...)

両方とも未検証。特に2つ目は地震内。ちなみにOracle Onlyね。
842デフォルトの名無しさん:02/04/12 19:06
追加
Oracle9iだとMERGEっていうSQLコマンドが追加されて
それだと一発。(INSERT+UPDATEを1回でやってくれる)
843840:02/04/12 19:17
>841
うちはSQL鯖ですけど、これを参考に行けそうです。
ありがとう。
>>841
INって複数キーに対して出来るんだっけ?
出来ない場合はこれだね!

INSERT INTO B (key1, key2, ... ,col1, col2, ...)
SELECT key1, key2, ... ,col1, col2, ...
FROM A
WHERE NOT EXISTS
(SELECT * FROM B B2 WHERE B2.key1 = A.key1 AND B2.key2=A.key2 AND ...)
>>839
カーネルスレッドをサポートしていないOSでなら仕方ないと思うが。
どんなDBとOS?
846デフォルトの名無しさん:02/04/13 02:12
折れも聞いていい?
>840みたいな事をSQLでやるとして、件数の関係上時間が
かかる場合ってありますよね。
そんな時フリーズと区別しにくいので、クライアントで処理の
進行度を取得したい時が多々あるんですが、そんな時って
どうしてます?
>>846
そう言う場合は、ループで1件ずつやるのが良いんでしょうけどね!

しかし時間がかかるって、データ件数が多いって事でしょ?
ネットワークを流れるデータ量などを考えると、
>>841やストアドなどで、やるのが賢明だと思いますよ
848846:02/04/13 17:09
>847
やっぱそうだよね。
ストアド使いつつクライアントに何らかの値を返す方法無いかな、なんて...
もちっと勉強してきます
849デフォルトの名無しさん:02/04/13 18:35
>>848
sageるとは、遠慮がちな人だ
あなたの要件は簡単だから、誰か答えられるでしょ。
俺は今、手元に資料・環境がないので
とりあえずage
実行途中をテーブルにはき続けるのって、トランザクションの
関係上、無理っぽいように思えるけど、どうなんだろう。

で、プログレスメーターを出すのが要件じゃなくって、
止まってるかどうかを知りたいだけなんでしょ?
だったら、SPをスレッドで投げて置いて、セッションが
有効か(ステータスが拾えるのなら、それを拾って)を
チェックし続けるって・・・ので良いのじゃないのかな?
852841:02/04/14 22:43
>>851
>実行途中をテーブルにはき続けるのって、トランザクションの
>関係上、無理っぽいように思えるけど、どうなんだろう。

やってやれないことは無いんだろうけど、かなり面倒なことする
必要があると思う。(処理フラグを持たせて一定レコードごとにコミット、
コミットしたらカーソルを一旦クローズして再度オープン、処理続行・・・(;´Д`)

OracleのPL/SQLだとCとかで書かれた外部プログラムを
呼び出せるから、それで一定間隔(処理件数)でメッセージを
投げるとかでも出来そうだ。(俺はやったこと無いんだけどね)
#SQL Serverは触れる機会が全然無いのでわからん(;´Д`)
Sybase だったら、print でコンソールにログを吐くことで
進行状況はわかるよーにしてた。
854国際業務機器:02/04/15 22:17

DB2 で ORDER BY と FETCH FIRST n ROWS ONLY を併用した場合、最初の
n 個を取ってきて並べ替えるのか、並べ替えたものの最初の n 個を取って
くるのか、どっちか知ってる人います?
素直にinner joinしる
856バナナマン:02/04/16 12:33
昨日からオラクルの勉強しているのですが、早速わからない所があるのでお聞きしたい
のですが、表領域を作成する際
create tablespace 表領域名
datafile ’データファイル名'
size 初期に確保する大きさ
(省略)
としますが、この表領域名とデータファイル名の違いはなんですか?
表領域はフォルダーみたいなものなんですか?
もう一つあるのですが、sql*plusに記入するのですべて打ち込んだあとに間違えると
また最初から打ち直さなければなりませんが,これだと量があるとめんどくさいのですが、
何かいい方法はありませんか?
しょうもない事聞いて申し訳ありません.
857sage:02/04/16 13:05
>>856
>しょうもない事聞いて申し訳ありません.

なら聞くな。コンセプトガイドとかいうマニュアルあっただろ、読め。
SQL*Plusについても同様。んなものはマニュアルに答え載ってる。
858デフォルトの名無しさん:02/04/16 19:08
>>856
>としますが、この表領域名とデータファイル名の違いはなんですか?
>表領域はフォルダーみたいなものなんですか?

表領域ってのはOracleからみて、テーブルやインデックス、オブジェクト
などを格納する論理的な領域のこと。
データファイルは、表領域をOS側から見た実体。
1つの表領域には1つ以上(つまり複数も有り)のデータファイルが割り当てられる。

>もう一つあるのですが、sql*plusに記入するのですべて打ち込んだあとに間違えると
>また最初から打ち直さなければなりませんが,これだと量があるとめんどくさいのですが、

一度テキストファイルにSQLを書いてそれを実行させるようにする。
詳しくはPlusのマニュアルで@(アットマーク)の項の説明を読もう。
コマンドの説明のところにあるから。
>>856
状況がよくわからんが、そのレベルの事を質問できる
人間がまわりに居ない?

なんとうか「メモ帳ってどうやって起動するのですか?」
レベルだよ、それ。
860バナナマン:02/04/17 10:07
>>857
オメ-には聞いてねえよ.消えろバーか.

>>858
わかりやすい説明ありがとうございます。大変参考になりました.
わざわざ有難う御座いました。

>>859
独学でやっているんですが,まわりにプログラムに興味のある友人がいないもので
ずびばぜん。
春厨か
ヴァカなやつほど無礼だな
丁寧なんだかジャイアンなんだかわかんねーな(w
とりあえず、>859に同意。
入門書を一通り読んでみたほうがいいと思う。
バナナマンにOracleは荷が重過ぎるに3ミズホ。
865841=858:02/04/17 13:01
>>864
まあ、誰だって最初はこんなものでしょ。
3年後には大化けしてるかもよ(w

>>バナナマン
やっぱり独学か。>>863の言うとおり、入門書を見ることを薦める。
それと>>857みたいなのは徹底放置。
バナナマンはDBは他の知識があって、create tablespace がどうのと
言っているのか、それともDBってなんだか知らないけどとりあえず
Oracle ってのをやってみよーって、いきなり create tablespace が
どうのと言っているのか・・・なんしか、いきなりだな。

857 の言ってることは間違ってないと思うが・・・ポインタも示してる
し、何を反感買うような事があるんだろう。
>>866
> 857 の言ってることは間違ってないと思うが・・・ポインタも示してる
> し、何を反感買うような事があるんだろう。

性格の問題じゃないかな。手取り足取り懇切丁寧に教えてもらえないと何にもできないタイプかと。
自分でマニュアル開く手間を惜しんで結局その周辺で見かけるであろう概念(この場合だとPCTFREE,
PCTUSED,INITRANSとかかな)を知る機会も失ってるの気がつかないんだろうね。

よって865の言うバナナマン3年後大化け説にはカナーリ疑問あり。
868865:02/04/18 12:34
>>867
確かにOracleをきっちり使っていく上でその辺も大事なのはわかる
けど、バナナマンにはまだ早いって。それは入門書レベルを卒業し
た後で、Oracleのアーキテクチャの概念などと一緒に勉強すべき
内容だと思う。
#これまでのやり取りから想像するに、多分DBの経験が浅いと
#みてる<バナナマン
DBってさ、大なり小なり、なんか、セミナーとか先生に
腰を据えて教えてもらう期間が必要だと思うんだがどうかね?

かなり独学でいけてると思ってたけど、ちょっとしたセミナーとか
作業の時間を割いて大切なことを根気よく教えてくれたあのひと達に乾杯。
あとはアレだね。Webの掲示板なんかに毎日目を通す。
1ヶ月も続ければなんとなく見えてくる部分アリ。
871プロ・グラマー:02/04/19 11:12
最近データベースに興味を持ち始めSQLの勉強を始めようと思っているのですが
まだSQLの一から全くわからないので基本的な所から解説しているお薦めの
参考書があれば教えて下さい.
>>871
とりあえず本屋にいって適当にSQLと名の付く本を眺めたらどうだ。
873プロ・グラマー:02/04/20 11:56
一応一冊買ったのですがストアドプロシージャのところでつまずいてしまったのです。
というかさっぱりわかりません。
こんなところでつまずくということは実は向いてないんですか?
874300:02/04/20 13:07
ハイハイ、マジレス
>>856
>sql*plusに記入するのですべて打ち込んだあとに間違えると

>SQLって時にEDかEDITでリターン
875632:02/04/20 17:50
>>873

SQLに慣れるのが目的なら、ストアドプロシージャは(今は)無視して構いませんよ。

まずは DML と、DB設計でも勉強すりゃいいんでない?

そのあとに、適当な(873が利用可能な)環境で、そういうことも含めて再度、臨めばよかろうとおもいますよ。
876デフォルトの名無しさん:02/04/22 19:37
SQLサーバーとオラクルはどう違うのですか?
877デフォルトの名無しさん:02/04/22 19:46
>>876
ぜんぜん違う。
片方を極めると、片方を蔑むようになる。
選択によって人生が変わる。
>>877
両刀使いですが、なにか?
879デフォルトの名無しさん:02/04/22 21:00
ストアドプロシジャーってプログラミングができないと
わからない?
別にそんなことはないけどストアドプロシージャのなんたるかが分かった頃には
プログラミングもチョビットはできるようになってるでしょう。
>>876
go と /
882デフォルトの名無しさん:02/04/23 10:25
SQLサーバーにもストアドプロシージャってあるんですか?
そりゃあるわ
884デフォルトの名無しさん:02/04/23 16:21
オラクルできたらSQLサーバーもある程度できるということはないですか?
Oracleでいう○○はSQL鯖では何?ってのを調べるだけだから、基本的にはそうだと言える。
SQL鯖ってクライアントツールの出来ならOracleよか良いし。
>>884
「SQL文を書ける」って意味だけなら
多少の方言は有るものの出来ると思うが

「いろいろな管理ツールなどを使いこなす」って意味までになると
全然違うと思われる
887デフォルトの名無しさん:02/04/23 23:10
>>885
>SQL鯖ってクライアントツールの出来ならOracleよか良いし。
なるほどー。
でも、Oracle使いの私には、SQL鯖って細かいとこまで手が届かないような
印象がありますが...。どうなんでしょ。
888デフォルトの名無しさん:02/04/23 23:53
データベースを使う程度なら、両方使えるぐらいにはなるさ
あらゆるトラブルに対応できる管理者となるとどうかな
両方は無理じゃない?
少なくとも、俺には無理だった。混乱して。
889デフォルトの名無しさん:02/04/24 12:45
ちょっとお聞きしたいのですが,t03出荷とm02製品品目というテーブルがあるとして、
2000年1月の製品別の出荷合計金額をだしたいのですが、
select
t03出荷.品番,
min(m02製品品目.品名) as 品名,
sum(t03出荷.出荷金額) as 出荷金額合計
from
m02製品品目,
t03出荷
where
m02製品品目.品番=t03出荷.品番
group by
t03出荷.品番
having
sum(t03出荷.出荷金額)>=20000
and
t03出荷.出荷日 between to_date('2000/1/1','yyyy/mm/dd') and
to_date('2000/1/31','yyyy/mm/dd')
order by
sum(t03出荷.出荷金額) desc
だとエラーになるのですが,
select
t03出荷.品番,
min(m02製品品目.品名) as 品名,
sum(t03出荷.出荷金額) as 出荷金額合計
from
m02製品品目,
t03出荷
where
m02製品品目.品番=t03出荷.品番
and
t03出荷.出荷日 between to_date('2000/1/1','yyyy/mm/dd') and
to_date('2000/1/31','yyyy/mm/dd')
group by
t03出荷.品番
having
sum(t03出荷.出荷金額)>=20000
order by
sum(t03出荷.出荷金額) desc
だとちゃんといけます.これはなぜですか?to_date〜 の所が原因だと思うのですがわかりません.
>>889
SELECT句にt03出荷.出荷日が無いのにHAVING句でそれを使用しているから。
追記。DBの種類とエラーメッセージくらいは書いてくれ。
892デフォルトの名無しさん:02/04/24 16:20
ありがとうございます。havingを使う時はselect 文にあるものを使わなければ
いけないのですか?
グループ化した時にhavingとwhereの違いってなんですか?
>>890
本当か?
検証する気までは無いのだが・・・
>>892
whereはグループする前に係る、havingはグループした後に係る
894890:02/04/24 17:40
そこまでわかってるのになぜ?
HAVINGは、SELECT〜FROM〜WHERE〜GROUP BYの検索結果から
さらに絞り込むんだよ。そこに無ければどうしようも無いだろうに(;´Д`)
#ちなみにOracle8.1.7だとORA-00979が帰ってきた。
895890:02/04/24 18:08
>>890を訂正。
×SELECT句に
○SELECT句またはGROUP BY句に
896すまそ:02/04/24 22:34
横レスなんですが、whereはselect文になくても別にかまいませんよね.
havingはselect文にないものではないと駄目なんですか?
897デフォルトの名無しさん:02/04/24 23:10
そーなんだ、漏れもhavingは射影に含まれてなくてもいいと思ってた
論理的にはいけそうなんだけどな。
内部でhaving用に持っておけばいいだけだと思うのだが。
898デフォルトの名無しさん :02/04/24 23:39
Oracle 8 W/S鯖を仕事で使うことになったんですが、ツールが多すぎて、
何していいかさっぱりわかりません。

とりあえず、データベースの構築をしたいんですが
まずどうすればいいんですか?
ユーザIDやパスワードってどうやって設定するんですか?
わけわからなくて泣きそうです。><

マニュアルの読み方もわかりません。○○ガイドを参照してくださいって
書いてあっても、付属してないし。OTNにあったけど会員登録しないと落とせぬ!。・゚・(ノД`)・゚・。

899デフォルトの名無しさん:02/04/24 23:41
>>898
857見れ
>>898
登録はただなのでとりあえず登録しとけ。
でも、OEMとかでたいていのことはできるんじゃないの?(使ったことないが)
901デフォルトの名無しさん :02/04/24 23:51
>>899
さーんクス。とりあえず@のついているところを読めばいいんだね?
で、質問だけど、VBでDBのレコード操作(更新/追加/削除)をする
プログラムって、まったくのOracle初心者がDBの構築から初めて
どれくらいでできますか?
DBは単純な顧客名簿だと考えて、適当に見積もってください。
902_:02/04/24 23:53
>>900
個人情報の漏洩に過剰に敏感な年頃ですが、
とりあえず登録してみます。
903デフォルトの名無しさん:02/04/25 01:09
>>901
周りに知ってる人誰も居ないの?
(そうなら、発注した客の勇気をたたえるが(笑))
まぁ、教育にでもいったら?
http://otn.oracle.co.jp/training/index.html
904デフォルトの名無しさん:02/04/25 01:15
CBT(CDROMの自習ソフト)ならそんなに高くないし
自分のペースで勉強できる。
急ぎなら、CBT購入がおすすめ
せめてDB構築だけでも下請けに出せ・・・

一番、金がかかるところだけど(w
いや、設計だけでも外注に....
907_:02/04/25 01:35
レスどもです。参考にさせていただきます。

周りにはだーれもOracle使える人がおらんです。
自分は時給約1052円で働いているので、いつかは他の会社いくつもり。
なのでOracle習得はスキルを身に付けるビックチャンスとおもっちょります。
まぁ、その Oracle8がunixだったら、どこからかのサイトから
構築スクリプトを拾ってきて、環境に合わせて流せばある程度は
なんとかなる。
909仕様書無しさん:02/04/25 01:45
Windoms2kです。鬱。。。
SQLのミニガイドブックを一冊。
OraclePressあたりのDBAガイド一冊。

特に後者を薬だと思って読むといいよ。
二日分のバイト代で買えておつりもくるだろ。
ものにすれば何百倍にもなって帰ってくるはずだ。
911仕様書無しさん:02/04/25 01:49
SQL本はやっぱり必須ですね。
後は、Oracle本チェックしてきます。ありがとう。
うちの会社、書籍代がなかなか出ないから、
自腹になるんだよね。。・゚・(ノД‘)・゚・。
アルバイトだろ?自腹で買えよ。

俺が会社を辞める前は、どこの職場に出向してもどうせ同じ本を見るんで自分で買ってた。
俺がアルバイトでやってたときは、どこの職場に行ってもどうせ同じ本を見るんで自分で買ってた。
俺がフリーでやってたときは、どこの職場に行ってもどうせ同じ本を見るんで自分で買ってた。
俺がまたプロパーになったときも、やはり同じ本を見ている。

経費で買ったら、持って帰って読んだり、そこやめるとき本を持っていけないぞ。

入門本は会社で買ってもらってもいいかもね。読み捨てだし。
913デフォルトの名無しさん:02/04/25 02:10
>>912
いるんだよね。
本とか開発用ソフトウェアだけ立派に集めてるプログラマってさ。
「で、仕事は?」ってきいたら何も満足にできない奴だったりするんだよね。
914仕様書無しさん:02/04/25 02:14
申し訳ないことに、一応正社員ですよ。(w
自己投資のために本を買うことも重要っすね。
スタンダードな本は買った方が良いな!
基本的にちと高い本になるけど

入門本は立ち読みでエエやろ
最近はインターネットで調べた方が
適切な情報が出てくる場合があるな
某掲示板の過去ログに全て目を通せ。
917すまそ:02/04/25 09:58
データ上の日付が’2000/01/01’とした時,日付を
to_char('2000/1','yyyy/mm')ではきちんとしたデータが出ません.
やはりきちんと1の時は01、2の時は02とした方が良いでしょうか?
918デフォルトの名無しさん:02/04/25 10:16
>>917
'2000/1'はすでに文字列なのに、to_charしてどうする(w
919すまそ:02/04/25 16:03
>917
すみません間違えました.データ上の日付が’2000/01/01’とした時
select
sum(decode(to_char(出荷.出荷日,'yyyy/mm'),'2000/1',出荷.出荷金額,0))as 出荷金額001
(省略)
とした時、出した出荷金額001は0になります。
やはりこれは’2000/1’の所を’01’にしなければいけないのですか?
920890:02/04/25 17:05
>>919 その通り。書式モデルの説明をみれ。
921デフォルトの名無しさん:02/04/25 21:48
VBでデータベース処理をする仕事をやろうと思っているのだが、実務では一回一回
の仕事はそんなに違うものなのですか?
922デフォルトの名無しさん:02/04/25 21:52
>>913 んな奴見たことねーよ。入門書買い捲るタイプの事?
>>916
ここですか?(w
>>921
上につく人間の方針やら、お客さんの標準やらで、見た目はだいぶ違うかもね。
とはいえ、抑えなきゃいけないところは変わらんでしょう。
(VBが他の言語になってもそう変わらないのでは)
>921
DB設計した奴の腕によって全然違うぞ(w
926すまそ:02/04/26 10:48
m02製品品目をwm02製品品目2から更新したいのですが
update m02製品品目
set
m02製品品目.品名=(select wm02製品品目2.品名 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.得意先コード=(select wm02製品品目2.得意先コード from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.得意先品番=(select wm02製品品目2.得意先品番 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.受注単価=(select wm02製品品目2.受注単価 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.追加年月日=(select wm02製品品目2.追加年月日 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.変更年月日=(select wm02製品品目2.変更年月日 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番)
where
exists
(select wm02製品品目2.品番 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番)

update m02製品品目
set
m02製品品目.品名=(select wm02製品品目2.品名 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.得意先コード=(select wm02製品品目2.得意先コード from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.得意先品番=(select wm02製品品目2.得意先品番 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.受注単価=(select wm02製品品目2.受注単価 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.追加年月日=(select wm02製品品目2.追加年月日 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番),
m02製品品目.変更年月日=(select wm02製品品目2.変更年月日 from wm02製品品目2 where m02製品品目.品番=wm02製品品目2.品番)
とでは更新内容が違います.existsが存在を確認する為のものという事はわかっているのですが、setから下の部分にもm02製品品目.品番=wm02製品品目2.品番
としているのであまり意味がないような気がするんですが、これはどういうことですか?
>926
貴方の書き込みを見て、他人がどう感じるか想像してチョビヒゲ。
狙ってるんならともかく。
928デフォルトの名無しさん:02/04/26 11:27
ACCESSのMDBファイルからSQL*Server2000へデータのインポートを
するプログラムをVBで作成しています。

複数のテーブルインポートを行いますが、1つでもエラーがあれば
全てのテーブルをロ−ルバックする仕様です。
ところが、現状、エラーになったテーブルだけがロールバックされ、
その他のテーブルはコミットされてしまいます。
どなたか、全テーブルのロールバックを行う方法をご存知でしたら教えてください。

よろしくお願いいたします。
>928
DTSツカエ
930928:02/04/26 11:43
すいません、説明不足でしたので補足します。

DTSを使いmdbからインポートを行います。
DTSで発生したエラーについては、
自動的にテーブル単位のロールバックが行われるのですが、
テーブル単位ではなく、処理全体のロールバックできる方法はないのでしょうか?

931890:02/04/26 13:53
>>926 さすがにこれはうざい。
更新内容が違う(多分NULLが入るのがでてるんだろう)のが
わかってるんなら、それがどう違うのかよ〜く考えてみれ。

m02製品品目とwm02製品品目2で品番があったりなかったり
してるんじゃないのか?
>930
BooksOnlineの「DTS トランザクションのプロパティの設定」参照
933しゅばい:02/04/26 15:43
データベースのこれは勉強した方がいいって言うのを5つ教えて下さい.
>>933
それはあんたが開発者なのか管理者なのかでかわる。
いずれにしろ、SQLが出来なければ話にならないがな。
Oracle
SQL鯖
InterBase
PostgreSQL7
MySQL

どうよ?(w
936デフォルトの名無しさん:02/04/26 16:15
Vantive というデーターベースを使っているのですが、検索するとフリーズします。
どうしてですか?
>>935
まいった。
完敗だ。
>>935 そろそろInterBaseの代わりにDB2 UDBなんかはどう?
939デフォルトの名無しさん:02/04/26 19:36
Oracleでなのですが、
あるユーザーでsqlplusでconnectした後、どのテーブルが存在するのか知りたい時は、
何のコマンドを打てばよいのでしょうか?

MySQLでは、show tables; でOKなのですが、Oracleでの方法が分かりません・・・。

それらの説明があるサイトとかってありません?
(Oracle社のサイト以外で・・・)
>>939
アホには見えないようになってます。
(>>940 ・・・正解)
942しゅばい:02/04/26 20:36
SQLのこれは勉強した方がいいって言うのを5つ教えて下さい.
>>942
なぜ5つ?その数字の根拠はなんじゃらほい
>>939
そういうシステムオブジェクトとかって
各社共通のビューを作ってくれたらとっつきやすいのに
って思うんだけどねぇ。
945デフォルトの名無しさん:02/04/26 22:13
みなさんVantive については知らないんですか?
検索かけると
「検索中、、、」
とかでて
「あー今一生懸命検索してるんだなー」
とか生暖かい目で見守ってると、5分くらい砂時計のままで、
「もしや」
と思ってctrl + alt + del 押すと

 Vantive (応答無し)

とかなってるんです。
どうしようもなく使えないデーターベースです。
なんでこんなにクソなんですか。
946デフォルトの名無しさん:02/04/26 22:14
しかも強制終了すると、入力中のデーターも道連れにして落ちるんですよ!
どうしてくれるんですか!
>>946
そんな糞DB何の用途に使ってんの?
>>946
Vantive って何か知らないけど、「応答無し」は、単にWindows
メッセージに対して応答していないだけでしょ?
処理自体は頑張ってやってんじゃないの?

で、強制終了で入力中のデータが道連れって当たり前のような・・・
というか、妙に残る方が怖くない?
949デフォルトの名無しさん:02/04/26 23:57
>>947
顧客情報の管理です。客が300万人いるんです。
>>948
1回Vantive を再起動して、もう一度検索をかけるとうまくいくことが多いです。
このときは10秒くらいででます。だから5分も待つのはおかしいとおもいます。
なんらかの処理が進行しているような気配はありません。

入力も、3件までしかバッファできなくて、未入力が3件ある状態で4件目を開こうとすると
「メモリーが足りません」
とかでて入力できないのです。
そういうときは、わざわざどれか1件を急いで入力完了してから4件目を開きます。
面倒くさくてしかたがないです。
>>947
http://www.vantive.mitsui.co.jp/vantive/
これかい?

落ちるっていうのはクライアントのことだよね?
サーバoracle,SQLserver,sybaseってなってるし。
951デフォルトの名無しさん:02/04/27 00:33
>>950
そうです、そういう情報がほしかったんです。
クライアントの名前がVantiveで、中身はオラクルやらSQLやらサイベースやら、条件によって変わるんですね?
じゃあ、そのクライアントがVB製なのかな?
>>944
どのDBもそれぞれ異なる設計思想で作られ、異なる実装が行われている。
ビューを統一したくてもできないし、したところで「本当に重要な」情報はみれない。

テーブル名の一覧だって、テーブルがどの空間概念上に存在するかによって
取得できなければいけない情報も異なるだろ?
953デフォルトの名無しさん:02/04/27 16:19
>>939
正解をそのまま教えるのはなんだからヒントだけ。
概要かリファレンスでデータ・ディクショナリを探してみよう。

(´-`)..。oO(そろそろ次スレの季節)
>>913
できないから買ってるんじゃないの。

少なくとも、オレの周りに居る人で、
書籍多く持ってて無能なやつは居ないぞ。
次スレタイトル、どんなのが良い?

SELECT データベース総合スレ,2 FROM ム板;

とか? SQLスレミタイデダメカァ
ネタスレじゃないからシンプルなのでいいよ。
sqlはやめてくれ。
sql質問スレになっちまう。
958テンプレ案:02/04/28 12:18
比較的まともそうなところを拾ってみたけど、どうよ。

前スレ
http://pc.2ch.net/test/read.cgi/tech/1001351439/

関連スレ
SQL教えて〜!!
http://pc.2ch.net/test/read.cgi/tech/1000116969/
Access使い集合!
http://pc.2ch.net/test/read.cgi/tech/1005078204/
ACCESS総合相談所 その3
http://pc.2ch.net/test/read.cgi/bsoft/1019087338/
InterBaseを使いこなすスレ
http://pc.2ch.net/test/read.cgi/tech/1015250429/
>>ファイルメーカー ユーザーの集い<<
http://pc.2ch.net/test/read.cgi/bsoft/1016207736/
■○■dBASE個人面接所
http://pc.2ch.net/test/read.cgi/bsoft/984157332/
桐ってどうよ?
http://pc.2ch.net/test/read.cgi/bsoft/976012208/
dbMAGICについて
http://pc.2ch.net/test/read.cgi/tech/1000536738/

★★★ SQLサーバ VS オラクル ★★★
http://pc.2ch.net/test/read.cgi/tech/1008908462/
【ノウ】DBアプリ開発ノウハウ【ハウ】
http://pc.2ch.net/test/read.cgi/tech/1015807409/
959追加:02/04/28 13:13
960しゅばい:02/04/28 16:03
今独学でVBとSQLの勉強をしているんだけど、ある程度レベルが上がったら就職しようと
思っていますが,実際の所企業に就職するかそれとも派遣会社に行くか迷っています。
よいアドバイスがあれば聞かせてください.
あっそれと独学だとどこまで勉強したらよいのかわからないので学校に行こうかとも
思っています.学校だと求人も来ているかも知れませんし.
ちなみに自分は26歳です.
正直、PGとしてなら派遣でないと難しいのではないでしょうか。
962これも追加して:02/04/29 19:21
「すれ立てるまでもない・・」から移動してきました。
データベース設計で2テーブル間に多対多のリレーションを張りたいんですが
リレーションが設定されていないレコードを効率よく SELECT できるような
設計が思いつかずに困っています。今は次のようにしています。

CREATE TABLE TABLE_A (
  TABLE_A_KEY INTEGER NOT NULL PRIMRY KEY,
  :
);

CREATE TABLE TABLE_B (
  TABLE_B_KEY INTEGER NOT NULL PRIMARY KEY,
  :
);

CREATE TABLE RELATION_AB (
  TABLE_A_REF INTEGER NOT NULL FOREIGN KEY REFERENCES ON TABLE_A (TABLE_A_KEY);
  TABLE_B_REF INTEGER NOT NULL FOREIGN KEY REFERENCES ON TABLE_B (TABLE_B_KEY);
);

この状態で、

SELECT * FROM TABLE_A WHERE TABLE_A_KEY NOT IN (SELECT TABLE_A_REF FROM RELATION_AB);

というクエリーを投げると当然ながら悶絶するほど処理が遅いのです。
こういう場合に有効なデザインにはどのようなものがあるのでしょうか?
>>962
なぜWeb制作板に・・・・と思ったら板分割前のスレか。
>>963
SELECT *
FROM TABLE_A A
WHERE NOT EXISTS (
  SELECT TABLE_A_REF
  FROM RELATION_AB REL
  WHERE A.TABLE_A_KEY = REL.TABLE_A_REF );

相関副問い合わせ使うほうが早い気がする。
これで等価だよな?SQLのこと言ってんじゃないのかな?
自信ないのでsage
966632:02/04/30 02:40
>>963

全部SQLでやんなきゃダメでしょか?

フルスキャンで両テーブルをぶっこぬいた上で、ホストしているほうのプログラムで対処するも一法かと…



WOなら、JDBC経由でテーブルぶっこぬいてきて、
使いたいテーブルをUIにドラッグ&ドロップ。
必要なメソッド・オブジェクトも「使うだけ」。

あ、スレ違いだな。
968963:02/04/30 03:17
皆さんレスありがとうございます。

>>965
確かにこちらの方が格段に速く処理できますね。
ただ、データ件数が数百万件ほどあるので、
いずれにしても実用的なレスポンスでないという点は変わりません。

>>966
全データの抽出ではきついものがありますが、
事前に絞込みがうまく行えればそれも手かもしれませんね。
検討してみます。
>>963
DBは何使ってる?
ORACLEならMINUSという便利な関数があるんだが・・・・

SELECT * FROM TABLE_A
MINUS
SELECT * FROM TABLE_B;

で、望みの事は出来る。
#TABLE_AとTABLE_Bは全く同じ型のフィールドを同じ数だけ持つ場合
#TABLE_Aのみに存在する行を取得する

でも、型にINTEGER使ってるからORACLEじゃないな。
EXCEPTかDIFFERENCEは使えないか?
970963:02/04/30 03:28
>>969
今使っているのは InterBase6 です。
EXCEPT も DIFFERENCE も MINUS もないようです。
最悪、リレーションの最大数を見積もって、
外部キーフィールドを多めに定義しておいて、
TABLE_A と TABLE_B の間を直接つなぐことになると思います。
971632:02/04/30 06:47
>>963

代案1
整合性保証のための迷子探しならファイルアウトしてマッチング。
その間他の処理は停止というのがよさげ。


代案2

A, B 登録時に、同じ LUW で releation entry つくっちゃって、
相方は not-linked を示すダミーコードを割り当てといて、
未割り当ては、そいつで探すってのでどう?
ないものを探すより速いはず

データが多いのでなんだけど、どうせリンク張るんだろうから
データ量は問題にはならんと推定。
インデックスの書換えが不細工だけど。多件更新したらインデックスの
再編成でもするってことで。


対話式なら探すほうの速度優先ってかんじでどうっすか?



972:02/04/30 11:17
データベースを実務で使うにはストアドプロシージャやデータの正規化するための
知識がないとやばいですか?いやなんとなく苦手な方なので・・・。
>>972 そうだねぇ。あったほうが良いねぇ。
関わるDBMSがリレーショナルデータベースなら体に染み込ませる順番は
リレーショナルモデルの概念、正規化、ストアドプロシージャだろうな。
ま、ストアドプロシージャを使えないDBもあるから急ぐ必要はないよ。
エドガー・コッドの理論に関する良書があったら読むべきだね。
小学校の算数で習う集合から類推できれば難しいものじゃないよ。
勉強と一緒に実践を繰り返していけば、そのうち理解が深まるよ。
そういうわけでよ、ま、頑張ってくれや。
>>927
苦手って、仕事でお金もらうなら、そんなこと言えないだろ(w
趣味なら必要なし、好きにすれば。
ユーザとして「使う」なら知らなくてもOK。

だが、開発者、とくに設計・デザインをするなら必須。
その辺を知らない(ISAMオンリーな)奴が設計したDBの
酷さといったら...ブルブル
976963:02/04/30 14:35
>>971
目的が、リレーション未設定のデータを対象に新たにリレーションを張る、
という処理で日常的に発生するものなので、他の動作を停止というのは難しいです。
代案2は現実的なところだと思います。
今は、基本設計を変更して多対多のリレーションを分解できないかどうか検討中です。
それでどうしても上手くいかないようなら代案2を中心に実装を進めようと思います。
ありがとうございました。
ちょっと早いかなとも思ったが、次スレたてました。
http://pc.2ch.net/test/read.cgi/tech/1020158297/
978次スレの1:02/04/30 18:39
>>962
最後のやつは最近書き込みがないみたいだから
関連スレに入れなかったよ。気を悪くしないでyo。
>>977
BAD ADDRESSでみれないんだが…
980979:02/05/01 00:30
ごめん。独り言
981デフォルトの名無しさん:02/05/01 12:43
どなたか、セーブポイントって言葉を説明してもらえませんか?

SQLServer と理論とじゃ、定義違ってますよね、これ。
うまく説明できないのだけど。
理論じゃ、チェックポイント=セーブポイントなんでしょうか。
982日下部圭子 ◆Z/ID97yU :02/05/01 12:54
新スレ作りました。
早めの移行をお願いします。
http://pc.2ch.net/test/read.cgi/tech/1020225181/l50
>>982
977がもう作ってるじゃねーか。よけいな事するな!!
ちゃんと削除依頼出しとけよー。
関連スレとかが丁寧に書かれているPart2で行きましょう>ALL

http://pc.2ch.net/test/read.cgi/tech/1020158297/
>>981 あんたの言う「理論」ってなに?
SQLServer のチェックポイントが Informix で言うところと
同じ意味で在れば、SAVEPOINT とはまた違うと思うよ。
なんの DB なのかは知らないけど Oracle にもチェックポイント
あるでそ?
986デフォルトの名無しさん:02/05/02 01:35
>>984
ごめん、つっこまれるかと思ったけど、敢えて省いたんだ。
じつは情報処理の試験をこの間受けまして・・・
いわゆる参考書と言葉の定義が違ったようだったので。

987デフォルトの名無しさん:02/05/02 01:44
>>985
SQLServerのセーブポイントは、トランザクションの入れ子のようなもので、
トランザクション内で部分的ロールバックをやるようなものだったと思います。

参考書で言うセーブポイントはチェックポイントと同義で、
DBの変更をバッファからドライブへ書き出した直後で、強制終了等した後に、
ウォームスタートでとりあえず最初に参照するポイントです。
988デフォルトの名無しさん
SQL*Serverのストアドプロシジャをネストして使用する方法について教えてください

ACCESS2000のパラメータ付きクエリを、
SQL*Server2000へ移行したいと考えています。
このクエリはネストしていて、クエリ1の結果(結果は複数レコード)を
使用してクエリ2の処理を行います。
基本的にはストアドプロシジャに移植すればよいと思いますが、
ストアドプロシージャの書き方がわかりません。

もしクエリ1の結果が1件であれば、クエリ2の中からEXECUTE命令を
使ってクエリ1を呼び出せば処理することが出来ると思いますが、
クエリ1の結果が複数の場合はどうしたらよいでしょうか?

クエリ1の結果を一時テーブルに格納するという手も考えたのですが、
多ユーザからの同時アクセスを考えると、あまりよい方法とも思えません。
もっとスマートな方法をご存知の方がいらっしゃいましたら教えてください。
よろしくお願いいたします。