データベースの設計方法について
全くの初心者で、いろいろな書籍を参考に販売・在庫管理データベースをつくりたいと勉強しています。
環境はMicrosoft SQL Server 2008 R2 EE をサーバーにインストールして、別のクライアントパソコンから SQL Server Management Studio でデータを作成しています。
データベースとは閉じた空間で、1つのデータベース内で必要なテーブルを全て用意するものと思っていました(参考にした書籍もそうなっていました)。
しかし、ネットでいろいろ調べるとインスタンス内に複数のデータベースを作成し、それらデータベース内のテーブルは相互接続可能出来るみたいでした。
となると、データベースを設計する際
<販売管理データベース>
・顧客情報テーブル
・商品情報テーブル
・在庫テーブル
・単価テーブル
・請求データテーブル
・伝票テーブル
・etc.
と1つのデータベースに全てのテーブルを用意する設計では無く
<販売管理データベース>
・伝票テーブル
・請求データ
・etc.
<顧客情報データベース>
・顧客情報テーブル
・単価テーブル
・etc.
<商品情報データベース>
・商品情報テーブル
・在庫テーブル
・etc.
みたいに、機能ごとにデータベースを分けて、インスタンス単位で1機能(もしくは複数機能の実装)の設計でも良いのでしょうか?
プログラム言語の、プロジェクト=インスタンス、クラス=データベースみたいな考え方が出来ればと思っています。
この方法が正しいのか誤りなのか、そもそも理解に誤りがあるのか全く見当が付きません。
一般的にはどのようにするものなのでしょうか?
投稿日時 - 2017-03-10 10:14:03
個々のデータへのアクセス権をどう管理するかで設計が変わります。
DBを利用するアプリケーションが1つしか無いのであれば1つのDBにテーブルを全て突っ込んでも問題ないでしょう。
しかし複数のアプリケーションが存在する場合、あるアプリケーションは「顧客情報」については閲覧権限だけを与えると言った感じで権限を分けたいケースがありますので、DBを分けておきアプリケーション毎にユーザーを作って、各ユーザーがあるDBについては「閲覧のみ」別のDBは「編集可能」や「アクセス不可」とアクセス権を設定します。
データの種別毎にアクセス権をするとこで、権限の無い人が情報を見てしまったり、改変してしまう事を防げます。
投稿日時 - 2017-03-10 11:27:08
早速の回答有り難うございます。
なるほど!アクセス権を考慮する必要があるのですね。
初めての設計なので、自分一人の事しか考えていなかったのですが、実際に運用する際はいろいろな人が使うことが前提なので、アクセス権の振り分けは必要ですね。
非常に参考になりました。
有り難うございます。
投稿日時 - 2017-03-10 13:17:10
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(4)
>と1つのデータベースに全てのテーブルを用意する設計では無く
1つのデータベースに全てのテーブルを用意する設計を「A」とします。
>機能ごとにデータベースを分けて、インスタンス単位で1機能(もしくは複数機能の実装)の設計
機能ごとにデータベースを分けて、インスタンス単位で1機能の設計を「B」とします。
>この方法が正しいのか誤りなのか、
「AとB、どの方法が正しいか」は「状況による」ので「どっちが正しい」とは断言出来ません。
Aを選ぶべき状況では、Aが正しく、Bは間違い。
Bを選ぶべき状況では、Bが正しく、Aは間違い。
AもBも選べる状況では、AとBのどっちも正しい。
AもBも選べない状況では、AとBのどっちも間違いで、AでもBでもないCが正しい。
>そもそも理解に誤りがあるのか全く見当が付きません。
理解は正しいです。ただ「今、自分が作ろうとしているデータベースが、どういう状況なのかが、理解できてない」だけです。
ただ単に「Aを選ぶべき状況なのか、Bを選ぶべき状況なのか、判らない」だけです。
どっちを選ぶべき状況なのか把握できていないので「AとBのどちらが正しいのか判らない」のです。
で「個人の勉強の為にデータベースを構築している」のであれば「勉強の為に、AとBの両方ともやってみる」が「正しい選択」です。
AとBの両方をやってみて「Aでだけ出来ること、Aでだけ出来ないこと、Bでだけ出来ること、Bでだけ出来ないこと」を習得すれば「状況を正しく判断してどっちを選ぶべきなのか決定する事ができるようになる」でしょう。
それが「勉強」と言うモノです。
今までのような「教科書に書いてある事だけを勉強する」ではダメです。「教科書に書いてあること、書いてないこと、出来る事を全部やってみて、それぞれの特徴を掴む」が「設計の勉強」になります。
>一般的にはどのようにするものなのでしょうか?
「その現場の状況に合わせて設計する」のが一般的です。
で「打ち合わせのたびに、クライアントの言う事(つまり、現場の状況)がコロコロ変わる」ので、SEやプログラマが「もうむりぽ」とか「納期が」とか「5徹しても間にあわねえ」とか叫ぶ事になるのです。
投稿日時 - 2017-03-10 12:29:09
早速の回答有り難うございます。
なるほど、基本的にはどちらの手法でも問題ないということですね。
実のところchie65535さんのおっしゃるとおり状況すら解っておらず、複数のデータベースを作成して1つの機能を作成するのはイケナイ事(イリーガルな事)なのかな?っと思って質問した次第です。
どちらでも問題ないのであれば、複数データベース方式で設計したいと思います。
アドバイス大変参考になりました。
有り難うございます。
投稿日時 - 2017-03-10 13:24:34
ごめんなさい。
難しくて、良く解りません(>_<)
もっと、簡潔に説明して頂けないでしょうか???
いかがでしょうか???
投稿日時 - 2017-03-10 11:03:54
すみません。質問文が解りにくかったですね。
販売・在庫管理の機能を実現するにあたり、1つのデータベースで作成した方が良いのか、複数のデータベースにデータを分散して作成した方が良いのか?
という質問の趣旨です。
投稿日時 - 2017-03-10 13:12:07
早速の回答有り難うございます。
補足コメントに質問内容を簡潔に記しておきます。
投稿日時 - 2017-03-10 13:26:11