【より良い】データモデリング【モデルを】
みなさん、ありがとうございました。 おかげで投票サイトが完成しました。 http://www.kiminari.info/kokumin/ なお、不具合報告等のスレッドを作りましたので、 ご協力いただける方は、よろしくお願いします。 http://pc8.2ch.net/test/read.cgi/php/1113871597/ >268 検索速度については単表検索なら、簡単なコードのほうがいいと思います。 ただ、この設計だと投票結果テーブル検索時はユーザ情報テーブルをJOINするオーバヘッドが発生しますよね。 インデックス容量を考えると、コード有利です。 メールアドレスが変更される可能性があり、かつ変更後も同一人物として扱う必要があるならコード化です。 なければ、メールアドレスがキーのほうがアプリ工数は少ないかもしれません。(JOINの必要なし) 業務特性、システム特性を考えてトレードオフで考え、最良の設計を。 >>270 > メールアドレスが変更される可能性があり、かつ変更後も同一人物として扱う必要があるならコード化です。 実は私もこの問題で>>268 を見てモヤモヤしていました。ユーザー情報テーブルですが、 001 a@a.a pass1 001 a_new@a.a pass1_new 002 b@b.b pass2 となり、ID(主キー)を維持できなくなると思うのですが。 うーん。投票されて、その時点での実際上のIDはメールアドレスですよね。 投票者はID { 001,002...}は知らない。 それで、既に投票されているかチェックに行く。そのための主キー。 とするとメールアドレス以外に主キーは考えられない。 ER図から3NFまで自動変換するソフトウェアを探しています >270 いえいえ、違いますよ。 001は絶対に1レコードのままです。 変更情報は、 @「メールアドレス変更履歴エンティティ」を抽出する A「変更前メールアドレス」項目を追加する あたりで表現します。 純粋なデータモデルとしては@が正解とされますが 業務要件が「直近1世代の変更前アドレスだけの保持でよい」などであれば Aも現実的です。 メールアドレスを外部キーにもつ列全部に UPDATE CASCADE をつけれ メールアドレスを外部キーにもつ列全部に UPDATE CASCADE をつけれ。 >>273 @が正解ですね。無理に>>268 の枠組の中で解を求めたのが いけなかった。 個人や組織や会社もろもろに 「パーティ」ってスーパーセット設けるのって実際どうなんでしょう。 よくやるのでしょうか? コードに意味(何桁目が年式をあらわすなど)を持たせないで 全くの連番だと、コードを見ただけでは全然類推ができないし 使いにくいと思うのですが、コードに意味を持たせないメリットは何。 コードに意味を持たせても、切り出して判断に使わなければOK? 連番は採番しやすくていいのだけれど。両方満足させる方法があれば。 ただの連番ならDBMSが勝手に作ってくれるからラクじゃん。 >>279 伝票番号だって、車のナンバーだって、出席番号だって、電話番号だって、意味を持たないだろ。 (言葉遊びの語呂合わせなどは別として) 単に個別を識別するためのものだ。 世の中の仕組みがそうなっていることに気が付けよ。 >>281 電話番号は意味あるよ。 地域コード - 連番 じゃん。 伝票番号も会社によって YYYYMMDDXXXXX とか当たり前にある。 >>281 出席番号は連番だが名前の読みの50音順に並んでたりするから そんな場合は意味を持っている、名前の読みについて少しは類推ができる、と 言えると思うがどうか。類推する側が50音順って決まりをわかってないといけないが。 転入生があると転入生は連番の最後で我慢してねとか、誰か転校しちゃうと欠番とかはあるんだろうが。 出席番号をつけるのにくじ引きで名前を引いてその順番に連番をつけるような 場合は、意味を持っていない、といえるかも。 連番であっても意味がある場合とない場合があるということではないのか。 >>278 >「パーティ」ってスーパーセット設けるのって実際どうなんでしょう。 OOのやり方。DOAでは積極的にはやらない(と思う)。 >>285 それは、出席番号順というのではなくて、50音順という、別の意味だろ。 出席番号順のデータを作成する際に、イニシャルデータを作る手順として、 たまたま50音順にデータを投入したと言うだけだ。 だから転校生は、一番後ろになるわけで。 入学受付順、背の順、という学校もあるし、それはたまたま50音の学校が多いと言うだけ。 >>291 そういや転校生って、後ろにpushだったなあ・・・。 なんか懐かしくて胸キュンだ。 >>292 俺の学校では違ったなぁ・・・ 小・中学校では出席番号は生年月日の早い順。 高校での出席番号は五十音順だった。 ただ、転校生やらが入ってきた場合はその都度、出席番号が変わっていた。 つまり、再度、生年月日やら五十音で並べ替えられる。 >>293 健康カードとか、下駄箱とか、出席番号を記入して1年間使う物があるのに、 えらく不便なシステムだな。 えー!都度再ソートもびっくりだが、生年月日順ってのは凄いなー。 やばい、このまま果てしなく脱線しそうだ。 つまりだ、実際の業務では >293のような事態がままあるので 識別子と業務上使われる出席番号などは 別に構えるのが吉って事ですね。 健康カードテーブルと下駄箱テーブルも これで迅速な対応が出来ると。 ただお客さんとのモデリングセッションなどで 作っていく概念レベルではIDじゃなくて 出席番号を識別子とした方がいいでしょうね。 お客さんにシステム要件はなるたけ考えさせたくないし。 実装時に生徒IDでもなんでもシーケンスでふっちゃえばいい。 とか書いてたら、そもそも発端の ちゃんと>279へのレスになったな。 IDは、意味の無い連番。 出席番号は、業務ルール(五十音順など)の意味がある番号。 とすると。 出席番号は出席簿や健康カードといった プレゼンテーション部で、ユーザーの認識容易性が得られる。 ただ変更の可能性がある場合に大変。 IDは意味が無い分、業務ルール変更に関係なく 行の識別子として機能する事が出来る。 出席番号はプレゼンテーションの要件なんだから必要だが 識別子としては不安なので、それはIDを採用。 結局両方持っとけって事ですね。 >>297 ほかのテーブルから外部キーとして参照する場合は ID?出席番号? >293は 出席番号は出欠名簿リストの左端についてる番号ぐらいの利用しかなくて、 いつもは学籍番号ばっかり使ってるってことはないのか。 >>298 IDじゃないと、297で言ってるメリットが得られないです。 途中で転校生の分、出席番号振りなおしても 下駄箱テーブルはID参照してれば影響なし。 物理的な下駄箱については、頑張って貰おう。 最初から出席番号を 10, 20, 30 と、10おきにつけておけばいい。 転校生が来たら 25 などを割り振ればいいだけだ。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 転入合戦、いくぞゴルァ!! /三√ ´∀`) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,,\ワショーイ!!/ \ワショーイ!!/ \ワッショーイ!!/ //三/|三|\ /■\/■\ /■\ /■\ /■\ /■\ ∪ ∪ ( ´∀` )´∀` )´∀` ) ´∀` ( ´∀` ) ´∀` ) ,,、,、,,, ,,、,、,,, /■\/■\ /■\ /■\ /■\ /■\ ,,、,、,,, ( ´∀` )´∀` )´∀` ) ´∀` ( ´∀` ) ´∀` ) (( (つ ノ(つ 丿(つ つ(つ ノ(つ 丿(つ つ ヽ ( ノ( ヽノ ) ) ) ヽ ( ノ ( ヽノ ) ) ) (_)し' し(_) (_)_)(_)し' し(_) (_)_) なつかしいね! と思ったけど、表示順みたいなカラムでは 今もやってるなー。 総数より同じ隙間に集中した時がまずいのでは… / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 転校生の織田です \  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ ( ´Д` ) < 小田です ( ´Д` ) /⌒ ⌒ヽ \_______ /, / /_/| へ \ (ぃ9 | (ぃ9 ./ / \ \.∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / /、 / ./ ヽ ( ´Д` )< 尾田です / ∧_二つ ( / ∪ , / \_______ / / \ .\\ (ぃ9 | / \ \ .\\ / / ,、 ((( ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / /~\ \ > ) ) ./ ∧_二∃ ( ´Д` ) < 緒多です / / > ) / // ./  ̄ ̄ ヽ (ぃ9 ) \_______ / ノ / / / / / ._/ /~ ̄ ̄/ / / ∧つ / / . / ./. / / / )⌒ _ ノ / ./ / \ (゚д゚)オダデス / ./ ( ヽ、 ( ヽ ヽ | / ( ヽ、 / /⌒> ) ゚( )− ( _) \__つ \__つ).し \__つ (_) \_つ / > 意味なし連番IDと認識容易番号の2本立てでいくのがベストと考えて いいでしょうか。この方法の問題点注意点が何かあれば。 確かに意味なし連番IDを後から変更しようとは思わない。 認識容易番号では何桁目が何を表すかという意味自体が古くなったりする。 電話番号も市町村合併で市町村の枠が違ってしまえば 番号の体系と合わなくなってしまう。 新しい市町村の体系に合わせて電話番号を直して すっきりしたいと思ってしまうようなものなのだろう。 >>309 随分前のWEB+DBプレスのデータモデリングの記事に にそこらへんの事がかいてあった。 今なら全部のバックナンバーのPDFが売ってるから 読んでみるといいよ。面白かった。 意味無し連番こそ、データの識別子であって、 業務上使うコードは、ユーザーさんが使う際の便利な アクセスパスにすぎないので、ごっちゃにしちゃ いかんですうんぬんてな事が書いてありました。 310の続き じゃあOracleのRowIDやPostgreのOIDを 使えばいいじゃんって話しになりそうですが そうすると、ひょんな事からエクスポート・インポートなど する事になったりすると変わっちゃうのでだめですねー てな事も書いてあった。 >>310 WEB+DB PRESS特別総集編ってやつですね。 読んでみます。 >>302 出席番号はどうせ生徒を特定する識別キーにはならないのだから、 再割り振り・ケツに追加のどちらでも良い。 >>310 学籍番号で言えば、全く意味のない連番より、入学年度+連番のほうが見やすい。 見やすいだけで、意味なし連番と違わないのだが、 違いがないのなら見やすい方が良い。 >>314 勿論、学籍番号は見やすいほうがいいでしょう。 ただ、学籍番号ってのは業務で用いるコード、 特定のデータへのアクセスパスな訳です。 便利なアクセスパスってだけなので、 業務要件の変化によってどうなるもんか判らんので データをアイデンティファイする識別子とは別にした方がよい、 と言うのが主旨。 意味無し連番ってのが、その識別子にあたります。 WEB+DB PRESS特別総集編みました。 関係箇所がVol.11とVol.21に出てました。 どちらも著者は羽生彰洋さん。 少し説明すると、この中では、 意味無し連番->アイデンティファイア=ID=識別子=FKで使用JOIN用 認識容易番号->ビジネス上のコード体系=アクセスパス としており、一見さんに対する顧客コードのつけ方や、 商品開発で開発の最初でコードが決まりにくい場合の例などで、 意味無し連番と認識容易番号を分けて考えて両方採用する ことが大事である、と。詳しくは本文を。T字形の影響も 形を変えて入っているように感じました。 (ただ、Vol.11では主キーという言葉を認識容易番号の意味で使っていて、 使い方が間違ってないかな。Vol.21では直ってると思う。) 結構詳しく説明されてます。これに反論するのは難しいか。 意味無し連番の今までの違和感が少しはなくなりました。 >>316 俺も意味無しID、使ってはいたし コードの洗替が楽ってのも判ってたけど どうしても違和感があって、 それ読んで、識別子とアクセスパスって言い方で すっきりしました。 はぶさん、この路線で本書くのかなと思ったけど SQLドリルってのは、やられた。 >>316 このスレみてWEB+DB PRESS特別総集編買ってきてました。 なるほどなぁ〜と読みすすめてたのですが、一つ疑問が。 商品に対する品種。 商品に対する単位。 いままでこれらは商品マスタに品種や単位のコードを参照するように カラムを追加していました。 しかし、Vol21p112にあるように各関係に対して交差エンティティを作成するほうが 後のためによいのでしょうか? ちなみに作るとしたら以下のような交差エンティティを作成するのかな? 品種構造 構造ID,品種ID,商品ID 現在は1:m 単位構造 構造ID,単位ID,商品ID 現在は1:m >>319 ここで聞いてみよう http://d.hatena.ne.jp/habuakihiro/ でもまあ、システムの規模や顧客の業務内容などなどで 最適解は色々ってのが答えなんじゃないかな。 正論かつ優等生ちゃんな答えでつまんないけどさ。 >>320 サイト紹介してくれてありがとう。 みてみると交差エンティティはm:mの時、定義するように書いてありますね。 WEB+DB PRESS特別総集編によると、1:mでもとりあえず定義しとけとあったので ちょっと疑問に思っていました。 私が担当するプロジェクトはそこまで大規模なものでもないので 今回は交差エンティティを定義しない方向で進めて行きたいと思います。 >>321 いえいえどういたしまして。 なんか偶然だけど、凄いタイミングよかったね。 規模もそうだけど、 1:mって関連がどれだけ確かなものかってのを お客さんにしっかり聞いておくのが一番だと思います。 業界でしっかりと規格化されてるものだったり 物理的にそれい以外考えられないとかだったら カラムにしちゃった方がいいだろうし 「今までそうだったから」とかだと変わる可能性あるから 関連エンティティにした方が良いかも知れない。 スレ違いかもしれないけど、相互参照(交差エンティティ)のテーブルって 日本語が使えない時はどんな名前にしてますか? 〜マスタだと「〜MST」 〜のログだと「〜TRN」 〜と〜の相互参照だと「〜???」 私と似た様な命名規則を適用されている方、どうかお知恵をお貸し下さい。 自分ルールなんだから、自分で決めろよそれぐらい。 そもそもサフックスにするところから議論になるぞ。 まず、プレでも何でもつけるか否か、つける場合の分類、そして略称。 そこの末端だけのことなんだから、開発者は小脇に辞書を抱えて即引きするのが常識。 命名で悩んでる時間がもったいない。 >>324 議論ではなく、同様ので命名規則を適用している方で サフィックスだけでもどうやってるのかと意見をもらいたくて・・・。 何にせよ、スレ汚しごめ。 Crsってサフィックスを見た事があるよ。 設計・命名者はメインフレーム出身の割と古い人。 >>326 貴重な情報、ありがとうございます。 早速、関係するテーブル名を連結+CRSで命名したいと思います。 でも英語としてあってるかどうか知らんよ。 あとで保守する人にだせーとか言われるかもよ。 データウェアハウスの論理設計に関していい書籍やネット上の情報があったら教えてください。 >>323 相互参照の略ならXREFなんてどうだろう。 >>330 m:m確定ならそれいいね! 1:m, m:1かm:mのどちらかわからないときは"REF"だけでもよさそうだね。 >>329 DWHは書籍とかネットとかの情報は少ないよ。 というかね、そもそもモデリングとか正規化とか無縁の世界。 どういう切り口でデータを分析するかが目的だから、 正規化とかを ”しない” のが普通。 どうすれば必要なデータをだせるのかを最優先に考え、 その為ならば、データベースの構造がどうであってもOK。 だから、通常は業務でデータを蓄積してる、ちゃんとモデリングや正規化されたDBとは別に DWH用のDBを別に構築して、そこへ必要なデータを夜間バッチとかで流し込む。 >>329 M$のSQL鯖に付いてる。 使ってみると分かるとおもうし、 MSDNにも資料落ちてるんじゃないかな。 要は、どんな分析をしたいのかをある程度 見極めとくことだと思う。 アドバイスお願いします。 現在、商品のテーブルに商品区分のフィールドがあります。 商品区分が'1'の時、計算で使用する項目は標準単価のみ(数量x標準単価=金額)。 商品区分が'2'の時、計算で使用する項目は重量、重量当りの単価。(数量x重量x重量当りの単価=金額) 商品区分が'3'の時、計算で使用する項目は縦、横、奥行、サイズ当りの単価。(縦x横x奥行xサイズ当りの単価=金額) このような時、商品のテーブルには標準単価、重量、重量当りの単価、縦、横、奥行、サイズ当りの単価のフィールドを設けるべきでしょうか? それとも商品区分毎に各テーブルを設けるべきでしょうか? このシステムの前担当者は商品テーブルに全てのフィールドを設けているようですが、 ちょっとひっかかるところがあって、質問しました。 以上よろしくおねがいします。 なぜ2に数量があって3には無いんです? 標準単価は例外なく全ての商品に入りません? 商品テーブルに単位(1:個 2:kg 3:cm^3 など)が入ってれば・・・ 重量 2kg と 5kg 、あるいはサイズ 1m×2m×0.4m と 0.2mm×0.5m×0.05m とで、 商品名(商品コード)は同じですか?異なるんですか? 重量やサイズは注文ごとに計量加工して出荷するんですか?定重量・定サイズのもので在庫してるんですか? その辺の業態の違いで変わってくるように思いますが… >>336 >なぜ2に数量があって3には無いんです? 申し訳ありません。私のミスです。 仰るとおり3は数量x縦x横x奥行xサイズ当りの単価=金額となります。 >標準単価は例外なく全ての商品に入りません? この点なのですが、各商品区分によって標準単価の少数以下の有効桁数が微妙に違うのです。 例えば1の時は少数以下無し、2の時は少数第二位等・・・。 汎用性を考えFloatやDouble等で定義すれば解決なのですが、 仕様通りの型に何とか当てはめれないかと悩んでおります。 >重量 2kg と 5kg 、あるいはサイズ 1m×2m×0.4m と 0.2mm×0.5m×0.05m とで、 >商品名(商品コード)は同じですか?異なるんですか? 重量に関しては、2kg,5kg等というような複数の重量は無いとのことです。 サイズは複数のタイプがあるようで、そのときは商品コードはそれぞれ違います。 データの有り方としては商品+標準単価又は、 商品+重量+重量あたりの単価(標準単価)又は、 商品+縦+横+奥行+サイズ当りの単価(標準単価)のようになっており、 同じ商品で重量と縦+横+奥行等が含まれることはありません。 >重量やサイズは注文ごとに計量加工して出荷するんですか? >定重量・定サイズのもので在庫してるんですか? この当たりは商品毎に違うようで現場の人が 重量で請求するのか計量で請求するのかを決めるようで 単に個数x単価の時もあれば、個数x重量で金額を算出したり、 サイズで算出したりとまちまちのようです。 以上宜しくお願いします。 >>337 数量もCurrencyで問題ないかと思いますが・・・ 浮動小数点じゃ誤差が出てしまうのではないかと >>338 >数量もCurrencyで問題ないかと思いますが・・・ >浮動小数点じゃ誤差が出てしまうのではないかと 商品のテーブルには数量は含めない予定です。 数量はあくまで伝票入力時に入力するものとし、標準では常に1とするからです。 >>335 の >このような時、商品のテーブルには標準単価、重量、重量当りの単価、縦、横、奥行、サイズ当りの単価のフィールドを設けるべきでしょうか? >それとも商品区分毎に各テーブルを設けるべきでしょうか? この点はどのように考えると良いのでしょうか? 設計1 商品のテーブル 商品コード 商品名 商品区分 標準単価 重量 縦 横 奥行 設計2 商品のテーブル 商品コード(PK) 商品名 商品区分 標準単価 商品単価1テーブル 商品コード(FK) 重量 商品単価2テーブル 商品コード(FK) 縦 横 奥行 う〜ん、どっちのほうがいいんだろ? だれが数量を商品マスタに入れようと思うかよ 複数の重量にしてもそんなこと聞いてないと思うが >>337 > 汎用性を考えFloatやDouble等で定義すれば解決 > 重量に関しては、2kg,5kg等というような複数の重量は無いとのことです >>339 > 商品のテーブルには数量は含めない予定です。 > 数量はあくまで伝票入力時に入力するものとし、標準では常に1とするからです 重量 縦 横 奥行 って数量ですよ? お客さんから寸法や重量を指定されるたびに商品を追加するとか? 洗剤10kgタンクを10本 洗剤500gビンを200本 洗剤50kg特大タンクを2個 コレが同じ値段。 じゃあ重量73gと指定して1370本下さいと言ったら 計量してビンに入れて同じ値段で売ってくれる? アクリル板 500×200×0.2 アクリル板 400×125×0.4 アクリル板 1000×400×0.05 コレも同じ値段。 じゃあ今度は半端な数は言わない。 8000×5×0.5と指定します。 折ったら返品します。 こういう極端な例を出さないと 要求仕様をちゃんと考えてくれないのでしょうか。 >>335 これはRDBMS(ER図)の限界として、とてもよく出てくる典型的な問題ではないかな? 商品をオブジェクトとして保存できるのであれば、 商品基礎クラスを継承した3つの商品クラスを別途用意してしまえばいい。 でも、RDB使ってるなら当然そんなことは出来ないので、解決策としては (1)1つの商品テーブルを作って、そこに全部の項目を用意する (2)3つの商品テーブルを別に作る のどちらかを採用することになる。 これらはどっちが正しいということは無くて、状況に応じて使い分ける。 テーブルを分けると後で検索にjoinを多用しないといけなくなるので、 (1)のアプローチを採用することのほうが経験的には多い >>344 自分は商品基礎情報テーブルと個別商品テーブル×3を作ることが多いけど。 >>344 10個くらいが境界かな。 さすがにsubclass tableを100個tableを作る気はしない。 ちなみに(1)は正規化違反なんだっけ? ORACLE Designer vs ERwin 比較したメリットデメリットをあげてください。 使用するデータベースはOracle 10g >>344 この問題、そもそもの現実のものを、どのように扱ってるかが主眼だと思う。 その3つの商品群が混在して扱われているのであれば、テーブルは1つ。 部署違いでまったく別の群をたまたま同じように扱っているのであればテーブル3つ。 データベースってのはあくまで現実の記録だから、そこを主眼にすることは大事だと思う。 で、システム上の扱いで1つにまとまってたり3つに割れてたりして困るならば、そこはViewでカバーする。 1つのテーブルをあるコードで3つそれぞれに分けて表示したり、逆に結合したり。 あと、理想論・原則論からいけば、NULLフィールドやダミー値のフィールドを設けるのは良くない。 同一テーブルでどっかのフラグがこれなら、このフィールドは何とか。 なので、本来は3テーブル分割でまとめてみるViewを提供でよいと思う。 >>349 >>346 も言ってるが、もし3個でなくて100個だったら? 商品マスタ・部品マスタはあくまで一元化しないとヤバいとおもうが… 縦横高さなんて仕様情報を、基本マスタに、要素ごとに列を与えて載せるべきなのか? DB設計の場合、パフォーマンス用件がどうしたって重要になってくるからね。 多少汚くても一個のテーブルで収まってくれると嬉しい 上であがってるWEB+DB PRESS特別総集編Vol.11とVol.21では ハードウエアも進化してるので理想論をもう少し追求してもよいのでは?とありますね。 なので分割したテーブル数が10未満程度なら、テーブルを分割したほうがよいのかもしれません。 範囲が断続していて、なおかつ重複しないデータは、 どのようにモデリングしたらよいのでしょうか? 例えば、次のような形のデータです。 材質,最小値,最大値 SPC270D,100,200 SPC270D,250,330 SPC270D,360,380 渡辺幸三さんが書かれた 「業務別データベース設計のためのデータモデリング入門」は読みました。 (他の2冊も読みました) この本の中には、連続して重複しない場合の例は載っていましたが、 連続せず、重複しない例が載っていませんでした・・・。 初心者っぽい質問ですみません。 いきなりオフコンからの移行プロジェクトを 押し付けられてしまいました・・・。 ID,材質,最小値,最大値 プライマリキーはID Uniqueキーは材質,最小値,最大値でいいんじゃない? 順序が必要なら各材質毎にNo.振って材質,No.にUniqueキーを設定するとか。 >この本の中には、連続して重複しない場合の例は載っていましたが、 >連続せず、重複しない例が載っていませんでした・・・。 この部分がよくわかりません。 データの並びを見ると、連続して重複(材質が)しているようにみえます。 外してたらすまそ。 >>356 お回答ありがとうございます。 俺の言う重複ってのは、例えばこんな感じです。 材質,最小値,最大値 SPC270D,100,200 SPC270D,180,330 SPC270D,300,380 どう言う事が具体的に説明してみます。 板厚ごとに単価が変ります。 材料メーカーさんの都合で、 サイズの範囲が決まっています。 例えば355の例で言いますと、 200-250ってサイズは存在し得ないんです。 俺なりには検討してみたんですが、 RDBMSの制約では実現できないんでしょうか・・・。 >>357 構造は>>356 のような感じで作る。 その後制約したいテーブルをビューでラップ。 追加、更新時にトリガーをかませ、制約テーブルを読み取り違反していれば クライアントに例外を投げる。 俺だったらこんな感じにする。 テーブル制約では不可能でしょ。 358さんのいうように、アプリ(ストアド・トリガー)の範疇だと思います。 日付のついた取引の表示順序を、その日の中で任意に設定したいのですが、 定石的な方法をご教示ください。 各取引から次の取引に外部キーをもたせて連結リストっぽくすると、 挿入や削除でいじる箇所が少なくてすみますが、 リストが切れた場合の危険があるからよくないですよね? 各取引の表示順序を1からの連番としてもたせるとすると、 挿入や削除が発生したときに手間がかかります。 10おきとかの番号をつけて、足りなくなったら番号つけかえるのが 現実的でしょうか? 追記式で追加しながら順序も決めるならば、普通にリスト構造にすればいいんじゃないの? 又は、順序カラムを数値で持っておいて、差し込み先より大きい列に対して、+1するUPDATEで割り込み完了。 そもそもで、そういう仕様は蹴飛ばすような・・・。 順序が任意ならば表示側のソートで勝手にしてってするか、 ソートした最終結果だけ受け取ってがらがらぽんする。 販売管理の売上データなどで売上伝票番号がキーとなる データがあるのですが、この番号は意味のない連番なんですが (但し、その番号を入力して該当すれば売上伝票を表示します。) 別途、意味なしキーを追加したほうがいいのでしょうか? また、マスタに業務上のキー以外に意味なし連番を作成した場合に 売上データなどにマスタ値としていれるのは業務上のキーでOK? 業務上のキーを入力されたら、マスタを参照してわざわざ意味なし 連番をセットするのが面倒っていわれたんだけど・・・ >>363 > 販売管理の売上データなどで売上伝票番号がキーとなる > データがあるのですが、この番号は意味のない連番なんですが > (但し、その番号を入力して該当すれば売上伝票を表示します。) > 別途、意味なしキーを追加したほうがいいのでしょうか? どちらでもよい。 俺はシンプルなのが好きだから、必要ないときは 意味なしキーは作らない。 ただ、最近はRubyOnRailsやHibernateなど、 アプリ側のアーキテクチャの都合で意味なし連番が 効果を発揮する場合がある。 基本的には好みの問題だけど、意味なし連番をつける メリットが明らかにあるときはつける、なければつけない という方針が分かりやすいかもしれない > また、マスタに業務上のキー以外に意味なし連番を作成した場合に > 売上データなどにマスタ値としていれるのは業務上のキーでOK? > 業務上のキーを入力されたら、マスタを参照してわざわざ意味なし > 連番をセットするのが面倒っていわれたんだけど・・・ 俺なら業務上のキーをそのままセットさせる。 一応ユニーク制約はつけておいて。 はっきりとメリットを説明できないことはやらない >>364 webアプリなどでは有効ということですね。 >俺なら業務上のキーをそのままセットさせる。 マスタのキーが変更になるとデータまで変更しなければ ならなくなると思うのですが・・・・ でもデータを見たときにわかりやすいというメリットはあります。 どちらがいいのでしょうか。 つか、マスタのキーってのはそういう変更が起きないように慎重に設計するんだよ。 コード体系とか適当に作って、後で泣きを見るってのはよくある話だ 設計時にうまくできてても、使ってるうちに使い方も変わって、なんだか最適から外れてきそう。 現場の使い方の詳細な知識が有れば、余裕もって作り込み出来るかも知れないけど、現実は与えられた情報でヤマかけて作り込むしか無いな。 項目増えたらまた設計し直しって言うのも面倒だな。 業種別の汎用的なモデリング例とか共通化してしまえば楽だと思うけど、モデリングで飯喰ってる香具師には営業妨害かな。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる