【より良い】データモデリング【モデルを】at DB
【より良い】データモデリング【モデルを】 - 暇つぶし2ch502:NAME IS NULL
08/12/23 20:52:33 GasTPqXo
保守

503:NAME IS NULL
08/12/28 05:07:16
状態が欲しい場合も無く無いと思うけどなあ。


導入事例ってあんまり当てにならないのか。まあそもそも営業資料だしね。
導入されても、実際十分に活用されてるかどうかや、現在も使われてるかどうかはわからないしなあ。

504:NAME IS NULL
09/01/17 01:16:45 jMspYNZv
町場の工務店用データベース作成のためこんな感じのER図を作成してみたのですが
もし問題があれば指摘していただけるとありがたいです。 
URLリンク(niyaniya.info)

業務の基本的な流れは 見積作成⇒請負契約⇒ 工事 です。オリジナルはもうすこしマスタテーブルが
増えて複雑なのですが、基本はこんな感じです。 よろしくお願いします。 

505:NAME IS NULL
09/01/17 23:29:03
>>504
普段、IDEF1Xでしか読み書きしてないから、リレーションシップの
意味が正しく理解できてるかわかんないのと、業務要件が不明だから、
自分の所見でコメント。
(1)「見積明細」の主キーは”見積ID”では?。
  「見積明細」は「見積」のサブタイプということだと思うけど、
  意味があって分けてるのかな?
(2)「請負契約明細」についても(1)と同様。
(3)「請負金額入金」「請負金額請求」は、「入金」「請求」として
  独立エンティティにするか悩むところ。
  入金単位や請求単位が請負契約単位なのかな?
 (1契約で入金は複数回とかないのかな)
(4)何故「仕入契約」「下請契約」は"業者ID"が主キーに
  なってるのに、「請求契約」の方には”顧客ID”が主キーに
  なってないの? この違いの意味は?
  両方とも<契約>という同じような意味のエンティティと
  考えれば、その属性も同じような主キー構成で
  いいと思うけど。

※属性なしで、エンティティ名だけでリレーションシップを
 考えた方がわかりやすいですよ。

506:NAME IS NULL
09/01/18 03:01:18 rdZV1j35
>>505
レスありがとうです!

ありがたい指摘なのですが理解する語彙が足りずアドバイスを生かしきれないのが
残念ですが・・・

(1)で言われた「見積明細」テーブルは、本来「見積」テーブルと一体の繰り返し要素を別テーブルに分離した
もので主キーは設定していません。 1つの見積に対して複数の見積項目があるので2つのテーブルに分離しました。 
販売業者における販売テーブルと販売明細テーブルのような関係です。

(2)の「請負契約」と「請負契約明細」も同様の関係です。

(3)の「請負金額入金」「請負金額請求」は確かに一つのテーブルに統合できそうです。
盲点でした・・ありがとうございます。

問題は(4)でして、、、『なぜ「請負契約」の方には顧客IDが主キーになっていないのか』
との指摘ですが、 請負契約の場合、1つの契約に相手となる顧客は1つだけなのですが、下請契約や仕入契約は
1つの工事に相手となる業者は複数に及ぶことがあります。 その質の違いから差が生じたと思います。 

これがはじめてのデータモデリングで試行錯誤の結果ですのでもしかしたら基本的なところで誤理解をしてる可能性
ありですので・・・その程度のもんだとオモっていただけるとありがたいです。



507:NAME IS NULL
09/01/18 04:03:52
明細テーブルにも主キーはつけるべきだよ。
この場合は表示順を主キーにすりゃいいんじゃないかな。

> (3)の「請負金額入金」「請負金額請求」は確かに一つのテーブルに統合できそうです。

統合すると請求1回に対して入金複数回のケースとか対応できなくなるよ。
あなたんとこの業務的には問題ないのかも知れんけど、
柔軟性保つために分けておいたほうがベター

主キー入ってないテーブルがあること以外は、大体OKそうに見えるね。
>>505は見当はずれだから気にしないほうがいい

508:NAME IS NULL
09/01/18 04:09:07
> この場合は表示順を主キーにすりゃいいんじゃないかな。

ごめん、親テーブルの主キー+表示順というつもりだった。
たとえば見積明細では(見積ID、表示順)を主キーにする

509:NAME IS NULL
09/01/18 04:25:30
>>506
505です。今日は何故か眠れないのでレス
ちょっと説明がまずかったみたいなので、まず用語から。
※文中の用語はググってね。
エンティティ=テーブル
属性=列項目
主キー=(簡単に言うと)一意に行を特定できる列項目

(1)の、「1つの見積に対して複数の見積項目がある」という
のは、「見積」1行に対して「見積明細」複数行という意味であれば、
「見積明細」テーブルの主キーは、”見積ID”と、明細を識別する”明細ID"
みたいなのが必要。(用語的には第2正規形)

(2)も同様。

