X



【より良い】データモデリング【モデルを】
0100NAME IS NULL
垢版 |
04/01/22 19:44ID:???
>>98

>  今日佐藤さんに聞くと、T字形を大幅に変更したらしいよ。
> 今年には新書を出すと言われてたので楽しみ。実装につい
> ても言及して欲しいといっておいたけど、どうなる事やら。

へぇ〜。新書が楽しみだ。期待したいな。
0101 
垢版 |
04/01/25 23:31ID:HFlIdygC
 渡辺幸三ってひとの本がすごいっておもうんですがどう?
0102NAME IS NULL
垢版 |
04/01/27 11:18ID:???
ウルトラマンとガンダムどっちが強いかって喧嘩してる子供と同じだな

銀の弾など無いんだし、お前がそれで納得のいく仕事ができればそれでいいじゃないか…
0103NAME IS NULL
垢版 |
04/01/27 23:50ID:???
>>102
探しているのは銀の弾ではなくガンド・ロア クラスの兵器かと。
0104NAME IS NULL
垢版 |
04/01/31 03:52ID:???
DBDesigner使ってる人少ないのか?オープンソースの良ツール
なんだが。
http://fabforce.net/dbdesigner4/

メニューとか英語なのは痛いが、一応日本語も(難あり)使えるし、
モデリングには結構いいツールなんで、使ってみてくれ。

Delphi使える人とか、日本語化してくれると尚良いなぁ。
0105NAME IS NULL
垢版 |
04/01/31 04:51ID:???
日本語使いたきゃ別のツール使うんじゃない?
SIとかさ。
0106 
垢版 |
04/02/12 22:56ID:???
シンプルな商品マスタはこんなのでしょう

〔商品M〕   商品C  販売単価  仕入単価
         ~~~~~~
         ABC    \300     \200

 カラー・サイズがないならこれで充分でしょう。

 ところがこれで販売管理を作って運用すると
大変な事がわかります。商品数が5000件もある
ならまず間違いなく運用出来ません。

−−−−−−−−−−−−−

 年1回半分ほども単価変更が発生すると徹夜
作業になってしまうのです。さてどうしましょ?
0107NAME IS NULL
垢版 |
04/02/13 00:00ID:???
まずは、なぜ徹夜作業が必要なのか考えてみ。
0108NAME IS NULL
垢版 |
04/02/13 17:07ID:???
>>106
長年の疑問だが、商品マスタの単価の扱いは、どうするのがベストなのだろう。

COBOLの時代なら、同一レコードに単価項目を2つ(新旧)持ち、適用年月日
で判断するというのが一般的だったけど。

厳密に正規化すれば、単価は、商品マスタとは別に、
商品単価マスタ{商品コード、適用年月日、単価}を作ることになるけど、
この場合、適用年月日の判断が入るため、SQL一発で単価を取得できない。
そこで、ストアド・ファンクション使ったりするのだけど、内部的には結局カーソル
処理を行うことになる。

一方、旧来のCOBOL的なレイアウトだと、OracleならDecode関数で、一発取得
可能となる。他の製品でも、これは、可能だろう。
ただし、単価の履歴は2世代しか管理できない。

要件にもよるだろうけど、この辺、みんなどうしてるのかな。
0109NAME IS NULL
垢版 |
04/02/13 22:16ID:???
>この場合、適用年月日の判断が入るため、SQL一発で単価を取得できない。

なんで?
0110NAME IS NULL
垢版 |
04/02/13 22:48ID:Y1CFmVqe
>>108
>厳密に正規化すれば、単価は、商品マスタとは別に、
>商品単価マスタ{商品コード、適用年月日、単価}を作ることになるけど、

 「単価」を繰返し項目ととらえないなら、正規化違反じゃないよ

 エンティティをリソースとイベントに分ける考え方からいうと、
全項目に日付を入れるとイベントに近くなってしまう

 ホストだと、過去データの洗い換えするためにそういう実装
することがあるけど、バッチ処理をなくす方向で考えた方が、
パソコン(鯖)向きだと思う
0111108
垢版 |
04/02/14 00:32ID:???
>>109
え、できるの?
できるなら、ぜひそのSQLを教えて欲しい。

>>110

>「単価」を繰返し項目ととらえないなら、正規化違反じゃないよ

漏れもそう考えてたんだけど、最近、佐藤正美氏の本を読んで(まだ理解が浅いけど)、
むしろ、商品単価エンティティはeventと考えるべきなのかなという気がしている。
「eventの定義は、「DATE」が帰属するentityである、とする。」だそうだ。
読み違いの可能性も強いが・・・・。

別にT字型ER手法をマンセーするつもりはないけど、佐藤氏の本は色々考えさせられる。
0112NAME IS NULL
垢版 |
04/02/14 09:17ID:CE18kft9
>111

:問い合わせ年月日 時点の単価を求めたい場合

select A.商品名, B.単価
from 商品マスタ A
join 商品単価マスタ B on ( B.商品コード = A.商品コード )
where A.商品コード = :問い合わせ商品コード
and B.適用年月日 <= :問い合わせ年月日
and not exists (
select * from 商品単価マスタ
where 商品コード = A.商品コード
and 適用年月日 <= :問い合わせ年月日
and 適用年月日 > B.適用年月日
)
0113108
垢版 |
04/02/14 16:02ID:po36sjDo
>>112
Thanks!!!

確かに、やってみると出来る!

