0

.accdbプロジェクト管理用のAccessを設計しています。プロジェクト契約では、各プロジェクトのマイルストーンの数と、関連する日付が規定されています。マイルストーンの正確な数は、プロジェクトサイズの「いずれか/または」の場合によって異なりますが、最大6つです。

[Forecast]私の雇用主は、各マイルストーンの日付、[Actual]日付、日付を追跡したいと考えています[Paid]。つまり、大規模なプロジェクトには24の日付が関連付けられ、多くの場合重複します(プロジェクトが時間どおりに実行される場合、4つの日付はすべて同じになります)

現在、私はtblMilestones、各マイルストーンにリンクしているFKtblProjectと、各マイルストーンのレコードを持っています。レコードのフィールドとして4つの関連する日付があり、マイルストーンを完了または現在としてマークするフィールドがあります。

非常に無意味なデータを大量に収集、保存、入力しているように感じます。特に、[Forecast]プロジェクトマネージャーからデータを収集する日付(とにかく最も信頼できるデータではありません)。マイルストーンが完了して[Actual]日付が入力されると、[Forecast]日付はかなり無意味になります

契約日を1つのテーブルに入れ、新しいプロジェクトが追加されたときに入力し、変更可能な予測日のレポートテーブルを作成し、ユーザーがマイルストーンを完了としてマークしたときの実際の日付を設定し、トランザクションレコードから支払日を引き出します。

これはより良い設計アプローチですか?dbは小さく、プロジェクトは50未満なので、特に必要な追加のUIの観点から、必要以上に複雑にするだけだと思う​​人もいます。

4

1 に答える 1

0

Take a page out of dimensional data warehouse design and store dates in their own table with a DateID:

DateID  DateValue
------ ----------
     1 2000-01-01
   ...        ...
  9999 2012-12-31

Then turn all your date fields--Forecast, Actual, Paid, etc.--into foreign key references to the date table's DateID field.

To populate the dates table you can go two ways:

  1. Use some VBA to generate a large set of dates, say 2005-01-01 to 2100-12-31, and insert them into the dates tables as a one-time operation.

  2. Whenever someone types in a new date, check the dates table to see if it already exists, and if not, insert it.

Whichever way you do it, you'll obviously need an index on DateValue.

Taking a step back from the actual question, I'm realising that you're trying to fit two different uses into the same database--regular transactional use (as your project management app) and analytical use (tracking several different dates for your milestones--in other words, the milestone completion date is a Slowly Changing Dimension). You might want to consider splitting up these two uses into a regular transactional database and a data warehouse for analysis, and setting up an ETL process to move the data between them.

This way you can track only a milestone completion date and a payment date in your transactional database and the data warehouse will capture changes to the completion date over time. And allow you to do analysis and forecasting on that without bogging down the performance of the transactional (application) database.

于 2013-02-21T04:08:40.473 に答える