3

データベースのリファクタリングに興味があります。私は、大量のデータを持たないいくつかのデータベースを扱っています。数 GB で、多くても数十万行です。ただし、数百、場合によっては数百のテーブル、ビュー、sproc、および関数があります。一部の場所では、スキーマを使用した分割と規則の戦略が実装されており、テーブルの所有権/使用状況を確認する際の問題を解決しています。ただし、オブジェクトの結合にはあまり役立っていません。

共有データベースを介した統合は良いことではないと誰もが読んでいますが、少なくともしばらくの間、すべてがデータベースにあるため、非常に生産的なものであることも知っています. オブジェクトに対して行うように、単一責任の原則をデータベースに適用することはありません。

編集:データベースのパフォーマンスに問題がないことを追加する必要があります。テーブルは大きくなく、最大でも数十万行しかありません。実際のデータベース パフォーマンスの問題はありません。ただし、データベースのスキーマ/ロジック/実装が非常に非効率な場合 (たとえば、レポートのデータを前処理するために、結果セットの各行に対してカーソルで sproc を実行する必要がある場合など) は除きます。これらを変更する必要があるとあなたが言う前に、それが要点です。データベースが変更の影響を評価できる状態になくなったため、変更できません。

明らかに、ある時点で「もう十分だ!」と言うでしょう。メッセージ、ETL、アプリケーション層などで接続された複数のデータベースに分割します

問題は、いくつが多すぎるかということです。あなたが気が狂う前に持つことができるsproc/テーブル/関数の数の絶対的な上限は何ですか?

4

2 に答える 2

1

まず、オブジェクト指向の用語でデータベースを考えようとするのをやめます。オブジェクト指向プログラミングの原則は、リレーショナルデータベースには適用されません。

共有データベースは、ビジネスの観点からは非常に優れています。それらの間で転送する必要のある情報を格納する複数のデータベースは、何百ものオブジェクトよりもはるかに複雑になります。エンタープライズアプリケーション間で一貫性のあるデータは貴重です。GECorpとGeneralElectricCorporationが2つのデータベース間で実際に同じエンティティであるかどうかを調整しようとすると、悪夢になる可能性があります。

データベースのリファクタリングは素晴らしい目標ですが、実際には非常に複雑です。対処する必要のある大きなパフォーマンスの問題がある場合、または変更の影響を受ける可能性のあるすべてのコードを特定するプロセスにコミットする意思がない場合を除いて、これを行わないでください。それでも、変更される可能性のあるすべてのコードを知っているかどうかを検討してください(これが、データベースの人々が動的コードを嫌う、嫌う、嫌う理由の1つです!)。

多くの場合、リファクタリングの最良の方法は、変更を追加し、設定された有効期限まで古いフィールドをそのままにして、新しいフィールド、spなどの使用に切り替え始めることです。あなたは年次サイクルにいるので、あなたはそれらの日付を長期間にわたって管理する必要があります。spsが使用されているかどうかを確認するには、不明なspsを特定し、実行するたびにテーブルに挿入するコードを追加します。1年のサイクルを経ても実行されていない場合は、安全に削除できます。spによっては、サイクルが短くなる場合があります。

年に1回しか実行されないものを書いている場合、通常はspの名前に年次という単語を入れます。しかし、それはあなたがいる場所では当てはまらないかもしれませんが、spの関数は、それが定期的にのみ実行されるべきものであるかどうかをあなたに教えてくれるはずです。usp_send email procが1年に1回だけ実行されるとは思いませんが、usp_attendance_reportが頻繁に実行されるとは思わないかもしれません。もちろん、私が言ったように、私はそれをusp_annual_attendance_reportのような名前にしたでしょう、そしてあなたはその種のことを前進させることを考えることができます。

ただし、必要なものを削除しないようにするには、リファクタリングを長いサイクルで実行する必要があることに注意してください。コードがソース管理システムにある場合(そしてすべてのデータベーステーブル、sp、ビュー、UDF、トリガーなどが必要です)、失敗した場合はすぐに元に戻すことができるので、おそらくいくつかのことを排除できます。繰り返しになりますが、オブジェクトを調べて、それらを排除することで発生する可能性のあるリスクを判断します。

もちろん、適切な自動テストが実施されている場合は、開発で何かを削除してテストを実行すると、何かがまだ参照されているかどうかを確認するのに役立ちます。

あなたがリファクタリングする簡単な方法を探しているなら、私はそれを知りません。データベースのリファクタリングは、時間のかかるリスクの高いアクティビティであり、そのために喜んで支払う力に対して十分な改善が見られない可能性があります。

データベースのリファクタリングに関する優れた本は次のとおりです。http://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321293533

于 2009-08-04T21:43:59.687 に答える
0

あなたが言及したことのいずれにも魔法の限界があるかどうかはわかりません. 私は物事を 1 つの場所に保管することを好みます。そのため、いくつかの記録が所定の場所にあり、他の記録が別の場所にあることを覚えておく必要がありません。

このすべての作業があなたのパフォーマンスに影響を与えているかどうか知りたいですか? そうでない場合、なぜそれを変更するのですか?なんらかのひどい方法でパフォーマンスに影響を与えない限り、顧客はあなたの仕事から何の利益も得られません。

新しいマシンを購入したり、データベース サーバー ソフトウェアをアップグレードしたりした場合は、顧客により良いサービスが提供される可能性があります。

于 2009-08-04T19:32:52.680 に答える