none
異なるアプリケーションを、DBを別にするのではなく、同一DB内でスキーマを分けて同居させたいと考えています。懸念点をお聞きしたいです。 RRS feed

  • 質問

  • お世話になっております。

    SQLServer初心者です。初歩的な御質問となってしまい恐縮ですが、ご質問させていただきたいです。

    別アプリケーションをDBを分けるのではなく、同一DBでスキーマをわけることで運用できないかと考えております。

    調べたところ、技術的には可能のように思えるのですが、

    そもそもスキーマは、「権限をユーザーごとに分けられるようにするための仕組み」だと理解しており、

    今回やろうとしていることと、用途が異なっていると認識しております。

    そのため、予期せぬところで事故に繋がらないか懸念しております

    (例:DB内で1つしか存在しないテーブルがあり、複数アプリケーションで共有する場合はXXの懸念がある等)

    Q1.このような利用をすることもありますでしょうか

    Q2.その場合の懸念点・注意事項

    以上2点をご教示いただけますと幸いです。

    お忙しい中恐縮ですが、ご確認よろしくお願い致します。

    2018年11月26日 8:52

すべての返信

  • 同一DBでスキーマを分けるということは、同一DBでテーブルなどで同じ名前を使いたいとうことでしょうか?
    なぜ同一DBで同居させる必要があるのでしょうか? 同一DBでスキーマを分けて、異なる目的で使用するテーブルを共存させることは一般的にはあまり行わないことですし、他に良い解決方法があるかもしれません。

    Q2に関しては技術的には問題ないと思いますが、データベースの中のテーブルを一覧で見た際など、何か名前付け規則でも設けない限り、ややこしくなりそうです。実際、データベース内のテーブルをアプリケーションがどう使うかはアプリケーション側の問題ですから、極端な話、同一スキーマでも運用することは可能だろうと思います。
    ただ、実際には上に述べたような管理のしやすさや、例えばバックアップから戻す際に片方のアプリケーション用のみ戻すことが簡単にはできないなどの問題があると思います。違う目的のアプリケーション用であれば、粒度を小さくして管理するのが良いように思います。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年11月26日 9:47
  • 質問者さんの想定されている「DB」とはどのようなものでしょうか? 例えばSQL Serverはインスタンスと言って、1台のマシンに独立したインスタンスを複数立てることができます。もちろん異なるインスタンス間では相互には一切影響を与えることなく動作できます。

    その上で、質問者さんは「同一DB内でスキーマを分けて同居させ」ることによって、何を実現したいのでしょうか? つまりどのような目的を達成する手段として同居を考えているのでしょうか?

    2018年11月26日 10:30
  • trapemiya 様

    お世話になっております。ご確認頂き、ありがとうございます。

    同一DBでスキーマを分けるということは、同一DBでテーブルなどで同じ名前を使いたいとうことでしょうか?

    同じテーブル名になるかは定かではないのですが、アプリケーション毎の領域をわけられないかと思っていました。

    VPC(VNet)内のサブネットがDatabase内のスキーマのようなイメージをしております。

    >なぜ同一DBで同居させる必要があるのでしょうか?

    費用の観点でした。Azure SQLDatabaseを利用するのですが、DBを1台たてる事に課金が発生してしまうため、

    なるべく安く抑えられる方法を検討しておりました。

    >ただ、実際には上に述べたような管理のしやすさや、例えばバックアップから戻す際に片方のアプリケーション用のみ戻すことが簡単にはできないなどの問題があると思います。違う目的のアプリケーション用であれば、粒度を小さくして管理するのが良いように思います。

    そうですよね。。これが全てな気がしました。

    費用は抑えられるものの、デメリットとして運用時の手間(アプリケーション毎のテーブルに絞ってDumpとって・・・・など)が発生&それによるオペレーションミスのリスクは、
    結構いたいですね。。

    別DBで管理する方針で話てみます。ありがとうございました!! 


    • 編集済み mokokko 2018年11月27日 1:14
    2018年11月27日 1:11
  • 佐祐里様

    お世話になっております。ご確認頂き、ありがとうございます。

    >質問者さんの想定されている「DB」とはどのようなものでしょうか? 例えばSQL Serverはインスタンスと言って、1台のマシンに独立したインスタンスを複数立てることができます。もちろん異なるインスタンス間では相互には一切影響を与えることなく動作できます。
    >
    どのような目的を達成する手段として同居を考えているのでしょうか?

    Azure SQL Databaseを利用するため、instanceという概念が無いみたい(頂いたリンク先記事の上位で「✖AzureSQLDatabase」となっていることから判断)?なのですが、
    Azure SQL Databaseは1SQLServerに対して、複数SQL Databaseを紐づけることが可能でした。
    ただ、trapemiya様の返信で少し記載してしまいましたが、費用を抑える目的で考えており、
    SQLDatabase1台たてる事に費用が発生してしまうため、スキーマ等を利用して費用を押さえられないか検討していた次第です。

    バックアップ等の運用保守時の対応工数・リスクを考えると
    費用を払ってでもDBで分けたほうがいいと考えました。

    ありがとうございます。


    • 編集済み mokokko 2018年11月27日 1:39
    2018年11月27日 1:21