でも、理屈が理解できん(泣
Exists、Not Existsを勉強し直そう。
0114108
垢版 |
04/02/14 16:51ID:po36sjDo
直積表を書いてみて、やっと理解できた。

きっと、知ってる人にとっては当たり前の手法なんだろうけど、凄いなあ。
こういう方法があるとは。
Not Exists内のSQLは、主キーのみ参照なので、アクセスも軽い。

重ね重ねThanks>>112
0115NAME IS NULL
垢版 |
04/02/15 00:59ID:EVaACx4p
>>111
>「eventの定義は、「DATE」が帰属するentityである、とする。」だそうだ。

 本では、従業員マスタの例があったと思うけどイベントだととらえる
のは「入社イベント」であってマスタじゃない

 佐藤さんの言うDATEを文字通りとらえると、全部のエンティティが
イベントになるよ。更新日付くらい全部に持つからね

 「適用日付」でなく「登録日」が重要な意味をもつならイベントだろう
けど、やはりこれはリソースととらえるべきだとおもわれ

 ただ、T字形でどうなるかはわからない。乞詳しい方
0117NAME IS NULL
垢版 |
04/02/15 22:58ID:fM+BL24T
>>112
スレ違いで申し訳ないです。
こっちのほうがシンプルでよさそうな気がするけど、、、ダメ?

select A.商品名, B.単価
from 商品マスタ A
join 商品単価マスタ B on ( B.商品コード = A.商品コード )
where A.商品コード = :問い合わせ商品コード
and B.適用年月日 <= :問い合わせ年月日
order by B.適用年月日 desc;

レコード数の抑制は
PostgreSQL、MySQL だと LIMIT句、SQL Server だと top が使える。
0119 
垢版 |
04/02/17 00:22ID:???
>>117
> >>112
> こっちのほうがシンプルでよさそうな気がするけど、、、ダメ?

 結果は同じだけど、order byを使うと普通コストが高い
10万件程度のデータを作ってテストすればわかる
(はず・・実装によって違うから)
0120NAME IS NULL
垢版 |
04/02/21 02:48ID:yCOAnZGt
 TH法ってのを聞いたのですが、
メリット・デメリットとかご存知ですか?

 マイナ〜な手法なんでしょうか
0121NAME IS NULL
垢版 |
04/02/21 19:49ID:???
TH法がマイナーっていわれると時代を感じるな
椿さんの本を買って読め
0122NAME IS NULL
垢版 |
04/02/22 13:50ID:/gnEdeW3
 amazonで調べると、椿正明って人ですか?

 過去の苦い経験からオーム社ってのが信用
出来ないのですが・・・書評も1件しかないって
のは終わってる本なんじゃないですか
0123 
垢版 |
04/02/26 02:00ID:???
 DOAを調べてると、なにげに面白そうな事をやってました
http://www.doaplus.com/

こういう学術的な(?)会と2chは無縁でしょうか
どなたか参加されてます?
0124
垢版 |
04/02/26 08:20ID:qvDCVOss
*現代の* DOA を学ぶのによい一冊を教えてください。
600ページくらいまで、洋書でもまったく構いません。

DOAのプロジェクトにアサインされるのですが、
自分がずっとやってきたオブジェクト指向の方法論と比べて
何が共通して何が異なるのか、一通り押さえておきたいのです。


自分はオブジェクト指向の信奉者で、
構造化設計やDOAはその過程として歴史程度でしか学んでいません。

オブジェクト指向設計で言うところのユースケース、ドメインモデルは、
DOAではどのフェーズで何として書くのかが特に知りたいところです。

0125124
垢版 |
04/02/26 08:21ID:qvDCVOss
【自分の考える対比】
・機能要求、非機能要求を項目として列挙する。
→ 要求定義だから変わらないと思う。

・業務フローを描く
→ 変わらない(自分はアクティビティ図で描いていた)

・ユースケース図を書く
→ コンテキスト図に相当?

・ユースケースのシナリオを書く
→ DFDのバブルの仕様として記述?

・ドメインモデルを抽出する
→ 新業務に対するER図に相当する?しかし振る舞いを描けない

・ドメインモデルの状態遷移を記述
→ 変わらない

● 特に分からない疑問
・ユースケースからDFDを導くのなら理解できるが、DFDからユースケースを導けるのか
 シナリオは、DFDのバブルに対する説明として記述する?
・ユースケースシナリオ(外部から見た、システムの振る舞い)は、どの時点で決めるのか
  DFDでは「システムがどう動くのか」は分かるかもしれないが、
  「ユーザーがどのようにシステムとコミュニケートするのか」は分からないと思う。
  

0126NAME IS NULL
垢版 |
04/02/27 00:37ID:Pd0YyzCW
DOAでUMLは重要ですか?またどの図を使いますか?
0127NAME IS NULL
垢版 |
04/02/27 22:42ID:jks+KnjA
>>124
>600ページくらいまで、洋書でもまったく構いません。

 DOAは日本の文化です。歴史と伝統が必要な技です。
米国人には無理です。

 DOAはビジネスを知らないと本当にはわかりません。

 生産管理に興味があれば
「生産管理・原価管理システムのためのデータモデリング」
が一押しです。どういうビジネス的要件からどういうモデリング
になるかが丁寧に解説されています。

 ただ、これには正規化の方法論が書かれていません。同じ著者の
「業務別データベース設計のためのデータモデリング入門」の
前半は実務で使うための初心者向け解説になっています。
たった3つのルールだけで、完璧な正規化(1〜5&BC)にする
秘伝も書かれています。たぶんこれは著者オリジナルでしょう。
0128NAME IS NULL
垢版 |
04/02/29 16:02ID:???
>>112
商品名の履歴が必要なシステムで、

:1年前の年月日 時点の商品名を求めたい場合

はどうしたらいいですか。結構複雑になりそうな気がしますけど。
0129 
垢版 |
04/03/04 00:46ID:???
>>128
 無視されてるのじゃなくて、答える必要を感じてないんですよ

 求めたい日付を「問合せ年月日」に入れるSQLですから、
求めたい日付がわかってるなら困ることないですね(*^ー゚)b
0130128
垢版 |
04/03/04 08:49ID:???
勘違いしてました。
全然問題ないですね、問い合わせ年月日が1年前でも。
失礼しますた。
0131 
垢版 |
04/03/04 21:25ID:???
>>130

 現実の業務だと、売上の「前年同曜日比較表」ってのがあったりします。
曜日によって売上が大きく違いますから「同日比較」だと意味ないのです

 こんなのは流石にSQLで書けないでしょう
0132(゜Jし゜)
垢版 |
04/03/04 23:28ID:???
昔、我が社で開発した前年度比計算プログラムでは、
うるう年のチェックをしてなかったので、先月末に大パニックになったらしい。
0133 
垢版 |
04/03/05 08:08ID:???
>>132

 Windows2000のSP2でも、ある操作をすると日付が2/30
になるっているバグがあった。それよりはましだろ

 2/29が日曜だったので大きな混乱がなくてよかった
0134NAME IS NULL
垢版 |
04/03/11 16:00ID:???
>>131
各年の基準日をテーブルに入れておけば
基準日からの日数を計算してSQLで処理できそうだけど
そんなに甘いもんじゃない?
0135NAME IS NULL
垢版 |
04/03/25 00:07ID:SVaksVzX
age
0136NAME IS NULL
垢版 |
04/05/23 22:43ID:???
ERすたでぃおのライセンス高すぎ
0137NAME IS NULL
垢版 |
04/06/29 00:24ID:4yFnbnwy
総勘定元帳のテーブル作ってみたら凄い横長になっちまったんですが、どうしたもんでしょう・・・

部門コード、勘定科目コード、繰越残高貸借区分、繰越残高、当年借方第1月金額〜当年借方第12月金額、
前年第1月実績金額〜前年第12月実績金額

・・・とまあ基本がこんなんで、これにさらに配賦と予算(当年・前年で各月ごと)を入れると
物凄い長さになるんですが、こういうものなんでしょうか?

やはりカラムに年や月を作ってレコード分けてしまうべきなんでしょうか?
どなたか有効な意見をいただけると幸いです
0138NAME IS NULL
垢版 |
04/06/29 07:07ID:???
>137
データの発生元が異なる物を同じテーブルに入れない方が良い.
0139137
垢版 |
04/06/29 20:40ID:???
すると例えば、こうでしょうか

部門、勘定科目、会計年度、繰越残高貸借区分、繰越残高、借方金額1〜12、貸方金額1〜12
0140NAME IS NULL
垢版 |
04/06/30 01:09ID:???
>139
借方金額、貸方金額は別テーブルから導出できない?
導出可能なデータはViewでもってもテーブルにもたない方が良い.
よほど速度を気にする場合は別だが.

総勘定元帳 ってのは 記録媒体 だよね?
記録媒体の項目を単純にテーブルにマッピングしてはだめだよ.
データ発生源が何かをちゃんと考慮してあげないとデータ再利用性が低下する.
0141137
垢版 |
04/06/30 03:14ID:???
うーん、そうすると仕訳の明細を持ってるテーブルから算出する形になるかな?
いちいち計算させるのはどうかと思ったのでテーブルに持たせた方がいいかなあと

まあ、元帳や試算表を出すのは月次と決算の時ぐらいだから個々の勘定を画面に出す時の
速度に問題がなければ、わざわざテーブルに持たせる必要はないんでしょうけど・・・
0142NAME IS NULL
垢版 |
04/06/30 06:21ID:???
>141
>> いちいち計算させるのはどうかと思ったのでテーブルに持たせた方がいいかなあ

正規形をくずすのは後で良いと思われ.
Viewとして計算させた値を保持させとけば良いのでは?
テーブルとして持たなくても良いとおもわれ.
できるだけデータはプリミティブに保持させておいた方が.

まずはデータをプリミティブに保持したテーブル群から作成したViewで 総勘定元帳View 作成しておく.
正規形くずしてもView定義が変更されるだけで、プログラムには影響ないようにするのが良いのでは.

0143NAME IS NULL
垢版 |
04/06/30 07:04ID:???
>141
あと個人的経験よりのアドバイス.
もしも元の考え通りに借方金額等を同じテーブルに入れるなら、別のプリミティブデータのテーブルからコピーする事になるだろう.
だが、ここでプルグラムを作成させるなよ.どうしてもやりたいならトリガでやれ.

とにかくやつらにプルグラムを作成させるな.

借方金額をいちいちプリミティブテーブルからView上で再計算させる速度なんてたいした事はない.
やつらの作成した 元帳View から帳表を出力するプルブラムの方がよっぽど遅い.

0144137
垢版 |
04/07/01 21:55ID:???
>>142-143
ありがとうございます
大変、参考になりました

また、意見がほしくなったらココ来ますね
0145NAME IS NULL
垢版 |
04/07/04 01:59ID:SPlLydxx
クラスタ表って、どのくらい使われてるのだろう。
とりあえず、俺が設計するなら一生使いたくないのだが。

クラスタキーの利用頻度、メリット・デメリットを知りたい
0146NAME IS NULL
垢版 |
04/07/08 22:31ID:???
T字型ERってどうですか?
0147NAME IS NULL
垢版 |
04/07/08 23:59ID:???
>145
>> 俺が設計するなら一生使いたくないのだが。
なぜ?

クラスタ化は検索中心の複数テーブルをJOINする場合に速度上の利点がある.
わたしの場合は第4正規化あたりまでする(正確には最初から第4正規化されてい
る状態で設計する)ので、更新は早いが検索が遅くなる傾向にある.
その場合にクラスタ化する.

>146
使い用.
0148NAME IS NULL
垢版 |
04/07/09 00:09ID:???
途中で送信してしまった.

>146
T字形だよ.良くまちがえられるけど.
DBの知識にしたがった方式.
知っているのと知らないでは格段に違うのは確かだけど、そのまま信じきるのもどうかと思う.
DATARUNと併せて知っておいた方がいい方法論.
最近はアジャイルデータベースとかオブジェクト指向方面からの方法論もいろいろあるようだ.


0149NAME IS NULL
垢版 |
04/07/23 10:53ID:???
>>146

      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前のER図じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  「ラピュタ」の中にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ    
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
0151NAME IS NULL
垢版 |
04/09/20 19:27:25ID:6Fl/7m0x
visio2003なんですが、データベースのER図で
ただの矢印でなくリレーションの種類によって
蛸足とか丸印とか付いてるのを見かけます。
あれはどうやったら出せるのでしょうか?
0152NAME IS NULL
垢版 |
04/09/22 12:16:06ID:???
2000しか知らないけど、線のプロパティで始点と終点の形状を弄れば出てくるぞ。
0153NAME IS NULL
垢版 |
04/09/24 16:52:16ID:AXzql5sY
たとえば顧客マスタで、顧客には最大5人まで担当者がいる場合に、

顧客コード・顧客名・担当1・担当2・・・担当5
とするか、

顧客コード・顧客名
担当コード・顧客コード・担当
というふうに2テーブルに分けるか、どうしたものだろう。

担当者の最大値が決まっている場合には繰り返し項目にならないと
思うので(違ってたら指摘して!)、正規化違反にはならないと
思うのだが、作ろうとしてるテーブルの列数が40位になりそう
なので、分けたほうがいいのかしらんと迷ってます。
0154NAME IS NULL
垢版 |
04/09/24 17:40:43ID:???
迷うならとりあえず正規化しとけ。
プログラミング局面では、最大値が決まっていようがいまいが正規化されてるほうが楽な事が多いよ。
担当者が3人以上いる顧客を抽出・・・ってな要件が出たとき、横に長いテーブルだとマンドクサ
あくまで例えだけど。
0156NAME IS NULL
垢版 |
04/09/25 01:29:10ID:axxmUZh0
>>154
でも担当者を横一列に並べようとする時に
正規化するとめんどくさいですね。

明細がぶらさがるとかじゃなくて
5人って決まってる場合は
そういう出力の仕方の方が多くないかな。

でも>>154の要件もあるかも知れないし
出力する局面でどっちにするか判断するって
ところじゃないでしょか。
0157NAME IS NULL
垢版 |
04/09/26 00:57:28ID:???
>>156
出力する局面で正規化するしないを判断するなんて論外。

・担当者別顧客リストなんて間違いなく要件の中にあるはずだが、どうやって実現する?
・とある担当が辞めた場合どうする?
 全ての顧客マスタの担当項目1-5を検索して、該当する顧客レコードを更新。
 更新箇所以降の担当項目の前詰め処理。
 ↑5人横に並べるのとどっちが面倒くさいよ?

素直に正規化しておくべき。

>>154
> 最大値が決まっている場合には繰り返し項目にならない

そんなことはない。
「最大値が100だから繰り返し項目じゃないです。」
って言われても納得できないだろ?
0158156
垢版 |
04/09/26 10:22:16ID:Etehnh4k
レスくれた人さんきゅ。
繰り返し項目の正しい定義ってなんだろうね。
俺っちは、最大値が決まってる場合、担当1・担当2・・・というふうに
2次元の表にできるから、繰り返し項目にはならないのかと思ってた。

0159156
垢版 |
04/09/27 10:26:37ID:p0HsFnJ6
>>157
うーんそうか、流石に5人ともなると前詰とか考えなきゃいかんわけか。
実は俺がやったシステムは担当者は2名だったんで
正規化してませんでした(設計は別の人)。

2名だと正・副のニュアンスもあるからあえて正規化しなかったって
話かも知れなかったですね。うーん。
0160NAME IS NULL
垢版 |
04/10/08 07:13:32ID:???
担当1・担当2のようになるなら繰り返し。
最大値が決まってるというのは幻想で、実は今だけってのが現実
0161NAME IS NULL
垢版 |
04/10/08 07:15:55ID:???
最大値を制限するのはプログラム側でなくDBのトリガや制約等の機能を利用し
て制限するのが普通
0162NAME IS NULL
垢版 |
04/10/08 07:16:48ID:???
とにかくやつらにプログラムさせるな、が基本
0163NAME IS NULL
垢版 |
04/10/08 07:52:30ID:???
>>161
ユーザーにやさしくエラーを返してあげるためにプログラム側での工夫も必要?
0165NAME IS NULL
垢版 |
04/10/09 01:08:08ID:???
>163
制約エラーが発生すればエラーメッセージを出すようにはプログラムする
普通のエラー処理のある言語なら問題なく可能
制約でのエラーの方がプログラムをほぼしなくて済むので良い

とにかくやつらと、そしてわたしにプログラムさせるな、が基本である事にかわりない
プログラムは組めば組むほどバグが増加する物、それはだれが作成してもだ
0166NAME IS NULL
垢版 |
04/10/09 14:07:44ID:WoYiUuS/
>>165
C/Sの業務アプリなんかだとそう理想どおりいかないんですわ。

例えば、必須項目の入力チェックをする時に、
エラー表示を閉じたら自動的に
未入力の入力欄にフォーカスを移動して欲しいって
要望があった場合、アプリ側でチェックせんといけない、
NOT NULL制約のエラーだけに頼れないんですよ。

とはいえ、制約はそれをみればドキュメントが貧弱だったとしても
設計した人の意図が浮き上がりやすいので捨てがたい。

で、制約・アプリ両方盛り込むと二重管理になる。
どうしたもんかなあ、ってところで上のスレは止まってる。
0167NAME IS NULL
垢版 |
04/10/09 16:04:43ID:???
アプリ側でのバリデーションなんてWebだろうが業務アプリだろうが当然すると思うけど
DB側の制約(CHECKとかNOT NULLとか)は制約内容とDB設計者の好みに寄る希ガス

漏れはビジネスルール的なものであればアプリ側でかけさせて
それ以外はなるべくDB側でかけさせるようにしてるかなあ
まあ、NOT NULLなんかは二重管理になりがちだけど
0168NAME IS NULL
垢版 |
04/10/09 16:12:21ID:???
ユーザーに返すエラーメッセージを「不正な処理を行ったため停止します」に統一
すればいいんじゃない?
0169NAME IS NULL
垢版 |
04/10/10 13:02:37ID:???
>>166
DBMSの制約情報を動的に読みとってアプリ側でチェックするような仕掛けを
作ればいいのでは?
結局は二重だけどDBMS側をいじればアプリ側も追従してくるようにすれば
目的は達成できる気がする。
0170NAME IS NULL
垢版 |
04/10/10 14:11:41ID:???
それやるとアプリのDBMS依存性が高くなる
 ↓
ライブラリ/ミドルウェア層にまとめちゃおう
 ↓
だったらDBMSの制約情報読み取るよりも、最初からこっちで
管理した方が融通が利いて良いよな

SAPとかそんな感じだよね
0171165
垢版 |
04/10/10 19:39:45ID:???
>166 >169
わたしの所はあるアプリでDB定義を書くのだが、そこからSQLと
Valid用XMLが自動生成されるようになっている







0172NAME IS NULL
垢版 |
04/10/17 20:38:10ID:gvma0fXW
DB設計ビギナーです。
相談に乗ってください。

たとえば次のようなテーブル群があるとします。
部署(部署ID, 部署名)
社員(社員ID, 社員名)
所属履歴(所属履歴ID, 部署ID, 社員ID, 所属開始年月日, 所属終了年月日)

社員は時を経るにつれて所属が変わるのですが、
これは所属履歴レコードを1件追加することで示します。

ここで、経年するごとに次のような変化がおきます。
・部署名が変わる
・部署が統廃合される
・部署が分裂する

このとき、ある社員の部署所属履歴をうまく保持するにはどうすればいいでしょうか。

思いつく案は次のとおりです。
(1) 部署と部署情報履歴に分ける
部署(部署ID)
部署情報履歴(部署ID, 開始日, 終了日, 部署名)
(2) 所属履歴レコードを作成する時点で、部署テーブルの情報をコピーする
所属履歴(所属履歴ID, 部署ID, 部署名, 社員ID, 所属開始年月日, 所属終了年月日)

どうするのが一般的なんでしょうか。
またどうするのが楽なんでしょうか。
0173NAME IS NULL
垢版 |
04/10/18 01:10:05ID:???
合併した部署は、新しいIDを振ればいいのでは?
0174NAME IS NULL
垢版 |
04/10/18 09:55:59ID:???
>>172
一般的な方法として、やるとしたら(2)だけど、本当にそこまでする必要が
あるのかどうかって所が一番大事だと思われ
0175NAME IS NULL
垢版 |
04/10/18 16:18:02ID:???
先生
名前・メールアドレス・パスワード・他色々

生徒
名前・メールアドレス・パスワード・担当先生・他色々(先生と全く同じパラメータ)

という構成の場合どういう設計にすべきですか?

(1)
先生
先生id(主キー),名前,メールアドレス・パスワード,他色々

生徒
生徒id(主キー),名前,メールアドレス・パスワード,先生id(外部キー:先生->先生id),他色々

(2)

人id(主キー),名前,メールアドレス・パスワード,他色々

先生
先生id(主キー),人id(外部キー:人->人id)

生徒
生徒id(主キー),人id(外部キー:人->人id),先生id(外部キー:先生->先生id)

(3)

人id(主キー),名前,メールアドレス・パスワード,他色々

先生
人id(主キーかつ外部キー:人->人id)

生徒
人id(主キーかつ外部キー:人->人id),先生id(外部キー:先生->先生id)

(4)その他
0176NAME IS NULL
垢版 |
04/10/18 16:19:18ID:???
(3)間違えたので修正

人id(主キー),名前,メールアドレス・パスワード,他色々

先生
人id(主キーかつ外部キー:人->人id)

生徒
人id(主キーかつ外部キー:人->人id),先生id(外部キー:先生->人id)
0177175
垢版 |
04/10/18 16:19:55ID:???
すいませんがageさせて頂きます。
0181NAME IS NULL
垢版 |
04/10/19 06:30:22ID:???
>172
所属履歴IDって必要か?
まあそれは良いとして、部署の統廃合を管理するだけなら部署expire期間を入れるのはどうか
実質173と同じ意見だけどIDは同じにできる
# 良いかどうかは別
0182NAME IS NULL
垢版 |
04/10/19 08:44:54ID:???
>>175
要件次第でどれが適切かは変わってくると思われ。

生徒でも先生でもない人をシステム上扱う必要があるのなら、人テーブルを
分けた方がいいかもしれない。その必要がないのなら(1)で十分だと思うよ。
0183NAME IS NULL
垢版 |
04/10/25 23:05:28ID:0Gqq1XjY
すいません、ありきたりな質問なのですが、
データモデリングって何ですか?

データベースのテーブルのカラムを考える人?
0184NAME IS NULL
垢版 |
04/10/26 00:49:47ID:???
>>183
データベースのテーブルとカラムを考える事。

渡辺幸三先生の本を読んでみましょう。
0185NAME IS NULL
垢版 |
04/10/26 01:10:00ID:???
まあアレだ。
顧客の業務を視姦して丸裸にしてヌードデッサンする行為の事。
0186NAME IS NULL
垢版 |
04/10/26 01:25:51ID:???
おっ、かっこいいな。悪魔の辞典みたいだな。
0188NAME IS NULL
垢版 |
04/10/26 17:08:53ID:???
なんだここは上手い事いうスレなのか。
0189NAME IS NULL
垢版 |
04/10/27 00:51:41ID:???
ヌードだからといって素直に喜べない。
異様にデブだったり極端にガリガリだったり、それ以前に
奇形なモデルだったりする事がおおいからなw
0190NAME IS NULL
垢版 |
04/10/27 15:12:50ID:???
きょうせらは人間じゃなくて単細胞生物らしいし。
0191NAME IS NULL
垢版 |
04/11/18 19:46:59ID:oOnWd0J7
ERWinのトライアル版の制約事項ってありますか?
作成出来るエンティティ数とか?
0192NAME IS NULL
垢版 |
04/12/15 10:40:56ID:???
Accessで、部品表の展開と集計をむりやりっぽくやってるんですが、
なにかうまい方法ないでしょうか・・・ ○| ̄|_

【 QRY_INV_IO_CALC_OUTPUT_1 】
SELECT
    [QRY_INV_IO_CALC_SOURCE]![ID] AS parentID,
    1 AS STRUCTURE_LEVEL,
    [品目-品目_再帰].標準部品コード2 AS PID,
    … AS ID,
    … AS eventDATE,
    … AS QUANTITY,
    …
    (Count([品目-品目_再帰_1]!標準部品コード1)>0) AS RESOLVABLE
FROM
    (
        (QRY_INV_IO_CALC_SOURCE
         RIGHT JOIN
         [品目-品目_再帰]
         ON
         QRY_INV_IO_CALC_SOURCE.PID = [品目-品目_再帰].標準部品コード1
        )
     LEFT JOIN
     部品 ON [品目-品目_再帰].標準部品コード2 = 部品.部品コード
    )
    LEFT JOIN
    [品目-品目_再帰] AS [品目-品目_再帰_1]
    ON
    [品目-品目_再帰].標準部品コード2 = [品目-品目_再帰_1].標準部品コード1
GROUP BY …;
0193NAME IS NULL
垢版 |
04/12/15 10:41:12ID:???
QRY_UNION_INV_IO 】
SELECT ID,…,eventID,eventDATE,QUANTITY,NOTE,0 AS STRUCTURE_LEVEL,RESOLVABLE
FROM QRY_INV_IO_CALC_SOURCE
UNION
SELECT ID,…,eventID,eventDATE,QUANTITY,NOTE,STRUCTURE_LEVEL,RESOLVABLE
FROM QRY_INV_IO_CALC_OUTPUT_1
WHERE RESOLVABLE=FALSE
UNION
SELECT ID,…,eventID,eventDATE,QUANTITY,NOTE,STRUCTURE_LEVEL,RESOLVABLE
FROM QRY_INV_IO_CALC_OUTPUT_2
WHERE RESOLVABLE=FALSE
UNION
・・・
UNION
SELECT ID,…,eventID,eventDATE,QUANTITY,NOTE,STRUCTURE_LEVEL,RESOLVABLE
FROM QRY_INV_IO_CALC_OUTPUT_5;

【 在庫の変遷を日ごとに集計 】
SELECT
    QRY_UNION_INV_IO.ID,
    QRY_UNION_INV_IO.inputDATE,
    QRY_UNION_INV_IO.PID,
    …
    QRY_UNION_INV_IO.eventDATE,
    QRY_UNION_INV_IO.QUANTITY,
    DSum("[QUANTITY]",
       "TBL_TEMP_UNION_INV_IO",
       "([PID] = " &
           [PID] &
        ") AND ([eventDATE] <= #" &
           Format([eventDATE],"yyyy/mm/dd") & "#)"
      ) AS STOCK,
FROM (QRY_UNION_INV_IO INNER JOIN 部品 ON QRY_UNION_INV_IO.PID = 部品.標準商品コード)
   INNER JOIN
   TBL_EVENT_INV ON QRY_UNION_INV_IO.eventID = TBL_EVENT_INV.ID
0194NAME IS NULL
垢版 |
04/12/25 22:54:27ID:ZtSP5EZK
もう解決したのかな?
いいクリスマスを迎えることができてるといいのだが。

さて・・・どう「うまく」やりたいんだろ?

パフォーマンスの改善?
今後に備えて、データモデル(テーブルの実装も含め)を見直したい?
それとも?

そもそも、
・データモデル自体を見直したいなら、SQL書かれても困る
・SQLを評価して欲しいなら、テーブル定義くらい無いと、マンドクセェ
・データの件数によっても、モデルは変える事がある
んだ。ヨロシコ。
0195NAME IS NULL
垢版 |
04/12/27 18:29:20ID:???
レスありがとうございます。
(レスを頂けた事に、正直驚いています)

テーブル定義のフォーマルな表記方法はわからないのですが、
部品とその構成情報は、
                              
 ┏━━━━━┓  ┏━━━━━━━━┓          
 ┃部品     ┃  ┃品目- 品目_ 再帰 ┃   ┏━━━━━┓ 
 ┃----------┃  ┃----------------┃   ┃部品_1   ┃ 
 ┃部品コード ┠─┨親部品コード    ┃  ┃----------┃ 
 ┃…      ┃  ┃子部品コード    ┠─┨部品コード ┃ 
 ┗━━━━━┛  ┃員数         ┃  ┃…      ┃ 
             ┗━━━━━━━━┛  ┗━━━━━┛ 
                              
のようなリレーションシップになっており、[部品]=[部品_1]です。
部品の構成に中間品が沢山あり、中間品在庫が沢山あります。

やりたいことは、
未来のある時点での在庫の推移・過不足を見ることです。

そのための方法として、
全在庫を最下位まで部品展開したうえで、
部品ごと・出入庫日ごとに、それまでの出入庫を全集計し、

 部品名   受払い日  受払い    在庫数
--------------------------------------------------
 パーツA  01/15   入庫  +350  2350
 パーツA  01/23   出庫  -900  1450
 パーツA  02/06   入庫  +210  1660
 パーツA  02/11   出庫  -870   790
 パーツA  02/19   出庫 -1390  -600  欠品発生!

のような結果を出したいと考えています。
(その方法がどこか間違っているような気もしていますが)

仕入れによる入庫や、リペアパーツの出庫などを、
過去・予定あわせて、
┏━━━━━━┓
┃在庫受払い  ┃
┃------------┃
┃ID        ┃
┃部品コード  ┃
┃受払い日時  ┃
┃受払い数   ┃
┗━━━━━━┛
に記録しました。

また、別管理の以下の表、
┏━━━━━━┓
┃出荷予定表  ┃
┃------------┃
┃ID        ┃
┃機種コード   ┃
┃出荷予定日時┃
┃出荷数     ┃
┗━━━━━━┛
( 別の担当者がEXCELで管理 )
を、アクセスクエリを数段かませ、
列が在庫受払いと同じになるように変換しました。
0196NAME IS NULL
垢版 |
04/12/27 18:29:42ID:???
在庫受払いと変換済み出荷予定表を、
ユニオンクエリで結合しました。
これにさらに、
子部品があるかどうかの判定列 RESOLVABLE を
加えたものが、QRY_INV_IO_CALC_SOURCE です。

(1)
QRY_INV_IO_CALC_SOURCE を、
子部品持ちが無くなるまで展開したい。
現状のSQL文(QRY_UNION_INV_IO)だと、
もちろん5段階までしか展開できていません。。

(2)
各部品ごと、出入庫がある時点ごとに集計したい。
現状のSQL文だと、定義域集計関数DSumを使用しているので、
途中経過を一時テーブルに書き出してもいますが、
恐ろしく処理に時間がかかります。

(3)
出荷予定表で、
出荷後一定期間を過ぎたレコードは別表に移動されてしまうため、
矛盾が出てしまう。

(3)
以上の手段自体に間違いがあるような気がする。


データの件数自体は、
まだ自分の担当の範囲内でやっているだけというのもあり、
いまのところ、

部品:約1400件
品目-品目_再帰:約1300件
在庫受払い:100件強(はじめたばかり)
出荷予定表:約800件

です。
0197NAME IS NULL
垢版 |
04/12/27 18:45:20ID:???
ちなみに、出荷予定表からの製品出荷ですが、
製造にかかる日数をうまく格納・計算する方法が思いつかないので、
とりあえす展開1階層ごとに長めの標準日数を設定し、
部品展開時に、出荷予定日から遡った日に部品が出庫(消費)する、
というふうになるよう、受払い日時を設定しました。
0198NAME IS NULL
垢版 |
04/12/27 19:19:44ID:???
すみません、
出荷予定表:100件強
(済のものを含めると7〜800件)
でした。
0199NAME IS NULL
垢版 |
05/01/14 00:57:27ID:???
>>195-198
これは SQL99の「再帰的SQL」を使う以外にないだろう.
http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1b.html

つまり,現行のほとんどの DBMS では,手続き型の言語で書いた再帰構造に
短い SQL を大量に埋め込むしか方法がないと思われる.

それにしても,なぜ今まで,SQL に再帰が導入されなかったのだろうか.
SQL とおなじ宣言型言語である Prolog では,再帰は不可欠なのに.
0201NAME IS NULL
垢版 |
05/01/18 01:25:16ID:dY4jJ9fs
>>195-198

 渡辺幸三さんの生産管理のモデリングの本を読んでください。
 LLC(ローレベルコード)について詳しく書いてあります。
 私の知っている限り生産管理のモデリングの最良の本です。

 在庫推移のモデルに関しても詳しく書いてあります

 いいところまで行ってるので頑張って
0202東浩紀
垢版 |
05/01/18 18:39:56ID:O7G91VlX
大きな物語が失墜し、人々はデータベース(大きな非物語)を消費するようになった
つまり人は物語に感動してるのではなくデータベースから抽出された物に反応しているにすぎない
つまり世界はこういう仕組みになってる
0203NAME IS NULL
垢版 |
05/01/18 19:50:06ID:???
>>201
アドバイスありがとうございます。
実は、その本はたびたび読み返して手本にしています。
モデリング自体も問題大有りですが、
再帰SQLの代わりになるコーディングが思いつかない段階です。
0204NAME IS NULL
垢版 |
05/01/20 03:13:45ID:TW1nlZVf
>>203

 なぜスクリプトで組まないの?
0205NAME IS NULL
垢版 |
05/01/20 22:59:44ID:TW1nlZVf
>>203

 孤軍奮闘しているようですね。渡辺さんの本の愛読者だと
いうことで、アドバイスしましょう。VBAが使えないときついかも

 LLCを良く理解されていないようです。こういう自体を避ける
魔法のコードです。ステップを以下のように3つに分けて、それ
ぞれの中で細かい処理を悩めば道は開けると思います。

 ★問題が解けそうにない時は小問題に分割するのが定石です

 以下簡単にモデルを提示してみます
0206NAME IS NULL
垢版 |
05/01/20 23:01:36ID:TW1nlZVf
【簡易MRP(在庫推移のみを一括計算するシステム)】

モデル:
[部品] {部品C}、品名、現在庫数、製造LT、LLC
[部品構成] {親部品C、子部品C}、員数
[日次受払] {部品C、日付}、入庫数、製造数、出庫数、在庫数

計算手順:
(1)[日次受払]の内容をクリアしたうえ、いろいろなテーブルに
 散らばっている現在の入出庫予定(出荷予定、製造予定、
 入荷予定)を[日次受払]に集計する
(2)LLCの小さい部品順に、[日次受払]の製造数を[部品構成]
 を使って(製造LTで日付をずらしながら)シングルレベル展
 開して、下位部品の出庫数として[日次受払]に反映させる
(3)部品毎に、[部品]の現在庫を起点として[日次受払]の日付
 順に入出庫数を加減計算しながら在庫数を更新する
(4)最初の欠品日が早い品目順に対策を検討する

欠点:
このバッチ処理を走らせないと最新の状況に応じた在庫
推移がわからない。状況にリアルタイムに反応する「在庫
推移監視方式」が渡辺本(生産管理・原価管理システムの
ためのデータモデリング)で紹介されているので、参考に
してください
0207NAME IS NULL
垢版 |
05/01/21 15:25:20ID:???
>>205
>>206
ありがとうございます!!
LLCの小さい順に展開することで、階層を最後まで展開しきることが出来るというわけですか!
目からうろこが落ちた思いです。
これから渡辺さんの本を再び読み返して理解していきたいと思います。
0208NAME IS NULL
垢版 |
05/01/22 01:08:18ID://zf7D53
>>207

 お役に立ててよかったです。渡辺本の3冊の中で私は
生産管理が最高だと思ってます。この他にもノウハウが
惜しげもなく載っていて驚くほどです。
 ※ところが一番売れてないと噂で聞きました

 確かに難しいですが、あれだけSQLを書けるのですから
必ず理解出来ます。頑張ってください。

 基本的な方針をお教えしただけですので、まだまだ
悩まれるところは豊富でしょうが、悩み甲斐ありますよ

 もしこれで利益を得る事が出来れば、コンサルフィーと
していくらでも結構ですからスマトラ募金して下さいね
0209NAME IS NULL
垢版 |
05/01/23 20:56:09ID:+1Ab9Bdi
2項モデルに拘ってる方っていらっしゃいますか。

0210NAME IS NULL
垢版 |
05/01/27 09:36:44ID:Z5JcZ2YJ
運送料と手数料を請求するとする。
この場合、運送料と手数料はテーブルを分けるべきか分けざるべきか。
どうですか皆さん?

(分ける場合)
[請求] 請求ID・顧客ID・金額
[運送料]請求ID
[手数料]請求ID

(分けない場合)
[請求] 請求ID・顧客ID・金額・区分コード
0211NAME IS NULL
垢版 |
05/01/27 12:29:02ID:Ff4IZNHF
[請求書] 請求ID・請求書ID
[請求顧客] 請求ID・顧客ID
[請求金額] 請求ID・金額
[運送料] 請求ID
[手数料] 請求ID
ならあるかな。
0212NAME IS NULL
垢版 |
05/01/27 13:17:27ID:???
>>210
請求IDと運送料、手数料はそれぞれ一対一の関係なんでしょ?

だったら
[請求] 請求ID・顧客ID・金額・運送料・手数料
でいいんじゃない?
0213NAME IS NULL
垢版 |
05/01/27 13:22:42ID:Ff4IZNHF
>211 は顧客IDから請求書を出す時苦労するな。自分で書いたのだが。
もっともPrologで書くと、
請求書(_顧客ID,_請求書ID)
 :-
  請求書(_請求ID,_請求書ID),
  請求顧客(_請求ID,_顧客ID),
  (  運送料(_請求ID),
    請求金額(_請求書ID,_金額),
    write_formatted('運送料 %t\n',[_金額]);
    手数料(_請求ID),
    請求金額(_請求ID,_金額),
    write_formatted('手数料 %t\n',[_金額])
  ),
  fail;
  true.
でどうってことないが。
0214NAME IS NULL
垢版 |
05/01/27 13:39:52ID:Ff4IZNHF
大変だ。上のプログラムは最初のSubGoalでループして終了しない。
請求書発行(_顧客ID,_請求書ID)
 :-
  請求書(_顧客ID,_請求書ID),
 <<以下略>>
にしないとね。
0215210
垢版 |
05/01/27 14:41:00ID:???
すみません、請求における運送料と手数料は排他です。
請求が10件あったとして、運送料の請求が5件で手数料の
請求が5件かもしれないし、運送料の請求が10件で手数料の
請求が0件かもしれないといった感じです。
0216NAME IS NULL
垢版 |
05/01/27 15:02:24ID:???
>>215
[請求] 請求ID・顧客ID・金額・運送料・手数料・合計金額
運送料・手数料どちらかをゼロにしとけばいいんじゃない。
0217NAME IS NULL
垢版 |
05/01/27 18:01:12ID:Ff4IZNHF
<分けた場合>は209にでてくるバイナリーモデル的なものになるが、
IDが必須でうるさくなる。ただ、Prologとの相性はいいなあ。
うんと小さな規模のデータベースではデータの結びつきについて
敏感になれて面白いかもしれない。
<分けない場合>はRDBそのものだが、行の中の列の結びつきが「以前的」で
ちょっと強すぎる。なんらかの「契機」によって結びついていると考えられるが、
やはり、神様がいる感じ。
0218NAME IS NULL
垢版 |
05/01/28 00:09:12ID:GLvUf9Af
>>217
 prologなんてまだ生きてたのか。うざいね

> やはり、神様がいる感じ

 電波受けてる?
0219NAME IS NULL
垢版 |
05/01/28 03:58:05ID:???
[発注見出]と[発注明細]があって、それに対応する[支払予定]があります。
[支払予定]は、見出単位で決定する場合と、明細単位で決定する場合の
2通りあるんですが、この場合のテーブル設計はどうすればよいだろう?

[発注見出] 発注NO、支払予定NO
[発注明細] 発注NO、行番、支払予定NO
[支払予定] 支払予定NO

こんな感じでいんだろうか?
なんかすっきりしないんだけど・・・・・・もう、まる一日以上なやんでます .... orz
0220NAME IS NULL
垢版 |
05/01/28 07:49:44ID:???
>>219
発注と支払いの間に、債務とかなんかのテーブルを一つはさんだらどうかな?
0221NAME IS NULL
垢版 |
05/01/28 09:13:10ID:???
>>219
[発注見出].支払予定NO≠[発注明細].支払予定NOの場合があるから、
[発注見出] は発注NOだけでいいんじゃない。
0222NAME IS NULL
垢版 |
05/01/28 13:18:05ID:???
>>220
債務を挟むって具体的にどんな感じになるんでしょう?

>>221
これも考えたんですが、結局はプログラム側でちゃんと整合
取れるように制御しなきゃだめですよね〜。

0223NAME IS NULL
垢版 |
05/01/28 18:13:41ID:???
[仕入見出し]+---≡[仕入明細]

[発注見出し]+---≡[発注明細]+---≡[入荷明細]

[入荷見出し]+---…[入荷明細]+---…[仕入明細]


[支払見出し]+---≡[支払明細]+--・+[仕入明細] (ここ自信無し)


明細単位で決定する場合、支払に明細行が1行、
見出し単位で決定する場合、支払に発注と同じ複数の行、
でいいのかな…?

勘定とかも絡んできそうな気がしてますます複雑に… ○| ̄|_
0224NAME IS NULL
垢版 |
05/01/29 03:03:56ID:iJcNI0vI
>>219

 業務モデルによるでしょう。[支払予定]が何をしたいのか、
支払予定NOがどのタイミングで発生するかなどを示さないと
勝手に解釈したレスになりますよ。

 一番汎用的なのはこんな感じかな

[発注見出]     {発注NO}、取引先CD、発注日、納品希望日
[発注明細]     {発注NO、行番}、品番、単価、数量
[支払発注対照表] {支払予定NO、(,発注NO)}
[支払予定]     {支払予定NO}、支払い予定日、取引先CD

 発注先のCDと支払先のCDが違うことは良くあるので[支払予定] 
にも取引先CDを入れました。もし単に締日単位に1つの番号を振る
のならこれは不要

 ただ、実務で使うなら納品(検品)のデータと関連させないと
納品されていないものまで支払う可能性があります。
-------------------
 渡辺幸三さんの「業務別データベース設計のためのデータ
モデリング入門」の購買管理にはもっと実用的なモデルが示
されていたと思います(今手元にないので曖昧です)
0225NAME IS NULL
垢版 |
05/02/01 11:58:45ID:???
>>ときどき Prolog の話を書いてる人

これからもちょくちょくご登場キボンヌ.

俺はへぼい Lisper(Schemer) で,最近データモデリングを
かじり始めたのだけど,どうにもDB の世界は,閉鎖的で
息苦しくてかなわん.他のプログラミング言語との比較という
視点が全く欠けていると思う.

SQL は Prolog の親戚みたいなものなんだから,並べて
語れば,視野がぐっと広がると思うんである.
0227NAME IS NULL
垢版 |
05/02/03 01:17:55ID:???
>>226
本当に凄いフリーソフトですね。open sourceにして英訳すれば世界中の人が使いそう。
0228NAME IS NULL
垢版 |
05/02/03 02:51:03ID:???
これで渡辺上流工程本にあった感じのフォーマットで
ドキュメントまでそのまんま落ちたら最高なんだけど
それは望みすぎだわなー、すばらしいですよこれわ。
0229NAME IS NULL
垢版 |
05/02/03 20:15:41ID:???
>>104
DBDesigner 4はC:\Program Files\fabFORCE\Data下の
DBDesigner4_Translations.txtとDBDesigner4_Translations.iniを訳せば日本語化
できそうな希ガス。

開発元(GNU GPL)
ttp://www.fabforce.net/dbdesigner4/
DBDesginer4マニュアル(日本語)
ttp://www.aglabo.com/agl/proevo/fabforce/
0230NAME IS NULL
垢版 |
05/02/03 20:34:28ID:???
T字形ER手法の特徴の「ネスト化された条件分岐やNull値の判断を
プログラム・ロジックから排除する」とは、たとえばどういう事ですか?
ttp://www.doaplus.com/html/doc/bun01_20041206.pdf
0231NAME IS NULL
垢版 |
05/02/04 00:35:00ID:EU+jfE/i
>>230
 そのままの意味

 T字形を使うと「4,800ステップのプログラムが(「nested-IF」のない)800ステップに軽減された」
って実績もある。マスコミには出ない魔法の手法。
ttp://www.sdi-net.co.jp/ter-home.htm
0233NAME IS NULL
垢版 |
05/02/04 16:56:20ID:???
>>231
なんか表現がいちいちドラスティックだなあ。

そのサイトの段位表にでてくる
● 従業員のデータのなかに、部門コードが定義されていても疑問に感じない。
● 「データの一意性」を保証するために、複合キーを使ってデータ設計をする。
これが全然ピンと来ない。
特に前者、T字形ではどういう風に表現するんだろう?
0234NAME IS NULL
垢版 |
05/02/04 19:45:38ID:???
[部門]+───≡[部門-従業員_対応表(日時を入れて「配属」)]≡───+[従業員]
のようなことが書いてあったような気がします。
0235NAME IS NULL
垢版 |
05/02/05 01:48:17ID:Kdyo+DVN
>>233
 T字形を単なるデータモデリング手法だと思うと
火傷をします。これは哲学です。

 ビジネスを定義するにあたって
1.企業として共通の認識にあるものは何か?
 →番号がついているもの=識別子
  (それがユニークかは関係ない=>複合キー)

2.イベントとリソースの峻別
 →イベントとは企業活動の中で日付があるもの

3.エンティティ間の関係(4つのルール)

4.エンティティの属性(項目)としてホノニム(同音多義)や
 シノニム(異音同義)、nullになる可能性があるかを考え、
 データ分析する
 →サブセット(クラス概念は否定)

 この4を真剣に考えると、従業員のデータとして例えば
社長なら部門はnullになるし兼務者が定義できない事に
気付くはず

 ここまで分析してはじめて業務分析ができ、しかも
プログラムからロジックが消える(らしい)
0236NAME IS NULL
垢版 |
05/02/07 18:37:02ID:???
XEADはJava1.4.2が要るみたいですね…
0237NAME IS NULL
垢版 |
05/02/07 22:26:05ID:UdrSQ9Qj
>>236
1.4.1_03でも漏れは動いたよ
まあ全部の機能を試したわけじゃないが
0240NAME IS NULL
垢版 |
05/03/01 17:08:53ID:???
ある機械が、機種ごとに仕様の項目数が違うとして、
これらをサブタイプとして登録したとき、実装上はどう処理するのでしょうか?

たとえば、ある複数機種の機械の納品リストを考えます。

機種A
 ノズル1からジュースが出せます。 原液タンクには4/10gタンクが使えますがボトルは使えません。
 ノズル2からジュースが出せます。 原液タンクには1.8/4gボトルが使えますがタンクは使えません。
 ノズル3からは水だけが出せます

機種B
 ノズル1からジュースが出せます。 原液タンクには4/10gタンクが使えますがボトルは使えません。
 ノズル2からジュースが出せます。 原液タンクには4/10gタンクが使えますがボトルは使えません。
 ノズル3からジュースが出せます。 原液タンクには1.8/4gボトルが使えますがタンクは使えません。
 ノズル4からは水だけが出せます
オプションとしてOPT1,OPT2,OPT3が付加できます。(重複可)

機種C
 ノズル1からジュースが出せます。 原液タンクには4/10gタンクが使えますがボトルは使えません。
 ノズル2からジュースが出せます。 原液タンクには1.8/4gボトルが使えますがタンクは使えません。
 ノズル3からジュースが出せます。 原液タンクには1.8/4gボトルが使えますがタンクは使えません。
 水は基本的に出せませんが、機種に関係なく使用できるオプション機材Wを付加することにより水も出せます。
オプションとしてOPT1,OPT2,OPT3が付加できます。(2つまで重複可能、3つ重複不可)

ジュースX1〜X9の原液は4gボトルと10gタンクのどちらかが選べます。
ジュースY1〜Y9の原液は1.8gボトルと4gタンクのどちらかが選べます。

出荷前に顧客のオーダーに合わせ、各ノズルからジュースX1〜Y9を出せるように調整し、オプションを付加します。

出荷する実際の機器には機番が一台一台についており、トレーサビリティを保証したい。

納品後も、一台一台の機番から、出荷先および、ノズルに割り当てたジュースの種類やオプションの情報を管理しなければならない。

出荷と一口に言っても、設置工事を行う場合もあり、機械を発送するだけの場合もある。 出荷先でオプションを
追加・変更する改造工事もありえる。移設・撤去工事もある。それらの工事イベントについても管理しなければならない。

1出荷先に複数機種を複数台納品する場合もあれば、移設などにより履歴として納品先が複数になる場合もある。

以上のような条件があったとします。
0241NAME IS NULL
垢版 |
05/03/01 17:09:58ID:???
(1)
機種の仕様マスタとしては、

┌ +[機種基本仕様] (スーパータイプ)

├・+[機種A特有仕様](サブタイプ)

├・+[機種B特有仕様](サブタイプ)

└・+[機種C特有仕様](サブタイプ)

のように持つのが正しいのでしょうか?
正しいとして、マスタはそれでいいとして、
出荷する一台一台の情報は、このマスタを利用してどう保存すればいいのでしょうか?

(2)
出荷先と工事と機番との関係は、

 [機材]
  +
  └─≡[工事]
  ┌─≡
  +
 [出荷先]

のようになるのでしょうか?


この辺で長いこと悩んでいます。
上に紹介のあった本にも、
似たケースのモデル例は見つかりませんでした。
何かしらアドバイスいただけると助かります。
0242NAME IS NULL
垢版 |
05/03/02 00:08:35ID:???
>>240

機種−機種ID、最大ノズル数、オプションタイプ可/不可
ノズル−機種ID、ノズルID、タイプ(ジュース/水)、ボトルタイプ(タンク/ボトル)、タンクタイプ(1.8、4、10)・・・
ジュース−ジュースID、ボトルタイプ(タンク/ボトル)、タンクタイプ(1.8、4、10)・・・

設置した機器−機番、機種ID、出荷先・・・
設置したノズル−機番、ノズル番号、ノズルID、ジュースID・・・

出荷するジュース−出荷日、出荷先、機番、ノズル番号、ジュースID・・・


こんな感じ?
0243NAME IS NULL
垢版 |
05/03/02 18:18:10ID:???
>>242
レスありがとうございます。

なるほど。

>設置した機器−機番、機種ID、出荷先・・・
>設置したノズル−機番、ノズル番号、ノズルID、ジュースID・・・
たしかにこれで機番ごとのデータが持てますね。

設置した機器−機番、機種ID、出荷先ID、出荷日時、・・・
           ̄ ̄
ノズルIDが固有機種の固有位置についているノズルを特定し、
ノズル番号は明細のために振った番号だとすると、

設置したノズル−機番、ノズル番号、設定日時、(機種ID)、ノズルID、ジュースID、容器ID、・・・
            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           01001 001     04/9/1  LP-100  ノズル01  ジュースX2  タンク01
           01001 002     04/9/1  LP-100  ノズル02  ジュースX3  タンク02
           01001 003     05/3/1  LP-100  ノズル02  ジュースY2  ボトル05

そうすると、オプションは

設置オプション−機番、オプション番号、設定日時、オプションID、・・・
            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノズル数やその他の制限は、判断材料となるデータを保存しておくまでにとどめ、
実際の判断はデータベースの制約ではなくアプリケーションが都度判断する、
というのが正解になるんでしょうか…。

また、項目が、ノズル・オプションなど限られていれば良いのですが、
他にも例えば、左正面パネルの色・本体高さ・右サブテーブルの幅・左サイドレバーの位置・中央受皿の種類…など、
機種によって管理する項目が全然バラバラのとき、
新機種がでるたびアプリケーション側で機種固有に判断するルーチンを都度追加など、
アプリケーション側の負担が際限なく大きくなりメンテ困難にならないか不安です。

履歴として出荷先が複数になる点もサポートするためには、
過去の出荷先(現在は移設等で機材が無い)の履歴データは
アプリ側で別テーブルに持つのが良いのか、
あるいは設置した機器と出荷先を多対多にするべきなのか…
アプリ側で判断してしまえばどちらでも可能そうなので余計悩んでしまいます。

0244NAME IS NULL
垢版 |
05/03/02 19:55:10ID:???
こんなんは?細かくしすぎかもしれんが。。
実際のオプション内容は別テーブルにして、機種との対応表を別表に作る
(パフォーマンス度外視)。
ものによっては >>242のとおり機種の属性に持った方が適切。
この辺りの判断は要件とかも絡んでくるし、一概には言えないと思う。

> 他にも例えば、左正面パネルの色・本体高さ・右サブテーブルの幅・
> 左サイドレバーの位置・中央受皿の種類…など、機種によって管理する項目が
> 全然バラバラのとき、
本当にバラバラなら機種テーブルそのものを分割する。
親子関係を持たせるとかは自由。

履歴は開始、終了時間で管理(一応、受付時間も)。設置場所だけが変わったら
終了時間が設定されて、開始時間、出荷先が変更された行が追加される、てな具合。

[マスタ]
機種 - 機種ID、(全機種共通情報)
ノズル機能 - ノズル機能ID、ノズル機能(ジュース、水)、タンクID
タンク - タンクID、タンク容量
オプション - オプションID、オプション内容
機種ノズル - 機種ID、ノズル番号、ノズル機能ID
機種オプション - 機種名、オプションID
ジュース - ジュースID、(ジュースの情報)
ジュースタンク - ジュースID、タンクID
出荷先 - 出荷先ID、(出荷先の情報)

[履歴]
設置機種 - 機番、機種名、出荷先ID、受付時間、
設定開始時間、設定終了時間、設定状態(自社設定、客先設置、設置済み etc)
設置ノズル - 機番、ノズル番号、ジュースID
設置オプション - 機番、オプションID

※出荷数量は設置機種により導出可
※2つまでの重複可とかははアプリで。

長文スマソ
0245NAME IS NULL
垢版 |
05/03/03 01:27:26ID:8HW4Dnff
年月日は、date型使いますが、年月ってどうしてますか?
char(6) にしますか?それとも date型で、必ず1日とかにします?


0246NAME IS NULL
垢版 |
05/03/03 01:46:48ID:1vRnt2on
高橋友城 は 殺された
0247NAME IS NULL
垢版 |
05/03/03 18:17:51ID:???
>>245
俺はdate方にする。(月初又は月末しか入らないように制約をつけて)
後に必要な項目が年月が年月日に拡張されてもいいようにね。
まぁ、余計なもの(日)がはいるしChar型に比べてDate型のほうが
サイズが大きいデータベースがほとんどなんで、その辺りがきになるのであれば
Char型もいいんじゃない?
まぁ、結局はおこのみで
0248NAME IS NULL
垢版 |
05/03/03 21:41:11ID:???
>244
ありがとうございます。
頂いたアドバイスを元にただいま苦悩中。
何か形になったら報告に参ります〜
0249NAME IS NULL
垢版 |
05/03/03 22:21:33ID:???
んー…
機種の仕様により選択不可能なオプションを設定しようとすると、
リレーションシップの制約によりエラーがでて設定できないような成果を期待していましたが、
いわゆるビジネスロジック層ですべき判定をデータベース層にやらせようとしている、
というような気がしてきました…
データベース層は、あくまでビジネスロジック層での判定根拠となる設定情報を保持するだけ、
が正解なのかな…
せっかく機種の仕様制限をマスターのリレーションシップで表現しても、
今のままでは履歴テーブルで機種仕様制限に反する設定値を入力できてしまう…
0250NAME IS NULL
垢版 |
05/03/04 13:05:47ID:???
>>241
> 上に紹介のあった本にも、
> 似たケースのモデル例は見つかりませんでした。

なんだかデジャヴを感じるモデルだったので家に帰ってから調べてみたけど
「業務別データベース設計のためのデータモデリング」の"フィーチャオプション"
あたりをじっくり読んでみると幸せになれるかもしれない。
0251NAME IS NULL
垢版 |
05/03/04 14:54:04ID:???
>>250
ありがとうございます。

フィーチャーオプション、
オーダーメイド的な面のあるものに、
どうもしっくり来ない感があるんです。
フィーチャーCが繰り返し項目っぽくなってしまうし、
オプションの付き方に構造がある場合にその構造が表現しにくい…

ためしにちょっと書いてみました。

機種フィーチャコード  フィーチャ明細               フィーチャ別オプション明細
           フィーチャ行No. 桁数 フィーチャ名    オプションC  オプション名
-----------------------------------------------------------------------
LP-100      1         2   ノズル1液種 X1    ジュースX1
.                                 X5    ジュースX5
                                 ・     ・
                                 ・     ・
                                 ・     ・
.                                 Y8    ジュースY8
           2         3   ノズル1容器 .T04    .タンク4g
                                 .T10    .タンク10g
           ・                     ・     ・
           ・                     ・     ・
           ・                     ・     ・
.           8         2   ノズル4液種  X1    ジュースX1
                                 .X5    ジュースX5
                                 ・     ・
                                 ・     ・
                                 ・     ・
                                 .Y8    ジュースY8
           9         3   ノズル4容器  .T04    タンク4g
                                . T10    タンク10g
           10       . 3  オプションA    OPT1   .オプション1
                                 .OPT2   オプション2
                                 .OPT3   オプション3
           11        .3  オプションB    OPT1   .オプション1
                                 .OPT2   オプション2
                                 .OPT3   オプション3
           12        .2  左正面パネル色 BL    .青
                                . BK    黒
                                . RD    赤
           ・                     ・     ・
           ・                     ・     ・
           ・                     ・     ・
           18        .4  中央受皿種類 SUS0  .ステンレス
                                .PLBK   プラスチック黒
                                .PLWH  .プラスチック白
                                .NA00   なし

機種基本属性
機種C    機種名 ・・・ 機種フィーチャC
----------------------------------------
LP-100    LP-100     LP-100


派生機種明細
機種C    フィーチャオプションC
-----------------------------------------------------------
LP-100    X1T04X5T04X6T10Y8T10OPT2OPT3BKXXYYZZQQQGGSUS0
0252NAME IS NULL
垢版 |
05/03/04 15:38:54ID:???
上で、引用元と違ってフィーチャ体系という体系をとらなかったのは、
今回のケースでは、
複数の機種が全く同じフィーチャー体系をとることはまれであるためです。

上のモデルでは、
派生機種明細にマスタとして設定可能な全ての組み合わせを
予め持っておくみたいなのですが、
ノズルに割り当て可能なジュースを見ると、
ジュースの種類が非常に多く、新商品と販売終了の移り変わりが激しいなどの場合、
組み合わせ数がいたずらに多くなった上、マスタメンテの手間も大変そうです。

ところで、
オプションで例えば、キャスターっていうのを考えてみますと、
(アジャスター:高さ調整可能な機械の足
 キャスター :小さな車がついて移動可能な機械の足)
機種側の制約としては、
キャスターには耐荷重があるので、
機種の基本属性に稼動時最大重量というのを持って、
これで適用可能かどうか判断しなくてはいけません。
また、重量をクリアしても、
標準でついているアジャスターの取付方式と互換性のあるキャスターしか使えません。
機械の性質上、絶対揺らしてはいけないものは、
ロック時にアジャスターが降りてくるアジャスター一体型のキャスターしか
使えないかもしれません。
本体が縦長な場合、キャスターによる移動が不安定で極めて倒れやすいので不可、
という場合もあります。
単価が安くて手間をかけたくない機種などで、
営業上の判断でオプションを適用不可にしたい場合もあります。
こういった類の制限を表現するためにはもう、
オプションのマスターで制限を文章表記した上、
適用可能かどうかを判定する、機種×オプションの表に、
予めTrue/Falseで持っておいて、
その根拠として、
その判断を下した責任者、判断日、有効期限、判断理由、特記事項などを
持たないといけない気がします。
0253NAME IS NULL
垢版 |
05/03/04 15:47:29ID:???
キャスターの例で書き忘れましたが、
機械の使用環境がわの制限もありました。
勾配が何度以上だと使用不可とか、
大理石の床に硬いキャスターは不可とか、
あるキャスターの高さ調整範囲だと機械の高さがオーダーどおりに設定できないなど…
こちらも管理しないと、
たとえば機種Aを現場Aに設置した後、
現場Aでは不要になったので現場Bに移設するようオーナーからオーダーがあった場合に、
移設可能かどうか判断が出来なくなります。
従来だと、
・下見にコストがかかる。
 下見に行っても制約条件を網羅しきれず無駄になる場合もある。
・とりあえず移設しようとしたが出来なかったので、
 納期に間に合わない上に後出しで追加料金発生もやむなし。
だとおもいます。
0254NAME IS NULL
垢版 |
05/03/04 19:24:44ID:???
難しい・・・。
やはり、最終段のこれかなぁ
ttp://www.jsys-products.com/iwaken/data_model_patterns/lower.html#13

モノ(クラス)→機種、アジャスタ、ジュース、ボトル、ノズル
モノ(インスタンス)→機種A、高さ調節式アジャスタ、オレンジジュース
関係
 機種A−ノズルA(可能)
 機種A−ノズルB(ダメ)
 ノズルA−ボトルXX
 ノズルA−ボトルYY
 機種A−高さ調節式アジャスタ(ダメ、高さが合わないから)
関係タイプ
 取り付ノズル
 接続アジャスタ
属性
 サイズ
 容量
 高さ
属性割り当て
 ボトル−容量
 ボトル−サイズ
変数
 4g
 10g

なかんじ。
0255NAME IS NULL
垢版 |
05/03/04 19:41:13ID:???
>>254
うわ、改めてみるとすごいモデルですね、これ…
週末使って考えてみます。 ありがとうございます。
0256 
垢版 |
05/03/04 23:18:03ID:???
>>255

 DOA+コンソーシアムってところでメーリングリストがスタート
したみたいです。
ttp://www.doaplus.com/html/topics_20050303.html

 本当に悩んでるならそこで聞いてみてはどうでしょう?
DOAの錚々たるメンバが参加されているようです。
0257NAME IS NULL
垢版 |
05/03/13 14:37:10ID:???
>>256
とりあえず入会してみましたがメーリングリスト届きません…

(´・ω・`)

(´・ω:;.:...

(´:;....::;.:. :::;.. .....
0259NAME IS NULL
垢版 |
05/03/18 09:42:19ID:???
有名本の著者らしき方や、その筋の本職の方などが発言してますね…
0260NAME IS NULL
垢版 |
05/03/19 22:52:31ID:pW3Ejy8n
>>259

 えっそうなの! 無料だから入ってみるか
0261NAME IS NULL
垢版 |
05/03/20 00:10:27ID:???
「オブジェクト指向の幻想について」で盛り上がってます。
0263NAME IS NULL
垢版 |
2005/04/16(土) 17:28:01ID:SaaWDc/a
今投票サイトを作っているのですが、データモデリングで迷っています。
DBには各ユーザー名と回答を格納します。
回答の値はintの0〜10ぐらい(選択肢の数だけ)と予想され、
設問の数はどんどん増えていくことが予想されます。

今下記のような二つの方法を考えています。

A)設問ごとにフィールドを作る。
回答1 回答2 回答3 ・・・
0   1   5   ・・・

B)回答用フィールドは一つにし、カンマ区切りなどで格納する。
回答
0,1,5,,,,

Aは設問が増えるたびにフィールドを追加しなければならないし、
Bは集計のたびに分割して値を抜き出す作業が必要。

どちらが良いでしょうか?
0264NAME IS NULL
垢版 |
2005/04/16(土) 18:41:34ID:???
何で各回答ごとにレコードを持つという発想にならない?
0265NAME IS NULL
垢版 |
NGNG
>>263
ユーザID、設問ID、回答 をフィールドに持つテーブルを作ればいい。

0266NAME IS NULL
垢版 |
2005/04/16(土) 21:46:23ID:SaaWDc/a
あーわかった!
264さん265さんありがとう。

ちなみにメールアドレスをユーザーIDにしようと考えているのですが、
それを主キーにして良いでしょうか?
それともオートインクリメントで主キー用のフィールドを
別に作ったほうが良いでしょうか?
0267NAME IS NULL
垢版 |
2005/04/17(日) 00:33:06ID:???
kaba@prolog.com,設問1,2
kaba@prolog.com,設問2,1
kaba@prolog.com,設問3,1

とかなりますが、kaba@prolog.comのユーザーIDを主キーにするので
よいとお考えですか。
0268NAME IS NULL
垢版 |
2005/04/17(日) 01:09:06ID:R6dX5cU6
いや、ユーザー情報テーブルとは別に投票結果テーブルを作りますので、
主キーは前者だけに設定するつもりです。

こんな感じ

ユーザー情報テーブル
ID(主キー)メルアド パスワード他
001 a@a.a pass1
002 b@b.b pass2

投票結果テーブル
ID 設問ID 回答NO
001 01 9
001 02 5
002 01 1
002 02 4

それで知りたいのは主キーを簡単な数字にした場合とメルアドのような
複雑な文字列にした場合とで検索速度に違いが出るかということです。
0270NAME IS NULL
垢版 |
2005/04/19(火) 11:57:10ID:8GDQE5S+
>268
検索速度については単表検索なら、簡単なコードのほうがいいと思います。
ただ、この設計だと投票結果テーブル検索時はユーザ情報テーブルをJOINするオーバヘッドが発生しますよね。
インデックス容量を考えると、コード有利です。
メールアドレスが変更される可能性があり、かつ変更後も同一人物として扱う必要があるならコード化です。
なければ、メールアドレスがキーのほうがアプリ工数は少ないかもしれません。(JOINの必要なし)
業務特性、システム特性を考えてトレードオフで考え、最良の設計を。

0271NAME IS NULL
垢版 |
2005/04/19(火) 19:34:30ID:???
>>270
> メールアドレスが変更される可能性があり、かつ変更後も同一人物として扱う必要があるならコード化です。
実は私もこの問題で>>268を見てモヤモヤしていました。ユーザー情報テーブルですが、
001 a@a.a pass1
001 a_new@a.a pass1_new
002 b@b.b pass2
となり、ID(主キー)を維持できなくなると思うのですが。
0272271
垢版 |
2005/04/19(火) 20:00:55ID:???
うーん。投票されて、その時点での実際上のIDはメールアドレスですよね。
投票者はID { 001,002...}は知らない。
それで、既に投票されているかチェックに行く。そのための主キー。
とするとメールアドレス以外に主キーは考えられない。
0273NAME IS NULL
垢版 |
2005/04/19(火) 21:17:19ID:???
ER図から3NFまで自動変換するソフトウェアを探しています
0274NAME IS NULL
垢版 |
2005/04/20(水) 02:54:10ID:eImDdv+2
>270
いえいえ、違いますよ。
001は絶対に1レコードのままです。
変更情報は、
@「メールアドレス変更履歴エンティティ」を抽出する
A「変更前メールアドレス」項目を追加する
あたりで表現します。
純粋なデータモデルとしては@が正解とされますが
業務要件が「直近1世代の変更前アドレスだけの保持でよい」などであれば
Aも現実的です。

0275NAME IS NULL
垢版 |
2005/04/20(水) 06:50:59ID:???
メールアドレスを外部キーにもつ列全部に UPDATE CASCADE をつけれ
0276NAME IS NULL
垢版 |
2005/04/20(水) 06:53:21ID:???
メールアドレスを外部キーにもつ列全部に UPDATE CASCADE をつけれ。
0277NAME IS NULL
垢版 |
2005/04/20(水) 08:24:29ID:???
>>273 @が正解ですね。無理に>>268の枠組の中で解を求めたのが
いけなかった。
0278NAME IS NULL
垢版 |
2005/05/25(水) 01:18:49ID:???
個人や組織や会社もろもろに
「パーティ」ってスーパーセット設けるのって実際どうなんでしょう。
よくやるのでしょうか?
0279NAME IS NULL
垢版 |
2005/05/28(土) 23:14:32ID:rxg+K8Bf
コードに意味(何桁目が年式をあらわすなど)を持たせないで
全くの連番だと、コードを見ただけでは全然類推ができないし
使いにくいと思うのですが、コードに意味を持たせないメリットは何。
コードに意味を持たせても、切り出して判断に使わなければOK?
連番は採番しやすくていいのだけれど。両方満足させる方法があれば。


0280NAME IS NULL
垢版 |
2005/05/29(日) 09:41:43ID:???
ただの連番ならDBMSが勝手に作ってくれるからラクじゃん。
0281NAME IS NULL
垢版 |
2005/06/01(水) 01:20:28ID:???
>>279
伝票番号だって、車のナンバーだって、出席番号だって、電話番号だって、意味を持たないだろ。
(言葉遊びの語呂合わせなどは別として)

単に個別を識別するためのものだ。
世の中の仕組みがそうなっていることに気が付けよ。
0282NAME IS NULL
垢版 |
2005/06/01(水) 11:04:24ID:???
>>281
電話番号は意味あるよ。
地域コード - 連番
じゃん。
伝票番号も会社によって
YYYYMMDDXXXXX
とか当たり前にある。
0285NAME IS NULL
垢版 |
2005/06/01(水) 19:01:57ID:???
>>281
出席番号は連番だが名前の読みの50音順に並んでたりするから
そんな場合は意味を持っている、名前の読みについて少しは類推ができる、と
言えると思うがどうか。類推する側が50音順って決まりをわかってないといけないが。
転入生があると転入生は連番の最後で我慢してねとか、誰か転校しちゃうと欠番とかはあるんだろうが。

出席番号をつけるのにくじ引きで名前を引いてその順番に連番をつけるような
場合は、意味を持っていない、といえるかも。
連番であっても意味がある場合とない場合があるということではないのか。
0286NAME IS NULL
垢版 |
2005/06/03(金) 12:15:18ID:???
性別コードは0が女で1が男だよな!
0289NAME IS NULL
垢版 |
2005/06/03(金) 16:04:13ID:???
自己記述的なコードとゆーやつかしら
0290NAME IS NULL
垢版 |
2005/06/03(金) 19:24:36ID:???
>>278
>「パーティ」ってスーパーセット設けるのって実際どうなんでしょう。

OOのやり方。DOAでは積極的にはやらない(と思う)。
0291NAME IS NULL
垢版 |
2005/06/05(日) 12:42:42ID:???
>>285
それは、出席番号順というのではなくて、50音順という、別の意味だろ。
出席番号順のデータを作成する際に、イニシャルデータを作る手順として、
たまたま50音順にデータを投入したと言うだけだ。
だから転校生は、一番後ろになるわけで。
入学受付順、背の順、という学校もあるし、それはたまたま50音の学校が多いと言うだけ。
0292NAME IS NULL
垢版 |
2005/06/06(月) 10:19:45ID:???
>>291
そういや転校生って、後ろにpushだったなあ・・・。
なんか懐かしくて胸キュンだ。
0293NAME IS NULL
垢版 |
2005/06/06(月) 14:46:53ID:???
>>292
俺の学校では違ったなぁ・・・

小・中学校では出席番号は生年月日の早い順。
高校での出席番号は五十音順だった。

ただ、転校生やらが入ってきた場合はその都度、出席番号が変わっていた。
つまり、再度、生年月日やら五十音で並べ替えられる。
0294NAME IS NULL
垢版 |
2005/06/06(月) 15:07:48ID:???
>>293
健康カードとか、下駄箱とか、出席番号を記入して1年間使う物があるのに、
えらく不便なシステムだな。
0295NAME IS NULL
垢版 |
2005/06/06(月) 15:07:54ID:???
えー!都度再ソートもびっくりだが、生年月日順ってのは凄いなー。

やばい、このまま果てしなく脱線しそうだ。
0296NAME IS NULL
垢版 |
2005/06/06(月) 15:13:06ID:???
つまりだ、実際の業務では
>293のような事態がままあるので
識別子と業務上使われる出席番号などは
別に構えるのが吉って事ですね。

健康カードテーブルと下駄箱テーブルも
これで迅速な対応が出来ると。

ただお客さんとのモデリングセッションなどで
作っていく概念レベルではIDじゃなくて
出席番号を識別子とした方がいいでしょうね。
お客さんにシステム要件はなるたけ考えさせたくないし。
実装時に生徒IDでもなんでもシーケンスでふっちゃえばいい。
0297296
垢版 |
2005/06/06(月) 15:24:04ID:???
とか書いてたら、そもそも発端の
ちゃんと>279へのレスになったな。

IDは、意味の無い連番。
出席番号は、業務ルール(五十音順など)の意味がある番号。
とすると。

出席番号は出席簿や健康カードといった
プレゼンテーション部で、ユーザーの認識容易性が得られる。
ただ変更の可能性がある場合に大変。

IDは意味が無い分、業務ルール変更に関係なく
行の識別子として機能する事が出来る。

出席番号はプレゼンテーションの要件なんだから必要だが
識別子としては不安なので、それはIDを採用。
結局両方持っとけって事ですね。
0298NAME IS NULL
垢版 |
2005/06/06(月) 21:59:03ID:???
>>297
ほかのテーブルから外部キーとして参照する場合は
ID?出席番号?
0299NAME IS NULL
垢版 |
2005/06/06(月) 23:26:34ID:???
>293は
出席番号は出欠名簿リストの左端についてる番号ぐらいの利用しかなくて、
いつもは学籍番号ばっかり使ってるってことはないのか。
0301NAME IS NULL
垢版 |
2005/06/06(月) 23:58:33ID:???
>>298
IDじゃないと、297で言ってるメリットが得られないです。
途中で転校生の分、出席番号振りなおしても
下駄箱テーブルはID参照してれば影響なし。

物理的な下駄箱については、頑張って貰おう。
0302NAME IS NULL
垢版 |
2005/06/07(火) 01:39:29ID:???
最初から出席番号を 10, 20, 30 と、10おきにつけておけばいい。
転校生が来たら 25 などを割り振ればいいだけだ。
0303NAME IS NULL
垢版 |
2005/06/07(火) 04:43:41ID:???

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 転入合戦、いくぞゴルァ!! 
    /三√ ´∀`) /  \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,\ワショーイ!!/ \ワショーイ!!/  \ワッショーイ!!/
      //三/|三|\     /■\/■\ /■\ /■\  /■\ /■\
      ∪  ∪       ( ´∀` )´∀` )´∀` ) ´∀`  ( ´∀` ) ´∀` )
 ,,、,、,,,       ,,、,、,,,  /■\/■\ /■\ /■\  /■\ /■\
      ,,、,、,,,       ( ´∀` )´∀` )´∀` ) ´∀`  ( ´∀` ) ´∀` )
             (( (つ  ノ(つ 丿(つ  つ(つ  ノ(つ  丿(つ  つ
                ヽ  ( ノ( ヽノ ) ) ) ヽ  ( ノ ( ヽノ   ) ) )
               (_)し' し(_) (_)_)(_)し' し(_)   (_)_)
0304NAME IS NULL
垢版 |
2005/06/07(火) 08:55:18ID:???
昔のBASICの行番号かいw
0305NAME IS NULL
垢版 |
2005/06/07(火) 10:35:19ID:???
なつかしいね!
と思ったけど、表示順みたいなカラムでは
今もやってるなー。
0307NAME IS NULL
垢版 |
2005/06/07(火) 21:28:29ID:???
年度中に学区内に団地できたら終わりだな。
0308NAME IS NULL
垢版 |
2005/06/07(火) 22:07:15ID:???
総数より同じ隙間に集中した時がまずいのでは…

       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | 転校生の織田です
       \
          ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
                   ∧_∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ∧_∧     ( ´Д` )    <   小田です
         ( ´Д` )   /⌒    ⌒ヽ    \_______
        /,  /   /_/|     へ \
       (ぃ9  |  (ぃ9 ./    /   \ \.∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
        /    /、    /    ./     ヽ ( ´Д` )<  尾田です
       /   ∧_二つ (    /      ∪ ,  /   \_______
       /   /      \ .\\     (ぃ9  |
      /    \       \ .\\    /    /  ,、    ((( )))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     /  /~\ \        >  ) )  ./   ∧_二∃    ( ´Д` ) < 緒多です
     /  /   >  )      / //   ./     ̄ ̄ ヽ    (ぃ9  )  \_______
   / ノ    / /      / / /  ._/  /~ ̄ ̄/ /   /    ∧つ
  / /   .  / ./.      / / / )⌒ _ ノ     / ./    /    \   (゚д゚)オダデス
  / ./     ( ヽ、     ( ヽ ヽ | /       ( ヽ、   / /⌒>  )  ゚(  )−
(  _)      \__つ    \__つ).し          \__つ (_)  \_つ   / >
0309NAME IS NULL
垢版 |
2005/06/07(火) 22:16:05ID:???
意味なし連番IDと認識容易番号の2本立てでいくのがベストと考えて
いいでしょうか。この方法の問題点注意点が何かあれば。

確かに意味なし連番IDを後から変更しようとは思わない。
認識容易番号では何桁目が何を表すかという意味自体が古くなったりする。
電話番号も市町村合併で市町村の枠が違ってしまえば
番号の体系と合わなくなってしまう。
新しい市町村の体系に合わせて電話番号を直して
すっきりしたいと思ってしまうようなものなのだろう。

0310NAME IS NULL
垢版 |
2005/06/08(水) 07:34:54ID:???
>>309
随分前のWEB+DBプレスのデータモデリングの記事に
にそこらへんの事がかいてあった。
今なら全部のバックナンバーのPDFが売ってるから
読んでみるといいよ。面白かった。

意味無し連番こそ、データの識別子であって、
業務上使うコードは、ユーザーさんが使う際の便利な
アクセスパスにすぎないので、ごっちゃにしちゃ
いかんですうんぬんてな事が書いてありました。
0312NAME IS NULL
垢版 |
2005/06/08(水) 10:15:30ID:???
310の続き

じゃあOracleのRowIDやPostgreのOIDを
使えばいいじゃんって話しになりそうですが
そうすると、ひょんな事からエクスポート・インポートなど
する事になったりすると変わっちゃうのでだめですねー
てな事も書いてあった。
0313NAME IS NULL
垢版 |
2005/06/08(水) 11:35:13ID:???
>>310
WEB+DB PRESS特別総集編ってやつですね。
読んでみます。
0314NAME IS NULL
垢版 |
2005/06/08(水) 22:43:34ID:???
>>302

出席番号はどうせ生徒を特定する識別キーにはならないのだから、
再割り振り・ケツに追加のどちらでも良い。

>>310

学籍番号で言えば、全く意味のない連番より、入学年度+連番のほうが見やすい。
見やすいだけで、意味なし連番と違わないのだが、
違いがないのなら見やすい方が良い。

0315NAME IS NULL
垢版 |
2005/06/09(木) 00:38:03ID:???
>>314
勿論、学籍番号は見やすいほうがいいでしょう。
ただ、学籍番号ってのは業務で用いるコード、
特定のデータへのアクセスパスな訳です。

便利なアクセスパスってだけなので、
業務要件の変化によってどうなるもんか判らんので
データをアイデンティファイする識別子とは別にした方がよい、
と言うのが主旨。
意味無し連番ってのが、その識別子にあたります。
0316NAME IS NULL
垢版 |
2005/06/12(日) 11:13:50ID:???
WEB+DB PRESS特別総集編みました。
関係箇所がVol.11とVol.21に出てました。
どちらも著者は羽生彰洋さん。

少し説明すると、この中では、
意味無し連番->アイデンティファイア=ID=識別子=FKで使用JOIN用
認識容易番号->ビジネス上のコード体系=アクセスパス
としており、一見さんに対する顧客コードのつけ方や、
商品開発で開発の最初でコードが決まりにくい場合の例などで、
意味無し連番と認識容易番号を分けて考えて両方採用する
ことが大事である、と。詳しくは本文を。T字形の影響も
形を変えて入っているように感じました。
(ただ、Vol.11では主キーという言葉を認識容易番号の意味で使っていて、
使い方が間違ってないかな。Vol.21では直ってると思う。)

結構詳しく説明されてます。これに反論するのは難しいか。
意味無し連番の今までの違和感が少しはなくなりました。
0317NAME IS NULL
垢版 |
2005/06/12(日) 23:52:13ID:???
>>316
俺も意味無しID、使ってはいたし
コードの洗替が楽ってのも判ってたけど
どうしても違和感があって、
それ読んで、識別子とアクセスパスって言い方で
すっきりしました。

はぶさん、この路線で本書くのかなと思ったけど
SQLドリルってのは、やられた。
0318NAME IS NULL
垢版 |
2005/08/11(木) 09:34:00ID:u6wEnJIp
age
0319NAME IS NULL
垢版 |
2005/08/16(火) 11:18:49ID:wzipZbWi
>>316
このスレみてWEB+DB PRESS特別総集編買ってきてました。
なるほどなぁ〜と読みすすめてたのですが、一つ疑問が。

商品に対する品種。
商品に対する単位。

いままでこれらは商品マスタに品種や単位のコードを参照するように
カラムを追加していました。
しかし、Vol21p112にあるように各関係に対して交差エンティティを作成するほうが
後のためによいのでしょうか?

ちなみに作るとしたら以下のような交差エンティティを作成するのかな?
品種構造 構造ID,品種ID,商品ID 現在は1:m
単位構造 構造ID,単位ID,商品ID 現在は1:m
0320NAME IS NULL
垢版 |
2005/08/16(火) 13:19:07ID:???
>>319
ここで聞いてみよう
http://d.hatena.ne.jp/habuakihiro/

でもまあ、システムの規模や顧客の業務内容などなどで
最適解は色々ってのが答えなんじゃないかな。
正論かつ優等生ちゃんな答えでつまんないけどさ。
0321NAME IS NULL
垢版 |
2005/08/17(水) 05:35:09ID:???
>>320
サイト紹介してくれてありがとう。

みてみると交差エンティティはm:mの時、定義するように書いてありますね。
WEB+DB PRESS特別総集編によると、1:mでもとりあえず定義しとけとあったので
ちょっと疑問に思っていました。

私が担当するプロジェクトはそこまで大規模なものでもないので
今回は交差エンティティを定義しない方向で進めて行きたいと思います。
0322NAME IS NULL
垢版 |
2005/08/17(水) 10:39:17ID:???
>>321
いえいえどういたしまして。
なんか偶然だけど、凄いタイミングよかったね。

規模もそうだけど、
1:mって関連がどれだけ確かなものかってのを
お客さんにしっかり聞いておくのが一番だと思います。

業界でしっかりと規格化されてるものだったり
物理的にそれい以外考えられないとかだったら
カラムにしちゃった方がいいだろうし
「今までそうだったから」とかだと変わる可能性あるから
関連エンティティにした方が良いかも知れない。
0323NAME IS NULL
垢版 |
2005/08/20(土) 22:14:02ID:UVFT2kPn
スレ違いかもしれないけど、相互参照(交差エンティティ)のテーブルって
日本語が使えない時はどんな名前にしてますか?
〜マスタだと「〜MST」
〜のログだと「〜TRN」
〜と〜の相互参照だと「〜???」
私と似た様な命名規則を適用されている方、どうかお知恵をお貸し下さい。
0324NAME IS NULL
垢版 |
2005/08/22(月) 09:41:01ID:???
自分ルールなんだから、自分で決めろよそれぐらい。
そもそもサフックスにするところから議論になるぞ。

まず、プレでも何でもつけるか否か、つける場合の分類、そして略称。
そこの末端だけのことなんだから、開発者は小脇に辞書を抱えて即引きするのが常識。
命名で悩んでる時間がもったいない。
0325NAME IS NULL
垢版 |
2005/08/22(月) 13:32:34ID:???
>>324
議論ではなく、同様ので命名規則を適用している方で
サフィックスだけでもどうやってるのかと意見をもらいたくて・・・。
何にせよ、スレ汚しごめ。
0326NAME IS NULL
垢版 |
2005/08/22(月) 23:01:53ID:???
Crsってサフィックスを見た事があるよ。
設計・命名者はメインフレーム出身の割と古い人。
0327NAME IS NULL
垢版 |
2005/08/23(火) 00:11:07ID:???
>>326
貴重な情報、ありがとうございます。
早速、関係するテーブル名を連結+CRSで命名したいと思います。
0328NAME IS NULL
垢版 |
2005/08/23(火) 08:35:13ID:???
でも英語としてあってるかどうか知らんよ。
あとで保守する人にだせーとか言われるかもよ。
0329NAME IS NULL
垢版 |
2005/08/25(木) 01:16:39ID:???
データウェアハウスの論理設計に関していい書籍やネット上の情報があったら教えてください。
0332NAME IS NULL
垢版 |
2005/08/27(土) 00:08:36ID:???
>>330
m:m確定ならそれいいね!
1:m, m:1かm:mのどちらかわからないときは"REF"だけでもよさそうだね。
0333NAME IS NULL
垢版 |
2005/08/28(日) 15:30:31ID:???
>>329
DWHは書籍とかネットとかの情報は少ないよ。

というかね、そもそもモデリングとか正規化とか無縁の世界。
どういう切り口でデータを分析するかが目的だから、
正規化とかを ”しない” のが普通。
どうすれば必要なデータをだせるのかを最優先に考え、
その為ならば、データベースの構造がどうであってもOK。

だから、通常は業務でデータを蓄積してる、ちゃんとモデリングや正規化されたDBとは別に
DWH用のDBを別に構築して、そこへ必要なデータを夜間バッチとかで流し込む。
0334NAME IS NULL
垢版 |
2005/08/29(月) 17:39:42ID:???
>>329
M$のSQL鯖に付いてる。
使ってみると分かるとおもうし、
MSDNにも資料落ちてるんじゃないかな。

要は、どんな分析をしたいのかをある程度
見極めとくことだと思う。
0335NAME IS NULL
垢版 |
2005/09/01(木) 22:49:42ID:3lCOPcx7
アドバイスお願いします。

現在、商品のテーブルに商品区分のフィールドがあります。
商品区分が'1'の時、計算で使用する項目は標準単価のみ(数量x標準単価=金額)。
商品区分が'2'の時、計算で使用する項目は重量、重量当りの単価。(数量x重量x重量当りの単価=金額)
商品区分が'3'の時、計算で使用する項目は縦、横、奥行、サイズ当りの単価。(縦x横x奥行xサイズ当りの単価=金額)
このような時、商品のテーブルには標準単価、重量、重量当りの単価、縦、横、奥行、サイズ当りの単価のフィールドを設けるべきでしょうか?
それとも商品区分毎に各テーブルを設けるべきでしょうか?

このシステムの前担当者は商品テーブルに全てのフィールドを設けているようですが、
ちょっとひっかかるところがあって、質問しました。

以上よろしくおねがいします。
0336NAME IS NULL
垢版 |
2005/09/02(金) 04:00:25ID:???
なぜ2に数量があって3には無いんです?

標準単価は例外なく全ての商品に入りません?
商品テーブルに単位(1:個 2:kg 3:cm^3 など)が入ってれば・・・

重量 2kg と 5kg 、あるいはサイズ 1m×2m×0.4m と 0.2mm×0.5m×0.05m とで、
商品名(商品コード)は同じですか?異なるんですか?
重量やサイズは注文ごとに計量加工して出荷するんですか?定重量・定サイズのもので在庫してるんですか?

その辺の業態の違いで変わってくるように思いますが…
0337NAME IS NULL
垢版 |
2005/09/02(金) 05:25:44ID:???
>>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重量で金額を算出したり、
サイズで算出したりとまちまちのようです。

以上宜しくお願いします。
0338NAME IS NULL
垢版 |
2005/09/02(金) 08:11:56ID:???
>>337
数量もCurrencyで問題ないかと思いますが・・・
浮動小数点じゃ誤差が出てしまうのではないかと
0339NAME IS NULL
垢版 |
2005/09/02(金) 16:12:47ID:???
>>338
>数量もCurrencyで問題ないかと思いますが・・・
>浮動小数点じゃ誤差が出てしまうのではないかと
商品のテーブルには数量は含めない予定です。
数量はあくまで伝票入力時に入力するものとし、標準では常に1とするからです。

>>335
>このような時、商品のテーブルには標準単価、重量、重量当りの単価、縦、横、奥行、サイズ当りの単価のフィールドを設けるべきでしょうか?
>それとも商品区分毎に各テーブルを設けるべきでしょうか?
この点はどのように考えると良いのでしょうか?
設計1
商品のテーブル
 商品コード
 商品名
 商品区分
 標準単価
 重量
 縦
 横
 奥行

設計2
商品のテーブル
 商品コード(PK)
 商品名
 商品区分
 標準単価
商品単価1テーブル
 商品コード(FK)
 重量
商品単価2テーブル
 商品コード(FK)
 縦
 横
 奥行

う〜ん、どっちのほうがいいんだろ?
0340NAME IS NULL
垢版 |
2005/09/02(金) 21:53:32ID:???
だれが数量を商品マスタに入れようと思うかよ
複数の重量にしてもそんなこと聞いてないと思うが
0341NAME IS NULL
垢版 |
2005/09/03(土) 02:22:57ID:???
>>337
> 汎用性を考えFloatやDouble等で定義すれば解決
> 重量に関しては、2kg,5kg等というような複数の重量は無いとのことです
>>339
> 商品のテーブルには数量は含めない予定です。
> 数量はあくまで伝票入力時に入力するものとし、標準では常に1とするからです
0342NAME IS NULL
垢版 |
2005/09/03(土) 02:26:28ID:???
 重量
 縦
 横
 奥行

って数量ですよ?
お客さんから寸法や重量を指定されるたびに商品を追加するとか?
0343NAME IS NULL
垢版 |
2005/09/03(土) 02:47:23ID:???
洗剤10kgタンクを10本
洗剤500gビンを200本
洗剤50kg特大タンクを2個
コレが同じ値段。
じゃあ重量73gと指定して1370本下さいと言ったら
計量してビンに入れて同じ値段で売ってくれる?

アクリル板 500×200×0.2
アクリル板 400×125×0.4
アクリル板 1000×400×0.05
コレも同じ値段。
じゃあ今度は半端な数は言わない。
8000×5×0.5と指定します。
折ったら返品します。

こういう極端な例を出さないと
要求仕様をちゃんと考えてくれないのでしょうか。
0344NAME IS NULL
垢版 |
2005/09/04(日) 04:09:33ID:hkkDWCwF
>>335
これはRDBMS(ER図)の限界として、とてもよく出てくる典型的な問題ではないかな?
商品をオブジェクトとして保存できるのであれば、
商品基礎クラスを継承した3つの商品クラスを別途用意してしまえばいい。

でも、RDB使ってるなら当然そんなことは出来ないので、解決策としては
(1)1つの商品テーブルを作って、そこに全部の項目を用意する
(2)3つの商品テーブルを別に作る
のどちらかを採用することになる。

これらはどっちが正しいということは無くて、状況に応じて使い分ける。
テーブルを分けると後で検索にjoinを多用しないといけなくなるので、
(1)のアプローチを採用することのほうが経験的には多い
0345NAME IS NULL
垢版 |
2005/09/04(日) 18:53:02ID:???
>>344
自分は商品基礎情報テーブルと個別商品テーブル×3を作ることが多いけど。
0346NAME IS NULL
垢版 |
2005/09/04(日) 19:13:35ID:???
>>344
10個くらいが境界かな。
さすがにsubclass tableを100個tableを作る気はしない。

ちなみに(1)は正規化違反なんだっけ?
0347NAME IS NULL
垢版 |
2005/09/05(月) 08:51:17ID:???
ORACLE Designer vs ERwin
比較したメリットデメリットをあげてください。
使用するデータベースはOracle 10g
0348NAME IS NULL
垢版 |
2005/09/05(月) 11:23:23ID:Kv8Ouo/7
両方使い込んでる奴なんて居ない。
0349NAME IS NULL
垢版 |
2005/09/05(月) 12:03:55ID:???
>>344
この問題、そもそもの現実のものを、どのように扱ってるかが主眼だと思う。
その3つの商品群が混在して扱われているのであれば、テーブルは1つ。
部署違いでまったく別の群をたまたま同じように扱っているのであればテーブル3つ。
データベースってのはあくまで現実の記録だから、そこを主眼にすることは大事だと思う。

で、システム上の扱いで1つにまとまってたり3つに割れてたりして困るならば、そこはViewでカバーする。
1つのテーブルをあるコードで3つそれぞれに分けて表示したり、逆に結合したり。

あと、理想論・原則論からいけば、NULLフィールドやダミー値のフィールドを設けるのは良くない。
同一テーブルでどっかのフラグがこれなら、このフィールドは何とか。
なので、本来は3テーブル分割でまとめてみるViewを提供でよいと思う。
0351NAME IS NULL
垢版 |
2005/09/05(月) 21:27:48ID:???
商品マスタ・部品マスタはあくまで一元化しないとヤバいとおもうが…
縦横高さなんて仕様情報を、基本マスタに、要素ごとに列を与えて載せるべきなのか?
0352NAME IS NULL
垢版 |
2005/09/05(月) 23:22:00ID:???
DB設計の場合、パフォーマンス用件がどうしたって重要になってくるからね。
多少汚くても一個のテーブルで収まってくれると嬉しい
0353NAME IS NULL
垢版 |
2005/09/07(水) 21:00:08ID:???
上であがってるWEB+DB PRESS特別総集編Vol.11とVol.21では
ハードウエアも進化してるので理想論をもう少し追求してもよいのでは?とありますね。
なので分割したテーブル数が10未満程度なら、テーブルを分割したほうがよいのかもしれません。
0354NAME IS NULL
垢版 |
2005/09/07(水) 23:24:35ID:???
分けるといってもサブセットですよね?
0355NAME IS NULL
垢版 |
2005/09/19(月) 20:50:45ID:KI/vbbTM
範囲が断続していて、なおかつ重複しないデータは、
どのようにモデリングしたらよいのでしょうか?

例えば、次のような形のデータです。

材質,最小値,最大値
SPC270D,100,200
SPC270D,250,330
SPC270D,360,380

渡辺幸三さんが書かれた
「業務別データベース設計のためのデータモデリング入門」は読みました。
(他の2冊も読みました)

この本の中には、連続して重複しない場合の例は載っていましたが、
連続せず、重複しない例が載っていませんでした・・・。

初心者っぽい質問ですみません。
いきなりオフコンからの移行プロジェクトを
押し付けられてしまいました・・・。
0356NAME IS NULL
垢版 |
2005/09/20(火) 00:19:17ID:???
ID,材質,最小値,最大値
プライマリキーはID
Uniqueキーは材質,最小値,最大値でいいんじゃない?
順序が必要なら各材質毎にNo.振って材質,No.にUniqueキーを設定するとか。

>この本の中には、連続して重複しない場合の例は載っていましたが、
>連続せず、重複しない例が載っていませんでした・・・。

この部分がよくわかりません。
データの並びを見ると、連続して重複(材質が)しているようにみえます。

外してたらすまそ。
0357NAME IS NULL
垢版 |
2005/09/20(火) 02:19:56ID:???
>>356
お回答ありがとうございます。

俺の言う重複ってのは、例えばこんな感じです。

材質,最小値,最大値
SPC270D,100,200
SPC270D,180,330
SPC270D,300,380

どう言う事が具体的に説明してみます。

板厚ごとに単価が変ります。

材料メーカーさんの都合で、
サイズの範囲が決まっています。

例えば355の例で言いますと、
200-250ってサイズは存在し得ないんです。

俺なりには検討してみたんですが、
RDBMSの制約では実現できないんでしょうか・・・。
0358NAME IS NULL
垢版 |
2005/09/20(火) 05:41:11ID:???
>>357
構造は>>356のような感じで作る。
その後制約したいテーブルをビューでラップ。
追加、更新時にトリガーをかませ、制約テーブルを読み取り違反していれば
クライアントに例外を投げる。

俺だったらこんな感じにする。
0359NAME IS NULL
垢版 |
2005/09/20(火) 10:09:33ID:???
テーブル制約では不可能でしょ。
358さんのいうように、アプリ(ストアド・トリガー)の範疇だと思います。
0360NAME IS NULL
垢版 |
2005/09/20(火) 10:25:52ID:???
参考になりました。ありがとうございます。
0361NAME IS NULL
垢版 |
2005/09/29(木) 15:32:26ID:gDAO8DBJ
日付のついた取引の表示順序を、その日の中で任意に設定したいのですが、
定石的な方法をご教示ください。

各取引から次の取引に外部キーをもたせて連結リストっぽくすると、
挿入や削除でいじる箇所が少なくてすみますが、
リストが切れた場合の危険があるからよくないですよね?

各取引の表示順序を1からの連番としてもたせるとすると、
挿入や削除が発生したときに手間がかかります。
10おきとかの番号をつけて、足りなくなったら番号つけかえるのが
現実的でしょうか?
0362NAME IS NULL
垢版 |
2005/09/29(木) 16:03:04ID:???
追記式で追加しながら順序も決めるならば、普通にリスト構造にすればいいんじゃないの?
又は、順序カラムを数値で持っておいて、差し込み先より大きい列に対して、+1するUPDATEで割り込み完了。

そもそもで、そういう仕様は蹴飛ばすような・・・。
順序が任意ならば表示側のソートで勝手にしてってするか、
ソートした最終結果だけ受け取ってがらがらぽんする。
0363NAME IS NULL
垢版 |
2005/11/30(水) 14:22:09ID:???
販売管理の売上データなどで売上伝票番号がキーとなる
データがあるのですが、この番号は意味のない連番なんですが
(但し、その番号を入力して該当すれば売上伝票を表示します。)
別途、意味なしキーを追加したほうがいいのでしょうか?

また、マスタに業務上のキー以外に意味なし連番を作成した場合に
売上データなどにマスタ値としていれるのは業務上のキーでOK?
業務上のキーを入力されたら、マスタを参照してわざわざ意味なし
連番をセットするのが面倒っていわれたんだけど・・・

0364NAME IS NULL
垢版 |
2005/12/01(木) 01:07:01ID:???
>>363
> 販売管理の売上データなどで売上伝票番号がキーとなる
> データがあるのですが、この番号は意味のない連番なんですが
> (但し、その番号を入力して該当すれば売上伝票を表示します。)
> 別途、意味なしキーを追加したほうがいいのでしょうか?

どちらでもよい。
俺はシンプルなのが好きだから、必要ないときは
意味なしキーは作らない。

ただ、最近はRubyOnRailsやHibernateなど、
アプリ側のアーキテクチャの都合で意味なし連番が
効果を発揮する場合がある。

基本的には好みの問題だけど、意味なし連番をつける
メリットが明らかにあるときはつける、なければつけない
という方針が分かりやすいかもしれない

> また、マスタに業務上のキー以外に意味なし連番を作成した場合に
> 売上データなどにマスタ値としていれるのは業務上のキーでOK?
> 業務上のキーを入力されたら、マスタを参照してわざわざ意味なし
> 連番をセットするのが面倒っていわれたんだけど・・・

俺なら業務上のキーをそのままセットさせる。
一応ユニーク制約はつけておいて。
はっきりとメリットを説明できないことはやらない
0365363
垢版 |
2005/12/02(金) 20:53:58ID:???
>>364
webアプリなどでは有効ということですね。

>俺なら業務上のキーをそのままセットさせる。
マスタのキーが変更になるとデータまで変更しなければ
ならなくなると思うのですが・・・・
でもデータを見たときにわかりやすいというメリットはあります。
どちらがいいのでしょうか。
0367NAME IS NULL
垢版 |
2005/12/03(土) 01:52:24ID:???
つか、マスタのキーってのはそういう変更が起きないように慎重に設計するんだよ。
コード体系とか適当に作って、後で泣きを見るってのはよくある話だ
0368NAME IS NULL
垢版 |
2005/12/12(月) 11:39:12ID:???
設計時にうまくできてても、使ってるうちに使い方も変わって、なんだか最適から外れてきそう。
現場の使い方の詳細な知識が有れば、余裕もって作り込み出来るかも知れないけど、現実は与えられた情報でヤマかけて作り込むしか無いな。

項目増えたらまた設計し直しって言うのも面倒だな。
業種別の汎用的なモデリング例とか共通化してしまえば楽だと思うけど、モデリングで飯喰ってる香具師には営業妨害かな。
0369NAME IS NULL
垢版 |
2005/12/13(火) 00:48:14ID:???
それっていわゆる「アプリケーション」。SAPとかOracleとかの。
でもいくら汎用的にって言っても顧客のビジネスルールは千差万別だから、
業務をシステムに合わせるためにコンサルが出てきたりカスタマイズが
必要だったり、ってことになるんだけどね。
0370NAME IS NULL
垢版 |
2005/12/13(火) 11:52:17ID:???
そしていつのまにか原型をとどめないほどのカスタマイズの嵐で
結局イチから作ったほうがよかったんじゃねーかという罠。l
0371NAME IS NULL
垢版 |
2005/12/17(土) 15:20:22ID:???
カスタマイズはあんまりせずに、汎用性の枠の中で解決した方が生産性は上がると思うけどね。
顧客のビジネスルールごとに似たような設計を繰り返すのは無駄だと思う。

ISOでもJISでもいいから定義しないかなあ。
0372NAME IS NULL
垢版 |
2005/12/17(土) 17:17:01ID:???
まぁ、そういうのは何度も試みられているがな。
カスタマイズが減ると仕事も減りそうw
0373NAME IS NULL
垢版 |
2005/12/18(日) 00:16:39ID:5chxNrki
Len Silverston の Data Model Resource Book って本を参考に、
設計に反映できたらいいなと思っています。
できれば日本語だとありがたいのですが、日本語訳の計画などないでしょうか。
日本でデータモデル系の本を書かれてる方の一部にとっては気になる本(種本?)に
なっている傾向もあると思うし、モデル自体のいい悪いは別にして、
素人考えでは結構売れると思う(一冊は手元に置きたいという需要もあるだろうし)。

例えば、この本の中で、相手先の管理(顧客マスター)で履歴管理が必要な場合などの
データモデルなどモデルで提示されていると参考にしたくなる。個人名の
履歴管理として、刑務所の囚人の名前として偽名やあだ名の管理などにも言及
していたりして面白いと思う。(ある人物が名前や住所をいくつも持つという状態)

提示されているモデルを盲信しないようにということもあるかもと思ってしまうが、実際、
この本の評価(モデルの有用度)はどんなものでしょうか。

0374NAME IS NULL
垢版 |
2005/12/19(月) 02:11:17ID:???
日本の場合は、役所納入用の標準仕様をJISで定義してくれれば普及しそうな気がする。
0375NAME IS NULL
垢版 |
2005/12/22(木) 01:02:21ID:???
本屋でひととおり見て来たが、いまいちこれだって本には巡り会えなかった。orz
0376373
垢版 |
2006/01/09(月) 12:12:34ID:???
Data Model Resouce Book Volume1について補足。
この書籍内のER図の表現では、FKは(自明として)省略され、
またサブセットの表現が箱の中の箱(入れ子構造)で表現されていたりと
いまいちなじみにくい。その点、付属のCD-ROMからER図を別ツールで
リバース作成すればFKも全て表現されておりサブセットも別な箱として
表現されるのでなじみやすく、さらに全体像も把握しやすい。

但し、付属のCD-ROMはUnlockCodeを購入しないと、サンプルしか参照できない。
以下のサイトからUnlockCodeを購入してUnlockすると、書籍内の参照制約などを
含んだデータモデル全部のDDLが得られる。UnlockCodeの購入は値段が高いのだが
勇気を持って購入手続きして損はないと個人的には思う。

ttp://silverston.wiley.com/
-[Unlock your Volume 1 CD]

ODBC用,Oracle用,SQLServer用の3種類のDDLがあるので、
そのDDLを使用してDBを作成し、ERWinやSIObjectBrowserERの体験版などで
ER図をリバース作成すれば、リレーションもきれいに描画されると思う。
論理モデル用ってのでは全部で501個のテーブルが作成される。
Oracle用のDDLを試してみたところうまく行った(Oracle817)。
ODBCとSQLServerは試してない。
0377NAME IS NULL
垢版 |
2006/01/10(火) 09:58:29ID:???
おまいがその経験を元にもっと分かりやすく書いた物を出版すると良書に成る悪寒。
暇ならがんがれ。
0378NAME IS NULL
垢版 |
2006/01/25(水) 02:11:14ID:???
>>376
俺もタネ本として買ったよ。
読むたびに、なにがしかを得られる本だよな。


0379NAME IS NULL
垢版 |
2006/01/27(金) 11:28:43ID:???
:378 s/なにがしか/なにかしら/
0380NAME IS NULL
垢版 |
2006/02/26(日) 10:11:56ID:hHkdb9kS
すいません、DBDesigner4を使用してMySQLからER図をリバースしようと思っているのですが、
localhostのMySQL4.1.13に接続しようとすると

dbExpress Error: Invalid Username/Password

というダイアログが出てしまい接続できません。
どなたかこの現象の回避方法をご存知の方いたら教えて下さい。
お願いします。
0382NAME IS NULL
垢版 |
2006/02/26(日) 10:41:01ID:hHkdb9kS
>>381
ダイアログの内容を読め、といった意味であればそれくらいはさすがに分かっています。^^;
UsernameもPasswordも一致しているのにこのメッセージが出ているから困っているのですが・・・。
root以外のユーザもいくつか作成して試しましたが同じでした。

それとも海外にこの現象について解説したサイトがあるって事でしょうか?
う〜む・・・。
0383NAME IS NULL
垢版 |
2006/02/26(日) 15:27:07ID:???
MySQLは4.1から認証方式が変わってるから、そのせいではないかい?
OLD_PASSWORD関数つかってみれ
例:
UPDATE mysql.user SET Password = OLD_PASSWORD('hogehoge') WHERE User = 'foo';
FLUSH PRIVILEGES;
0384380
垢版 |
2006/02/26(日) 17:43:32ID:hHkdb9kS
>>383
ありがとうございます!
教えて頂いた通りやってみたところ、エラーは消えて無事接続できました!

・・・が、モデルが開けません・・・orz

DBDesigner4はMySQL4.1以降には対応していないって事でしょうか。
フリーでかなり良さそうなツールだったので残念。

でもお陰で勉強になりました。
本当にありがとうございました!
0385NAME IS NULL
垢版 |
2006/02/27(月) 01:44:31ID:???
ふーん、リバースなんて機能あったんだ。
でも、もともと不安定なツールだからね>DBDesigner4
0386NAME IS NULL
垢版 |
2006/03/04(土) 14:33:11ID:DNs0MEkq
MySQLに対応してるモデリングツールで
論理・物理名を切り替え、同時表示できるのありますか?
0387NAME IS NULL
垢版 |
2006/03/10(金) 08:45:13ID:pPH8uClm
最近?でも無いのかも知れないけど、IDとCDの使い分けを
推奨する読み物を見掛ける事があるのですが実際の所どう思います?

●定義
ID:ユーザが意識しないシステム上での識別子
CD:ユーザが意識する識別子

この定義までは、同意です。

この後、CDを使う場合は、IDを主キーとし、
CDには、ユニークインデックスを張るという解説がよくみるパターンです。

この通りに進めると確かにCDは変更できるのですが、
モデルが複雑になりアプリの開発工数が確実に増えます。

(昔CDを変更する要件があって同じ実装をしたが
履歴系情報との整合性問題を理解して貰うとか、
CD変更用アプリを別途作るとか面倒ダタヨ)

その辺のバランスが、私の経験だとヤリスギと感じるのですが、
どう思いますかね?
0388NAME IS NULL
垢版 |
2006/03/10(金) 09:55:44ID:???
(1) joinするときに便利(複合主キーの場合)
(2) 変更履歴を管理しやすい(コード変更時は直接変更ではなく古いコードに削除フラグを立てる、という感じ)
(3) 最近のアプリケーションフレームワークにシステムidを前提にしたものが増えてきている(Hibernate,RoRなど)
0389NAME IS NULL
垢版 |
2006/03/10(金) 12:49:21ID:???
仕様変更とか柔軟になるし
要求側には出来る限り押し通す
0390NAME IS NULL
垢版 |
2006/03/10(金) 12:57:26ID:???
モデリングする段階ではCDを主キーとして、IDは実装段階で
主キーにするのでは。
0391387
垢版 |
2006/03/12(日) 03:12:21ID:???
>>388
>(1) joinするときに便利(複合主キーの場合)
4階層目のテーブルなどで、主キーの項目数が、やむえず増えた場合に
代替となるIDを振る事には、同意です。
気になっているのは、1:1でCDとIDを作成する事が、どうなのかなぁと。。

例えば、↓こんなテーブル
取引先テーブル
取引先ID(主キー)
取引先CD(ユニーク制約)
取引先名(単なる属性項目)


>(2) 変更履歴を管理しやすい(コード変更時は直接変更ではなく古いコードに削除フラグを

立てる、という感じ)

削除フラグを使用するという事は、CDにはユニーク制約を
張らないという事ですね。
変更履歴を、作りやすいという点は、分かりました。

この方法で気になる事は、
・CD値の重複チェックをアプリ側で徹底する必要がある。
・変更のたびにレコードが増えて行くのは、
 いたすらに負荷(JOIN等)を増やす事になるのでは?
・CD値の変更を行った場合には、レコードが追加され
 新しいIDが振られると思うのですが、
 子テーブルとの紐付けはどうなるのでしょうか?


>(3) 最近のアプリケーションフレームワークにシステムidを前提にしたものが増えてきてい

る(Hibernate,RoRなど)
な〜るほど、それには従った方がよさそうですね。
0392387
垢版 |
2006/03/12(日) 03:14:03ID:???
>>389
>仕様変更とか柔軟になるし要求側には出来る限り押し通す

う〜ん、本当にそこまでやるメリットがあるのか
私の経験上わからないのですよねぇ。
ちなみに開発してきたのは、中小規模で数人で分析〜リリースし
半年位の規模で、受注だとか会計だとかのシステム。


>>390
>モデリングする段階ではCDを主キーとして、IDは実装段階で
>主キーにするのでは。

そのようですね。
最初に見たのは、WEB+DB Press Vol.21「データベース設計の基礎知識」で
最近見たのは、Developers Summit2006の↓「楽々ERDレッスンLive」
ttp://www.seshop.com/event/dev/2006/data/download/9-E/9-E-3.pdf

0393387
垢版 |
2006/03/12(日) 03:15:25ID:???
IDとCDを分ける、最大のメリットはCD値の柔軟な変更だと
思っているのですが、変更できないといっている原因は、
参照整合性制約が理由ですかねぇ?

だとしたらCD値を主キーとして、参照整合性制約にON UPDATE CASCADEを
付加する方が、シンプルで柔軟性も確保でき負荷軽減という点でもメリットが
大きいと思うんですよねぇ・・・

ちなみに、ON UPDATE CASCADEのサポート状態を、ざっと調べてみた所、
使用可:SQLServer2000 , Access97 , MySQL4.0.8 ,pgsqlでも使えるっぽい。
使用不可:Oracle(Oracleで使えんのは問題か。。?)
0394NAME IS NULL
垢版 |
2006/03/13(月) 12:46:46ID:???
自分は主キーは更新しないって前提で組むな。
主キーに整合性とってないデータも有ったりだし。
別に外部キー更新したい訳じゃないし。
0395NAME IS NULL
垢版 |
2006/03/13(月) 20:08:01ID:???
履歴をどうするかなあと考えていたが、削除フラグねえ。仕様としては前回履歴のみ?
無限履歴とか、ラスト5回履歴とか、便利では有るが、ディスク容量喰うよなあ。
年度毎あたりでダンプして履歴リセットって仕様にすると、継続サポートコスト発生で開発側はウマーかな?
0396387
垢版 |
2006/03/13(月) 20:57:29ID:???
>自分は主キーは更新しないって前提で組むな。
私も基本は、主キーは変更しないという考えです。

というか、CDだろうがIDだろうが、一度付けた識別子を、
変更するな、という旧い?考えなのです。
ただ、会社として扱うデータ量、種類が増えてきた為に
コード体系を、変更したいといった要望が発生するのは
分かるので、コードを変更する上で効率的なモデリングは、
どんなのかなぁと考えている所です。

まぁ、そんな状況になった場合は、CDだけじゃなくシステム
全面見直しな上、会社として儲かっている可能性が高い訳で、
アプリの修正工数なんて、ちょちょいと出てくるはずなんで
すけどねぇ。。。Ψ(`▽´)Ψケケケ
その辺のバランス、CDの洗い替えが多発するという状況が
思いつかないのも、疑問に思う一つの理由です。


>主キーに整合性とってないデータも有ったりだし。
整合性が取れない可能性のあるテーブル(参照整合性制約を
張らないテーブル)で、私がよく作るのは、
・トランザクション系テーブル
・履歴系テーブル
・外部からの連携情報テーブル
・汎用的に様々なCDを入れる為の属性

な〜るほど、こう考えるとCD一本でモデリングした場合の
トランザクションが問題で、CD変更時に生きている
トランザクションが存在すると面倒ですねぇ。

みなさんありがとう、納得しました。

IDとCDを分ける事によりシステムの寿命が延びるが、
工数と負荷の面でのデメリットがあるという考えで
使い分るとします。

CD体系の変更が発生する可能性の高いシステムが前提の場合、
トランザクション系システムならば、IDとCDを分けて、
データウェアハウスや、寿命よりも処理速度にシビアなシステム
ならば、分けないといった感じですかね。

工数も少なくCDの変更ないだろう、といった場合は、
やっつけ仕事で、次回に回収すると。。Ψ(`▽´)Ψケケケ


他には、IDとCDを分けた場合、履歴系はデータを登録しすぐに削除し
また同じCDで登録した時に関連が切れるという点をユーザーに理解
してもらう必要があると。(たいした問題ではない。)
0397NAME IS NULL
垢版 |
2006/03/26(日) 12:56:39ID:???
T字型書けるツールってない?visioじゃないみたいだし・・
0399NAME IS NULL
垢版 |
2006/03/32(土) 00:02:21ID:???
>>397
T字型は表記法と正規化における規則であって、正規化そのものじゃないと思うけど。
ER 図なら Visio や ER Studio などで十分。

69の言ってことがよく分からん。

> 会社で社員が部門に所属しているのを表すとき、
> 社員(社員コード、氏名) 部門(部門コード、部門名) 所属(社員コード、所属部門コード)
> のようになるようなんですが、T字型でないERの場合は
社員(社員コード、氏名、所属部門コード) 部門(部門コード、部門名)
> となると思うのです。

これは、表記法がT字型であろうとなかろうと、結果は一緒になる罠。
理由は70、71が言ってるとおり。
0400NAME IS NULL
垢版 |
2006/03/32(土) 17:00:56ID:uNjChBox
>>397
DynamicDraw(ttp://www.molips.com/jp/)

ttp://groups.yahoo.co.jp/group/molips/files/
のテンプレートを入れて使う。

EXCELとかWORDは矢印線の先端スタイルが限られているから
いまいち使えないね。「ファイルが開けないよ〜」って人には
WORD or EXCELにクリップボード経由でメタファイル形式で貼り
付けて渡せばいいし。
(再編集はできないけど。)
0402NAME IS NULL
垢版 |
2006/04/05(水) 22:46:40ID:5UG0+3IT
ER図のサンプルが沢山見られるサイトとかってありますか?
勉強用にいろいろ見てみたいのですが・・・。
0403NAME IS NULL
垢版 |
2006/04/22(土) 05:31:29ID:pFb3dyuH
最近、モデリングの勉強はじめました。
下記以外にお勧めの書籍ありましたら、お教え願えませんでしょうか。

■ 読んだ
「実践的データモデリング入門」 真野 正
「業務別データベース設計のためのデータモデリング入門」 渡辺 幸三
「データベース設計論 −T字形ER」 佐藤 正美
「名人椿正明が教えるデータモデリングの技」 椿正明

■ 読むつもり
「データ中心システムの概念データモデル」 椿正明
「生産管理・原価管理システムのためのデータモデリング」 渡辺 幸三


「T字形ER」は新しいのを読んだので、ほか2冊は読まなくて良いかなと
思ってるんですがどうでしょう?
(店頭で見つからないので、内容確認できないんです)
0404NAME IS NULL
垢版 |
2006/04/22(土) 07:26:55ID:???
たくさん読めばよいというものでもないと思うが・・・
0405NAME IS NULL
垢版 |
2006/04/22(土) 13:18:55ID:pFb3dyuH
モデラーが10人いれば10通りのモデリングがあるって聞いたので。
実際、著者により主張が違うところがあるので自分で比較検討してみたいんです。
>>402 さんみたいに、サンプルを沢山見てみたい、てのもあります。
0406NAME IS NULL
垢版 |
2006/04/24(月) 04:43:21ID:???
T字型ってモデルの属人性を排除するんじゃなかったけ?
0407NAME IS NULL
垢版 |
2006/04/25(火) 00:55:55ID:???
そういう問題ではないだろう。
いろいろ勉強すればT字型ってダサいなぁと気付いたりするわけよ
0409NAME IS NULL
垢版 |
2006/04/25(火) 13:26:45ID:???
>>407
じゃあ、ナウでヤングなモデリングを教えてくだされ。
0410NAME IS NULL
垢版 |
2006/04/28(金) 01:15:02ID:???
T字形って、認知番号重視なのは解るけど、
わざわざ主キーを非明示にする理由がわからん。
0412NAME IS NULL
垢版 |
2006/05/07(日) 13:07:50ID:???
データモデリングはどのような書籍で勉強しましたか?
0414NAME IS NULL
垢版 |
2006/05/11(木) 00:42:24ID:???
>>411
えー。
DB屋以外の関係者との会話に使えないような記法はどうかと思うけど。
0415NAME IS NULL
垢版 |
2006/05/11(木) 00:59:09ID:???
うん、だから流行らない
0416NAME IS NULL
垢版 |
2006/05/11(木) 07:29:29ID:???
>>414
哲学者とは会話できるようになるぞw
0417NAME IS NULL
垢版 |
2006/05/14(日) 01:28:50ID:???
T字形の新しい本を読んで思ったのは...
あの理論編の哲学議論がまさに「言語ゲーム」。
0418NAME IS NULL
垢版 |
2006/05/14(日) 01:42:07ID:???
ヲウムと同じだよね。
悟り開いて宙に浮く様になれば尊師の教えが分かるよって感じ。

傍から見てるとDQNにしか見えない罠。
0419NAME IS NULL
垢版 |
2006/05/14(日) 13:29:08ID:???
理論編だけ読み飛ばせばモーマンタイ
0420NAME IS NULL
垢版 |
2006/05/15(月) 00:55:43ID:???
そうはいかんよ。

従来のER手法でエンティティとリレーションを同時並列的に検討するのは、
純粋な「実体主義」も、純粋な「関係主義」も、現実的には極端すぎるから両方を同等に扱いましょう、
ていうのが背景にあると思う。(明示的にではないにしろ)

それを“実体主義のほうが本質的で、だからエンティティーを重視するんだ!”って主張するんだったら
そのへんをちゃんと論理的に、かつ皆が納得できるように説明してくれないと...

あの理論編は、ぜんぜん「理論」になってなくて、いろんな哲学のオイシイ結論を寄せ集めただけに見える。
だってボク、クリプキ好きなんだもん、とか言われても困っちゃう。
0421NAME IS NULL
垢版 |
2006/05/15(月) 04:32:07ID:???
実践編、かなり有用と思うよ
でも、たしかに理論書としては、ちゃんと筋道たてて説明してない感じがする。
論理の飛躍がある、というより、断片を継接ぎした結果みたいな。

モデリングって学問としてあるわけじゃないのかな・・
奥が深いし、博士号取得した哲学者や数学者がもっと研究してほしい
0422NAME IS NULL
垢版 |
2006/05/16(火) 19:37:34ID:???
計算量の上界値、下界値ってどういうことなんですか?
上界値=計算量が最大と思われる値?
0423NAME IS NULL
垢版 |
2006/05/16(火) 23:01:00ID:???
それより大きいことはありえないと保証できる値
てか板ちがい
0424NAME IS NULL
垢版 |
2006/05/16(火) 23:20:39ID:???
>>423
レスありがとうございます。
では、これはどこの板行けばいいんですかね?プログラム板ですか?
0425NAME IS NULL
垢版 |
2006/06/29(木) 00:28:29ID:s69NJyt8
Visioって作ったモデルからCreate文生成したり,DBに直接テーブル作成したりできるん?
0426NAME IS NULL
垢版 |
2006/06/30(金) 12:54:48ID:5MdCXCSh
新しい職場で、設計がやたら縦持ちになってるんですが、縦持ちってポピュラーな方法なんですか?
扱いにくくってしょうがないんですが。
0427NAME IS NULL
垢版 |
2006/06/30(金) 13:03:31ID:???
>>425
VisioのProfessional版を使っていて、できそうだったのでちょっとやってみたら
「Enterprise Editionを使え( ゚Д゚)ゴルァ!」と言ってきました。インスコしてないので試せないが、
Enterprise版を使えばできると思われ。MSDNにはついてきていると思う。
0428NAME IS NULL
垢版 |
2006/06/30(金) 23:23:03ID:???
Create分まで作りたいんなら、VisioよりDBDesigner4を勧めたい
0431NAME IS NULL
垢版 |
2006/07/02(日) 07:56:49ID:???
仕様書作る時にはvisioのほうが便利。
実装と文書化の二度手間のほうが苦痛。
0432NAME IS NULL
垢版 |
2006/07/02(日) 09:59:38ID:???
仕様書ってどういうレベルのもの言ってんだ?
DBDesignerでもER図やDB定義書くらい作れるぞ
0433NAME IS NULL
垢版 |
2006/07/02(日) 15:46:50ID:???
客と下請けに提出する清書レベルだよ。
手書き程度ならチラシの裏に落書きで十分だし。
0434425
垢版 |
2006/07/05(水) 22:25:25ID:???
レスくれた方ありがとうございました。Visio for Enterprise Architects
というバージョンで出来ました。

ところで、教えていただきたいことがあるのですが、3種類のコードが組み合わさって
出来ているコードがあるのですが

  AAABBCC

  コードA VARCHAR(3)
  コードB VARCHAR(2)
  コードC VARCHAR(2)

こんな感じです。AとBとCは親−子−孫の関係にあるのですが
この親−子−孫を表せるようにモデリングするにはどうしたらよいでしょうか・・・・
0435NAME IS NULL
垢版 |
2006/07/06(木) 18:28:47ID:???
>>434
親=PK:|AAA|
子=PK:|AAA|1-n|BB|
孫=PK:|AAA|1-n|BB|1-n|CC|
かな?

んで。気になるのは。各コードは固定長でなく可変長なんですか??
0436NAME IS NULL
垢版 |
2006/07/06(木) 22:26:39ID:???
>>435
あ、固定長です。

>親=PK:|AAA|
>子=PK:|AAA|1-n|BB|
>孫=PK:|AAA|1-n|BB|1-n|CC|

これは、まさしくこんな関係です。
0437NAME IS NULL
垢版 |
2006/07/10(月) 23:41:46ID:2umW5dHJ
あるリソースエンティティ同士の関係を表すのに
交差エンティティを作成するという例はよく見かけるのですが、
イベントエンティティ同士の関係についても交差エンティティを作成するという
事はあるのでしょうか?
たとえばある複数の勘定科目から出金して、出金した額を別の種類の複数の
科目へ入金するといった作業があるとして、出金エンティティと入金エンティティ
との関係はどう表したらよいのでしょうか。
0438NAME IS NULL
垢版 |
2006/07/10(月) 23:45:40ID:EbhJ+Fw+
yhSEfIF00
0439NAME IS NULL
垢版 |
2006/07/11(火) 02:01:08ID:???
>>437
交差エンティティって呼ぶのかどうかは知らないけど、
そんなようなものは必要に応じて当然作るよ。

○親テーブル
PK1       PK2
入金No.010   出金No.101
入金No.011   出金No.102

○子テーブル-入金
PK1       PK2
入金No.010   勘定科目A   1,000
入金No.010   勘定科目B   2,000
入金No.011   勘定科目C    200

○子テーブル-出金
PK1       PK2
出金No.101   勘定科目Y   2,500
出金No.101   勘定科目Z    500
出金No.102   勘定科目A    200
0440NAME IS NULL
垢版 |
2006/07/11(火) 14:42:29ID:???
DB作る前に簿記の勉強したほうがいいね。
帳票をそのままDBにすればおk。
0441NAME IS NULL
垢版 |
2006/07/15(土) 15:39:26ID:???
簿記検定受験後の今その言葉の重みが良くわかる
0442NAME IS NULL
垢版 |
2006/08/27(日) 18:38:29ID:7FPwEeLv
つまらない質問で申し訳ないのですが、
顧客IDなどのコードの作成方法は
決まっているのでしょうか。
社員番号なら入社年月日+連番
などでいいと思うのですが、
何か指針はあるのでしょうか。
0443NAME IS NULL
垢版 |
2006/08/28(月) 01:10:22ID:???
連番も何桁取るとか有るよ。2桁じゃ100人入ったら終わり。
総務や人事と打ち合わせて決めたほうがいいよ。
全社的に統一しないと意味がない。

顧客コードなら営業とかと打ち合わせて決めるべき。
営業上、顧客の元に自社の顧客番号が付いたものが送られるし、「ああ、うちって100社目なんだな」って推測されちゃうような顧客IDは恥ずかしい。
0444NAME IS NULL
垢版 |
2006/09/01(金) 01:41:11ID:???
設計するのに使ってるツールとか教えて!
XEADとかJude、ObjectBrowserERあたりがよさげなんですが!!
今試そうと思ってるのがOracle JDeveloper10g!!!
0445NAME IS NULL
垢版 |
2006/09/01(金) 17:52:21ID:???
DBDesigner4最強。
XEADだけは勘弁
0446NAME IS NULL
垢版 |
2006/09/02(土) 23:04:56ID:???
>>445 さんへ
XEADは、どこら辺が駄目だと思いますか?
0447NAME IS NULL
垢版 |
2006/09/16(土) 01:13:27ID:???
ナチュラルキーとサロゲートキーって使い分けどうしてますか?
顧客マスタとか商品マスタみたいなのはナチュラルキー、
受注TRとか売上TRはサロゲートキー、
仕様変更が多そうならサロゲートキー多め、
ERモデリングツール使うならナチュラルキー、
ORマッピング使うならサロゲートキー、
こなかじ?
0448NAME IS NULL
垢版 |
2006/09/16(土) 01:23:02ID:???
知るか。何でもいいよ。
あれもアホな議論だったな
0449NAME IS NULL
垢版 |
2006/09/17(日) 01:56:26ID:???
佐藤 正美氏が提唱する「T字形ER」ってどうなんでしょ。会社の上司が
信者(?)で何が何でも導入したいみたいで。。。本を読んでみたけど
文章表現は下手(だと思った)だし理論にしても判り辛いような。。。
数千人規模の会社の基幹業務構築のモデリングには大丈夫なのかな〜?
と思ってます(例えば数年後には理論自体廃れてるとか・・・)。
0450NAME IS NULL
垢版 |
2006/09/17(日) 02:41:45ID:???
>>449
いいところはresource概念とevent概念云々のところぐらいか
あとはちょっと・・・。identifierの扱いがアレなんで、あの理論をそのまま適用するのは
実際的ではないと思う
0451NAME IS NULL
垢版 |
2006/09/17(日) 04:11:40ID:???
データモデリングなんて勘でやるのが一番いい。
主キーと関連だけしっかり抑えとけば大概上手くいく。

大事なのは、間違ったモデリングなんてないと知っておくこと
0452NAME IS NULL
垢版 |
2006/09/17(日) 16:38:22ID:???
勘でやる時点でだめだめな悪寒。

いろんなモデリングのシミュレーションソフトとかあれば設計時に検証しやすくて便利なのにな。
0453NAME IS NULL
垢版 |
2006/09/18(月) 11:28:44ID:???
>>449
基幹ではないが、大手での採用例はあり。
和光市の某自動車メーカとか、麹町の某信販会社とか。
ただ、T字型を使ったプロジェクトで試行錯誤した経験者がいない状態で
本読んだだけでいきなり実地の大規模システムに適用しようとすると
多大な困難が待ち受けていそうな悪寒が…
0454TM使ってるよ
垢版 |
2006/09/20(水) 14:17:52ID:6C6LnzZC
TM(T字形ER手法)は、CoddのRDBMに始まって、正規化だけでは解決しない問題を検討している間に、
業務系のシステムでは「コード体系」を使って分析するのが便利って便法を思いついたりしながら発展して
きましたが、根っこの部分ではオブジェクト指向におけるドメインモデリングと繋がっています。
なので、#453 の方が言われる様に、本を読んだだけで見よう見真似で始めるのは、少し辛いでしょう。
できれば、本人から習うことが可能なので、それが一番だと思います。
http://www.sdi-net.co.jp/ に行ってみましょう。
0455NAME IS NULL
垢版 |
2006/09/23(土) 17:10:07ID:???

HP見てみたけど、本当大丈夫なの?かなり素人っぽいHPで
すが。コンサルとかやってるんんだったらもうちょっとマシな
HPにした方がいいような。。。
それに実績も書いてないし。>>453 の和光や麹町の会社ではどれだけ
TMにより実績がでたのかな?
コンサルやるなら会社(?)の規模も知りたいなー
0456NAME IS NULL
垢版 |
2006/09/24(日) 12:10:14ID:???
麹町では使ってはいるが「お絵かきソフト」程度の使われ方。
「Visioの方が書きやすいじゃん」ってノリだから「TMを
導入してビジネスの強み・弱み・・・」なんて程遠い状態。
0457NAME IS NULL
垢版 |
2006/09/24(日) 20:16:59ID:???
>>455
WebPages見てそういう感想抱いたのなら、TMとは出会わなかったことにした方が多分幸せになれる。
いや、煽りや皮肉ではなく、本音ベースの話。
感覚的な「合う」「合わない」っていうのは結構重要な要素かと。
0458NAME IS NULL
垢版 |
2006/09/25(月) 00:31:01ID:???
HP見たけど「1,000,000 ステッフ゜ 規模の システム であれば、10数名で、6 ヶ月以内に導入する。」
ってのは凄いなー。
事例とかあるといいけどね。
0459NAME IS NULL
垢版 |
2006/09/25(月) 01:10:08ID:???
優秀なエンジニアが集まればとか、そのための費用を出せるならとか前提条件いっぱいだろ?
まあ優秀なエンジニア集めれば、別に何でも短納期でできそうな悪寒。
そういう論点のすり替えをして一儲けするのがコンサルと言えばそうだけど。
0460NAME IS NULL
垢版 |
2006/09/25(月) 10:26:51ID:???
>>458
ステップってコード量だよねぇ?
でコンサルが開発するわけじゃないだろうし、有効なメトリクスなのかね?
コンサルとしてはそういうところ大事だと思うんだが。
0461NAME IS NULL
垢版 |
2006/09/26(火) 00:04:22ID:???
画面数とかテーブル数とかユースケース数とかでないとピンと来ない
0462yossy
垢版 |
2006/09/26(火) 00:38:05ID:3/C3qjqe
皆様始めまして。
DBDesigner4の使い勝手が良かったので日本語化してみました(需要アルカナ・・・)
http://dbdesigner.iimp.jp/
使ってみてご意見いただければと存じ上げます。
Delphiはあまり使ったことがないので安定度が下がっているかもしれません。。
あと、、まだWindows版しかコンパイルしていないです・・・。
Linuxはあまり慣れていないもので。。すみません。。。
0463NAME IS NULL
垢版 |
2006/10/02(月) 23:45:41ID:???
>447

主キーベースのERDを作成する段階では、ナチュラルキーでモデリングし始め、
全属性ERDを作成する段階で、最終的にサロゲートキーに再設計してる。
(最初はナチュラルキーの方がわかりやすいので・・・)

全部サロゲートキーにしてる理由は、
(1)安定性の確保
  :将来のシステム改善などでの主キー属性の設計変更を、極力抑える。
   (候補キー自体が安定していることが前提なのに、変わることあるから・・・)
(2)データへのアクセスコストを抑えたい
  :ナチュラルキーだと3つ以上のコンポジットとなってしまう場合がある(特に連関エンティティ)
(3)ポリシーの統一
  :全エンティティを同じポリシーで設計するため全部サロゲートキー

なんて言い訳でサロゲートキーにしてる。
0464NAME IS NULL
垢版 |
2006/10/02(月) 23:56:56ID:???
>>463
>候補キー自体が安定していることが前提なのに、変わることあるから・・・
間違えた。
候補キー -> 主キー
0466NAME IS NULL
垢版 |
2007/05/15(火) 19:54:55ID:/Spdz0dJ
FFの武器を管理したいと思っています。
次回のバージョンアップで他のシリーズも同一のテーブルで管理できるようにしたいです。

現在
武器 (武器ID, 攻撃力, 入手場所)

案1
武器テーブルにシリーズNoを追加して、シリーズNo+武器IDを主キーにする。
シリーズNo | 武器ID
FF1 | 001
FF1 | 002
FF2 | 001
FF3 | 001
...

案2
武器テーブルにシリーズNoを追加して、武器IDは主キーのまま通し番号とする
武器ID | シリーズNo
001 | FF1
002 | FF1
003 | FF2
004 | FF3

案1だと枝番の作成がめんどうなのですが、きれいにナンバリングされる。
案2だとキーの作成は簡単だが、データの入力順を間違えると気持ち悪いナンバリングになってしまう。

どのような場合にどちらがいいか教えてください。
0467NAME IS NULL
垢版 |
2007/05/15(火) 23:21:27ID:???
>466
複合キー列への外部キー設定は列が増えてしまって、
子表が増えるほど面倒になるから案2がいいなぁ。どうせ
武器IDなんてもとより意味のあるものじゃないんだし。


もういっそ武器IDは乱数を採番するようにしちゃえば気にならないよ。
0468NAME IS NULL
垢版 |
2007/05/16(水) 03:44:39ID:???
1の方がデータ移行は楽そうだな。
最近の流行は2か。アプリケーションフレームワーク的に2のようになってないとあかんものがあるな。

武器リストだと表示順ってのも気にしたいだろうから、
1のテーブルにさらにid列を一つ追加して、
武器IDは表示順的な意味を持たせるのもありかも
0469NAME IS NULL
垢版 |
2007/07/08(日) 18:42:56ID:???
MySQLのDBDesignerに相当するpostgresqlのツールってありますか?
それとも、postgresqlをodbcで接続して、DBDesignerを使っても、幸せになれますか?
0470NAME IS NULL
垢版 |
2007/08/07(火) 20:28:30ID:bIEMzxGi
このスレでも何回か見かけるが、簿記の知識がSEにも要求される場合がある。
独学で簿記を勉強しようとすると、書籍を購入して勉強となりがちだが、
項目が羅列してあり説明は最小限のような簿記の書籍ではなかなか理解は進まない(俺だけか)。
簿記の書籍は不親切であり、そのために資格学校が存続できてる気がする。
資格学校に通わなくても資格学校の通信教育等もあるし、それもそんなに高くはない。

さらに講義形式の勉強で一番手軽なのは、資格学校が出版しているDVDビデオの教材がある。
例えば、以下のような教材がある。

合格テキスト講義DVD日商簿記3級 商業簿記 Ver.4.0(10,500円)
DVD6枚組 TAC出版

俺は本屋で買ったが、amazonにもある。講師は違うが2級もある。
これと対になってる書籍(テキスト)も別に売ってるが、なくても特に困らない。
DVDの講義なので、好きなときに何回でも見れる。
これを見てしまうと、いかに市販の書籍で学ぶことが能率が悪いかということがよく分かる。
おそらく簿記の勉強は書籍ではなくて人の話を聞いて学ぶのが一番よいのでは
ないかと思う。「要はこういうこと」みたいな言葉やくどいぐらいの説明は
なかなか書籍には載りにくい。このDVDのテキストも同じ欠点がある。

例えば減価償却累計額について簿記上の具体例を含めて詳しい説明を書籍で
探そうとすると結構大変だと思う。また、講師がしゃべってくれるわけで漢字の
読み方も問題なくなる。この3級の講師は大変よいと思う。きっちりとよく話してくれている。

スレ違いすまん。

0471NAME IS NULL
垢版 |
2007/08/08(水) 00:35:59ID:???
まぁ、SEが片手間に勉強するのにむいた教材は確かに少ないかもしれんけど、
たかが3級レベルで分かりやすいも分かりにくいも無いと思うんだが・・・
0472NAME IS NULL
垢版 |
2007/08/08(水) 21:18:53ID:???
まったくその通り。10日でわかるとかそういうので十分、
実際は1週間足らず勉強してケアレスミスで落として
90点代後半取れた。
0473NAME IS NULL
垢版 |
2007/08/09(木) 22:20:09ID:MI2mCbx1
初心者です。
物理データモデルの「内部スキーマ」とは、具体的にRDBMSで
いうところの、どのようなオブジェクトなのでしょうか?

どなたか御教授ねがいます。
0474NAME IS NULL
垢版 |
2007/08/10(金) 02:23:03ID:???
テーブルとかカラムとか
0475NAME IS NULL
垢版 |
2007/08/10(金) 22:15:11ID:???
>>473
ANSI/SPARC 3層スキーマのことなら、
概念スキーマ:テーブル
外部スキーマ:VIEW
内部スキーマ:物理ファイル定義(oracleだとセグメントかな)
0476473
垢版 |
2007/08/11(土) 00:56:13ID:Fq8lPKBO
>>475さん
ありがとうございます。
ANSI/SPARC 3層スキーマに関してですが、SQL Server 2000
について「内部スキーマ」なるものが、どのようなオブジェクトを
指すのかご存知なら教えていただけますか?

宜しくお願いします。
0477NAME IS NULL
垢版 |
2007/08/11(土) 09:26:15ID:???
>>476
内部スキーマについて、oracleだとセグメントって書いたけど、
データベース上の特定のオブジェクトや構造を指している
というよりも、索引からセグメントからデータファイルまでの
物理構造のことを指してる。
SQL Serverは詳しくないのだけど、同じようにセグメント
(oracleでは表領域に相当)からデータベースデバイス?までの
物理構造のことを指しているのではないかな。
0478NAME IS NULL
垢版 |
2007/11/19(月) 21:31:13ID:YgXjo0NC
次のケースの一般的なデータモデルをご教授ください。
長文で申し訳ありませんが宜しくお願いします。

<前提条件>
製造業向けの部品加工を想定(在庫関連の処理は無し)
製品・部品・工程・実績の4つのエンティティがあるとして、、、

製品 … 製品というよりは製造指示Noのようなもの
部品 … 製品を構成する部品です。(※一般的なBOMのような親品目,子品目を再帰で保持するような複雑な構造ではない)
工程 … 部品を加工するための加工工程手順です。(手順1:旋盤, 手順2:マシニング...)
実績 … 加工工程に対する実績(労務費、労務時間)

4つのエンティティの関連は次のような階層構造を考えています。
(※この考え方がおかしい場合はご指摘ください)

 製品 → 部品 → 工程 → 実績
(1:n) (1:n) (1:n)

部品には材料や購入品といった部品区分があり、データ属性が異なるため、
部品をスーパータイプ、材料・購入品をサブタイプで持たせようと思っています。
 製品 → +部品(部品id(PK), 部品区分...) → 工程 → 実績

+材料(部品id(PK), 仕入先cd(FK), 寸法...)
  +購入品(部品id(PK), 仕入先cd(FK), 購入品品番(FK)...)

*** 質問1***
各エンティティの主キー(PK)をどのように設けるのが一般的なのでしょうか?
上記のようなデータ構造の場合の一般的な主キーの設け方をご教授ください。
今考えているのが@とAの方法です。

@各エンティティに単独の主キー(PK)を設けて、親への参照キー(FK)をそれぞれ持たせる。
製品: 製品id(PK), 製造指示No, 型番...
部品: 部品id(PK), 製品id(FK), 部品区分, 部品cd, 部品数...
材料: 部品id(PK), 製品id(FK), 仕入先cd(FK), 寸法...
購入品: 部品id(PK), 製品id(FK), 仕入先cd(FK), 購入品品番(FK)...
工程: 工程id(PK), 製品id(FK), 部品id(FK), 工程cd, 工程手順No, 標準時間, 数量...
実績: 実績id(PK), 製品id(FK), 部品id(FK), 工程id(FK), 加工状況flg, 数量, 作業者cd, 機械cd, 着手日, 労務費, 労務時間...

A各エンティティの主キー(PK)を複合キーで持たせる。
製品: {製品id}(PK), 製造指示No, 型番...
部品: {製品id, 部品id}(PK), 部品区分, 部品cd, 部品数...
材料: {製品id, 部品id}(PK), 仕入先cd(FK), 寸法...
購入品: {製品id, 部品id}(PK), 仕入先cd(FK), 購入品品番(FK)...
工程: {製品id, 部品id, 工程id}(PK), 工程cd, 工程手順No, 標準時間, 数量...
実績: {製品id, 部品id, 工程id, 実績id}(PK), 加工状況flg, 数量, 作業者cd, 機械cd, 着手日, 労務費, 労務時間...

そもそも考え方がおかしい場合はご指摘ください。
0479NAME IS NULL
垢版 |
2007/11/19(月) 21:32:24ID:YgXjo0NC
続きです。
*** 質問2***
次の原価をリアルタイムで把握したい場合には原価データをどのように保持するのが一般的なのでしょうか?
(※ここでは外注費は無いもとする)

 1.製品別原価(製品別の材料費計+購入品費計+労務費計)
 2.部品別原価(部品別の材料費計+購入品費計+労務費計)
 3.工程別原価(工程別の労務費計)

考えているのは次のとおりです。

@製品エンティティに"材料費計", "購入品費計", "労務費計"のデータ項目を持たせる。
A部品のスーパータイプエンティティに"材料費計", "購入品費計", "労務費計" のデータ項目を持たせる。
B工程エンティティに"労務費計"のデータ項目を持たせる。

各計データの更新はトリガーやストアドにて行う


そもそも考え方がおかしい場合はご指摘ください。
以上、宜しくお願いします。
0480NAME IS NULL
垢版 |
2007/11/20(火) 02:27:57ID:???
質問1

正規化をきちんとするなら、@の材料と購入品には製品idは入らないはず。
俺なら他のテーブルとの一貫性を保つために

材料: 材料id(PK), 部品id(FK), 仕入先cd(FK), 寸法...
購入品: 購入品id(PK), 部品id(FK), 仕入先cd(FK), 購入品品番(FK)...

とする。でも、部品idにユニーク制約をつけなきゃいけないのでそこを手間と感じるかどうか。

@かAかはどっちでもいいけど、最近は@が主流。
処理側のフレームワークと言うかプログラムロジックに便利な方を選択。

質問2

集計用のテーブルを別に作るべき。
完全なリアルタイムにせずに、例えば10分ごとに集計バッチをまわすとか、
Oracleならマテビューを使うとかする
0481NAME IS NULL
垢版 |
2007/11/20(火) 14:49:55ID:/GHn6NrO
>>480
遅くなりまして申し訳ございません。
レスありがとうございました。

質問1について
なるほど、確かにデータ編集時に、複合主キーより単独主キーでアクセスした方が
SQL文も簡単に記述でき、何かと便利が良さそうですね。

教えて頂いた方法で実装しようと思うのですが、
@の方法(各エンティティに単独の主キー(PK)を設けて、親への参照キー(FK)をそれぞれ持たせる)で
きちんとした正規化を行う場合、工程の製品id(FK) と 実績の製品id(FK), 部品id(FK)も要らなくなり、
次のようになるはず?(1階層上の親id のみ 持たせる)
この理解で問題ないでしょうか?

製品: 製品id(PK), 製造指示No, 型番...
部品: 部品id(PK), 製品id(FK), 部品区分, 部品cd, 部品数...
材料: 材料id(PK), 部品id(FK), 仕入先cd(FK), 寸法...
購入品: 購入品id(PK), 部品id(FK), 仕入先cd(FK), 購入品品番(FK)...
工程: 工程id(PK), 部品id(FK), 工程cd, 工程手順No, 標準時間, 数量...
実績: 実績id(PK), 工程id(FK), 加工状況flg, 数量, 作業者cd, 機械cd, 着手日, 労務費, 労務時間...

もしくは、材料id, 購入品id は持たず、次のようにする。

製品: 製品id(PK), 製造指示No, 型番...
部品: 部品id(PK), 製品id(FK), 部品区分, 部品cd, 部品数...
材料: 部品id(PK), 仕入先cd(FK), 寸法...
購入品: 部品id(PK), 仕入先cd(FK), 購入品品番(FK)...
工程: 工程id(PK), 部品id(FK), 工程cd, 工程手順No, 標準時間, 数量...
実績: 実績id(PK), 工程id(FK), 加工状況flg, 数量, 作業者cd, 機械cd, 着手日, 労務費, 労務時間...
0482NAME IS NULL
垢版 |
2007/11/20(火) 14:51:01ID:/GHn6NrO
続きです。
>>480
遅くなりまして申し訳ございません。
レスありがとうございました。

質問2について
やはり集計用の別テーブルを設けた方がいいのですね。
今回のケースで集計テーブルを用いるとすれば、次のような感じでよろしいですか?
集計元テーブルと集計先テーブルは(1:1の関係)になる。
また本来は集計テーブルに主キーの項目として集計日を含むと思うのですが、
今回は集計日が要らないので外します。

製品: 製品id(PK)... → 製品別原価: 製品id(PK), 材料費計, 購入品費計, 労務費計...
部品: 部品id(PK)... → 部品別原価: 部品id(PK), 材料費計, 購入品費計, 労務費計...
工程: 工程id(PK)... → 工程別原価: 工程id(PK), 労務費計...

もしくは、集計テーブルにも単独主キーを設けて、次のようにする。

製品: 製品id(PK)... → 製品別原価: 製品別原価id(PK), 製品id(FK), 材料費計, 購入品費計, 労務費計...
部品: 部品id(PK)... → 部品別原価: 部品別原価id(PK), 部品id(FK), 材料費計, 購入品費計, 労務費計...
工程: 工程id(PK)... → 工程別原価: 工程別原価id(PK), 工程id(FK), 労務費計...


以上、質問ばかりで申し訳ございませんが
宜しくお願いします。
0483NAME IS NULL
垢版 |
2007/11/20(火) 20:40:10ID:wWhiZNbu
パソコンショップならここ!!
http://want-pc.com
0486NAME IS NULL
垢版 |
2007/11/21(水) 00:24:58ID:???
>>481
OKと思われ。

>>482
OKと思われ。まぁ、こっちは単独主キー無くてもいいかも知れんが
0487NAME IS NULL
垢版 |
2007/11/21(水) 10:43:07ID:???
>>486
レスありがとうございました。
これでスッキリしましたので先に進めそうです!!
0493NAME IS NULL
垢版 |
2008/02/10(日) 12:22:27ID:???
MySQL4.1、5.0でも DBDesignerは使えますか?

>>384 に同じ現象が書かれているのですが・・・
バージョンアップされてないからなぁ^^;
0494NAME IS NULL
垢版 |
2008/05/23(金) 04:29:26ID:P38jVWZR
A C
0496NAME IS NULL
垢版 |
2008/07/07(月) 17:23:41ID:???
住所録のデータベースのモデルです。
取引先の会社とその担当者、お客様とその家族、
と、全部で4つのテーブルを作成しました。
それぞれのテーブルには、名前や電話や住所などの
列を並べました。

そこで疑問になったのが。
取引先の住所と担当者の住所は、共通する事もある(し違う事もある)。
家族の住所と個人の住所は、共通する事もある(し違う事もある)。
と、考えると。
住所部分のみでテーブルを作成して、4つのテーブルから
参照した方がいいのかな?とも思ったのですが、いかがでしょう?
0497NAME IS NULL
垢版 |
2008/07/07(月) 22:08:49ID:???
そうね。それなら取引先が複数住所もってるケースにも対応できるね
0498NAME IS NULL
垢版 |
2008/07/07(月) 22:38:19ID:???
取引先が複数住所を持ってるケースは考えていませんでしたが。
確かにおっしゃる通りで、良さそうですね。

また、営業所が移転した場合や家族が引っ越しした時に、
同じ住所テーブルを示していれば、個人の住所も一括で
修正されますね。ありがとうございました。
0499NAME IS NULL
垢版 |
2008/09/06(土) 12:04:21ID:???
1レコードに開始/終了時刻を持って「状態」を記録するメリットって何?
開始/終了イベントテーブルにそれぞれ発生時刻を記録するほうがいいと思うんだけど
0500NAME IS NULL
垢版 |
2008/09/08(月) 00:51:51ID:???
>>499
イベントテーブルにそれぞれ記録するほうがいいのは
たとえばどんな時でしょうか?
0501NAME IS NULL
垢版 |
2008/09/08(月) 23:23:38ID:???
>>499
抽出したエンティティの意味的な違いに優劣はないから実用上のメリットで言うと、
所要時間を求めるようなクエリでjoinを節約できるとか。
逆に挿入/更新でコストはかかっているわけで、メリット/デメリットともに
事前集計表と似たようなもの。
0502NAME IS NULL
垢版 |
2008/12/23(火) 20:52:33ID:GasTPqXo
保守
0503NAME IS NULL
垢版 |
2008/12/28(日) 05:07:16ID:???
状態が欲しい場合も無く無いと思うけどなあ。


導入事例ってあんまり当てにならないのか。まあそもそも営業資料だしね。
導入されても、実際十分に活用されてるかどうかや、現在も使われてるかどうかはわからないしなあ。
0504NAME IS NULL
垢版 |
2009/01/17(土) 01:16:45ID:jMspYNZv
町場の工務店用データベース作成のためこんな感じのER図を作成してみたのですが
もし問題があれば指摘していただけるとありがたいです。 
http://niyaniya.info/pic/img/2186.jpg

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

※属性なしで、エンティティ名だけでリレーションシップを
 考えた方がわかりやすいですよ。
0506NAME IS NULL
垢版 |
2009/01/18(日) 03:01:18ID:rdZV1j35
>>505
レスありがとうです!

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

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

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

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

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

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

0507NAME IS NULL
垢版 |
2009/01/18(日) 04:03:52ID:???
明細テーブルにも主キーはつけるべきだよ。
この場合は表示順を主キーにすりゃいいんじゃないかな。

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

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

主キー入ってないテーブルがあること以外は、大体OKそうに見えるね。
>>505は見当はずれだから気にしないほうがいい
0508NAME IS NULL
垢版 |
2009/01/18(日) 04:09:07ID:???
> この場合は表示順を主キーにすりゃいいんじゃないかな。

ごめん、親テーブルの主キー+表示順というつもりだった。
たとえば見積明細では(見積ID、表示順)を主キーにする
0509NAME IS NULL
垢版 |
2009/01/18(日) 04:25:30ID:???
>>506
505です。今日は何故か眠れないのでレス
ちょっと説明がまずかったみたいなので、まず用語から。
※文中の用語はググってね。
エンティティ=テーブル
属性=列項目
主キー=(簡単に言うと)一意に行を特定できる列項目

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

(2)も同様。

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

以上
0510NAME IS NULL
垢版 |
2009/01/18(日) 04:28:57ID:???
>>507
どこが見当違いか、指摘してもらえるとうれしいね
0511NAME IS NULL
垢版 |
2009/01/18(日) 04:43:29ID:???
>>507
もしかして、(1)でサブタイプって書いたことを見当違いって
言ってるのかな?
エンティティ名だけ見ると、第2正規形を意識したと思えたけど、
もしかして主キーが同じで、あえて分けたのかと深読みしただけ
なんだけどね。

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

よろしく。
0512NAME IS NULL
垢版 |
2009/01/18(日) 12:41:42ID:???
あのさ、「明細」ってかいてあんのにピンと来ないようじゃお話にならないと思うよ。
0513506
垢版 |
2009/01/18(日) 20:01:21ID:???
>>507
>明細テーブルにも主キーはつけるべきだよ。
この場合は表示順を主キーにすりゃいいんじゃないかな

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

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

いえいえ皆さんのアドバイスは大変勉強になります。 
0514506
垢版 |
2009/01/18(日) 20:11:51ID:???
>>509
>「見積明細」テーブルの主キーは、”見積ID”と、明細を識別する”明細ID"
みたいなのが必要。(用語的には第2正規形)

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

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

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



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

スレ汚しスマソ。
0517506
垢版 |
2009/01/19(月) 20:38:23ID:???
みなさんのご指摘を参考に最終的に↓のように仕上げてみました。これでなんとか
やってみようと思います。 どうもありがとうございましたです!
http://niyaniya.info/pic/img/2219.jpg
0518NAME IS NULL
垢版 |
2009/02/01(日) 03:55:40ID:???
業務知識が無いと、まともな設計が出来ない見本だな。
運用で不具合出まくるだろうなあwww
0519NAME IS NULL
垢版 |
2009/06/04(木) 09:25:50ID:w6Hljn46
五階層まで登録できる工事の見積システムのデータモデリングをしてるのですが
↓こんなかんじでどうでしょう^^;  

http://imepita.jp/20090604/333030
項目A→項目B→項目C→項目D→項目E と具体的になっていく感じです

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

項目Aによって必要な階層がことなるので動的に階層を変更できればいいのですが、、
0520NAME IS NULL
垢版 |
2009/06/07(日) 19:19:03ID:???
>519
階層構造を柔軟にとか考えると、
所要量展開、再帰、LLC、
部品展開、原価計算、
といったところをある程度考慮して取り入れながら
設計するのかなと思う。
これらでぐぐってみてもよいかと。
0521NAME IS NULL
垢版 |
2009/06/09(火) 23:40:48ID:jbiexGaF
>>519
その前に親子関係は1対多なんだよね?
何もテーブルを幾つも作らなくても、
子情報が主キーでそこに親情報が従属するような
再帰的な1テーブルで済まないの?

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

0524NAME IS NULL
垢版 |
2013/03/02(土) 18:51:51.23ID:???
また必要とあれば語るだろう。

あなたはどうなのか。
0525NAME IS NULL
垢版 |
2013/03/15(金) 16:29:53.95ID:2duRrtZr
      _
      |O\
      |   \ キリキリ
    ∧|∧   \ キリキリ
ググゥ>(;⌒ヽ    \
    ∪  |     (~)
     ∪∪   γ´⌒`ヽ
     ) )    {i:i:i:i:i:i:i:i:}
     ( (    ( ´・ω・)、
           (O ⌒ )O
            ⊂_)∪
0526NAME IS NULL
垢版 |
2013/03/20(水) 07:38:57.93ID:vIKc7Kkm
※本投稿の拡散歓迎です。
違法派遣(偽装請負・多重派遣・偽装出向・事前面接等)についての刑事罰
【告訴権者=業務委託、準委任、共同受注、業務請負契約および特定派遣(契約・正規)、一般派遣、正規社員】

@職業安定法第44条の労働者供給事業の禁止規定に違反(1年以下の懲役または20万円以下の罰金)
 ■偽装請負・多重派遣・偽装出向・多重出向
 ■事前面接(顔合わせ・面談・職場見学等)と履歴書・職務経歴書・スキルシート等提出による労働者の特定(※)
(音声録音で立証可能)
A労働基準法第6条(中間搾取の禁止) (1年以下の懲役又は50万円以下の罰金)
 ■多重派遣・多重出向

※違法派遣(派遣労働者の特定)→派遣法で認められた派遣労働者ではない→労働者供給事業→職業安定法44条違反というの
が前提となる法解釈となります。派遣法における罰則が軽微なのは法律の不備や労働者軽視などが原因ではありません。
違法派遣は全て職業安定法44条で裁くことが可能なため、刑罰の重複を避けるために派遣法には軽微な罰則(主に裁量行政による)しかないのです。

使用者に有利な民事訴訟や労働関係諸局への通報等の対極にあるのが書面(告訴状)による刑事告訴(※告訴先は検察の直告班)です。
労働関係諸局への通報・斡旋による軽微な「適正化」や監督・指導に対して、法律に定められた刑事罰を問うことになり、
違法派遣業者にとって有罪は考えられる限り最大の処罰となります。同時に刑事罰を受けた
担当者が取引先に与える悪印象を考慮すれば、通常会社側は告訴が受理された時点で告訴取り下げに
動くのが妥当でしょう。懲役、前科がつく刑罰が下される可能性から、告訴取り下げの和解金は高額となることが多いのです。

告訴の流れとしては、

刑事告訴⇒告訴受理⇒告訴取下げ要請⇒取下げ和解金入金⇒告訴取下げ

となります。告訴の懲役刑適応は犯罪者個人に対してのみですので、告訴する対象は

派遣先・派遣元 社長
派遣先・派遣元 担当者・責任者・管理役員・取締役
派遣先・派遣元 人事管理担当者・人事管理役員・取締役

が妥当です。刑事告訴取り下げの和解金額は犯罪者個人と交渉するとよいでしょう。(告訴状は人数分提出する必要あり)
0527NAME IS NULL
垢版 |
2013/03/20(水) 12:33:55.35ID:YfGwk/bV
お知らせ

市原警察署の生活安全課の帰化人創価警官の指導の元、
入学式から2週間ほど、在日の創価学会員を主体とした自称防犯パトロールが、
2週間ほど行われることになりました

生活安全課の指導であることと、パトロールであることは、
絶対に公言してはいけないとの指導も、帰化人創価警官より出ています

期間中は2人組の在日の創価学会員が、頻繁に創価批判者の自宅周辺を、
うろつき回ると思われます
日本人の方は、充分に注意してください
0528NAME IS NULL
垢版 |
2013/11/18(月) 19:50:39.02ID:zznn8NO/
データモデリングと設計って違うの?
0529NAME IS NULL
垢版 |
2013/11/18(月) 22:12:02.83ID:???
設計のほうが(データモデリングよりも)広い用語だろな
つまり、すべてのデータモデリングは設計の一種だけど、
逆は必ずしも真にはならない

データモデリングはDB設計の中でも上流工程の作業を指し「概念設計」とも呼ばれる
具体的には、現実世界の事物をコンピュータの内部表現に近い
エンティティとリレーションの集合で定義する作業になる
そして、これによって完成したモデルを利用するミドルウェアやフレームワークに
合わせて具体化する作業が「実装設計」になる
実装設計が終えれば(詳細設計もしくは)コード設計が待っている
0530NAME IS NULL
垢版 |
2014/10/20(月) 21:31:26.45ID:???
 業務系ってクラスモデリングよりもデータモデリングが主流なんでしょうか?
単に興味本位で聞いただけです。
0531NAME IS NULL
垢版 |
2015/10/17(土) 02:21:58.10ID:BkamhfiH
>>530
業務システムはデータ中心主義だからね。
0532NAME IS NULL
垢版 |
2015/11/16(月) 09:18:55.30ID:xLOuBCtw
パリテロはやっぱりヤラセ!


クライシス・アクターさんがスターダムに! 早くも偽旗作戦の証拠映像が挙がりました!

ボストンテロとパリ襲撃事件テロ両方に居合わせた世界一不運な女性ですw
◆BOOM! Exposed Crisis Actor from Sandy Hook and Boston Bombing found at Paris False Terrorist Attack
https://twitter.com/hotaru123a/status/665888328193937408

ISISに襲撃されたパリのバタクラン劇場のオーナーは2015年9月11日に劇場を売却済み。
https://twitter.com/tokai amada/status/665992523878301696
0534NAME IS NULL
垢版 |
2017/12/29(金) 11:44:21.05ID:dtNZwIie
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

A8RNOMREE3
0535NAME IS NULL
垢版 |
2023/04/01(土) 23:37:40.23ID:???
関わりのないことだ
0536NAME IS NULL
垢版 |
2023/08/18(金) 21:03:18.50ID:???
( ゚Д゚)y \_ ポロッ
0537NAME IS NULL
垢版 |
2023/09/27(水) 13:51:37.31ID:???
最近、友達とボードゲームで盛り上がったんよ
レスを投稿する


ニューススポーツなんでも実況