(3)はそういう意味ではなくて、「契約」「請求」「入金」と、
それぞれ独立した(主キーを持つ)テーブルにしても良いのではという意味。
データモデルを考えるときに、業務の実態を、リソース(資源:名詞)と
イベント(出来事:動詞)に分けて、テーブルとして考えるのだけど、
例えば、
リソースは、「社員」「顧客」「業者」で、
イベントは、「見積」「契約」「請求」「入金」「工事」「支払」
なわけだ。

以上

510:NAME IS NULL
09/01/18 04:28:57
>>507
どこが見当違いか、指摘してもらえるとうれしいね

511:NAME IS NULL
09/01/18 04:43:29
>>507
もしかして、(1)でサブタイプって書いたことを見当違いって
言ってるのかな?
エンティティ名だけ見ると、第2正規形を意識したと思えたけど、
もしかして主キーが同じで、あえて分けたのかと深読みしただけ
なんだけどね。

(3)は509で書いた通り。
(4)は、業務要件わからないから、所見てことで、
主眼を「請負契約」と同様に<<契約>>に置いてもいいかなと思ったのさ。

よろしく。

512:NAME IS NULL
09/01/18 12:41:42
あのさ、「明細」ってかいてあんのにピンと来ないようじゃお話にならないと思うよ。

513:506
09/01/18 20:01:21
>>507
>明細テーブルにも主キーはつけるべきだよ。
この場合は表示順を主キーにすりゃいいんじゃないかな

なるほど! これは勉強になりました。 キーはテーブルの結合しか用途がないもの
だと思っていたのでそういう使い方が出来るのは初めて知りました。

>主キー入ってないテーブルがあること以外は、大体OKそうに見えるね。
>>505は見当はずれだから気にしないほうがいい

いえいえ皆さんのアドバイスは大変勉強になります。 


514:506
09/01/18 20:11:51
>>509
>「見積明細」テーブルの主キーは、”見積ID”と、明細を識別する”明細ID"
みたいなのが必要。(用語的には第2正規形)

たしかにおっしゃるとおりです。 明細テーブルの各行を識別するキーも必要ですね・・・。
ここらへんはまったくノーマークでしたのでありがたい指摘です。  その意味で
見積明細にも見積IDを主キーに設定すべきと仰っていたのですね。 私の間違いでした・・・

>データモデルを考えるときに、業務の実態を、リソース(資源:名詞)と
イベント(出来事:動詞)に分けて、テーブルとして考えるのだけど、

この辺はいまの自分にはちょっと高度です もうちとレベルアップしてからアドバイスを
生かさせていただきます^^;





515:NAME IS NULL
09/01/18 23:18:35
高度ってあんた・・・

516:NAME IS NULL
09/01/19 01:35:56
>>512
まぁ、そう言いなさんな。所見で深読みしたけどさ。
最初の図(モデル)から想像したのは、子エンティティの
外部キーについて、親エンティティからのキー移行だけを間違えて
記述したものと深読みしたということ。
(よって、排他的サブタイプと見たわけ)
業界/業務要件が不明なので、モデルから判断するだけ、つまり、
名称(用語)でエンティティを安易に想像してはダメってことも
あるからね。(話をよく聞かないうちに決めつけちゃダメさ)
ちなみにウチの所でも、第2正規化の結果を「XX」「XX明細」と
してるよ。

スレ汚しスマソ。

517:506
09/01/19 20:38:23
みなさんのご指摘を参考に最終的に↓のように仕上げてみました。これでなんとか
やってみようと思います。 どうもありがとうございましたです!
URLリンク(niyaniya.info)

518:NAME IS NULL
09/02/01 03:55:40
業務知識が無いと、まともな設計が出来ない見本だな。
運用で不具合出まくるだろうなあwww

519:NAME IS NULL
09/06/04 09:25:50 w6Hljn46
五階層まで登録できる工事の見積システムのデータモデリングをしてるのですが
↓こんなかんじでどうでしょう^^;  

URLリンク(imepita.jp)
項目A→項目B→項目C→項目D→項目E と具体的になっていく感じです

例) 電気→3LDK標準電気工事→玄関→外部玄関等→照明器具 DWP-3524DS

項目Aによって必要な階層がことなるので動的に階層を変更できればいいのですが、、

520:NAME IS NULL
09/06/07 19:19:03
>519
階層構造を柔軟にとか考えると、
所要量展開、再帰、LLC、
部品展開、原価計算、
といったところをある程度考慮して取り入れながら
設計するのかなと思う。
これらでぐぐってみてもよいかと。


521:NAME IS NULL
09/06/09 23:40:48 jbiexGaF
>>519
その前に親子関係は1対多なんだよね?
何もテーブルを幾つも作らなくても、
子情報が主キーでそこに親情報が従属するような
再帰的な1テーブルで済まないの?

これだと、多重構造が可変でも耐えられるでしょ?



522:NAME IS NULL
11/02/08 23:20:58
目指してる 未来が違う byシャープ
URLリンク(twitter.com) 


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch