2

私の会社で使用されている古いタイムシート アプリケーションがあり、それを asp.net で書き直します。

従業員テーブルのような新しいタイムシート テーブルにリンクできるテーブルは他にもありますが、ここでの主な関心事は Project および Project_Activity テーブルです。

現在のシステムでは、タイムシート テーブルに個別にリンクされた 1 つのプロジェクトとアクティビティ テーブルがあり、ユーザーは特定のプロジェクトで作業したアクティビティ コードの選択に多くの時間を費やさなければなりません。

私は新しいアイデアを思いつきました。プロジェクト マネージャーは、このプロジェクトを開始する前に、プロジェクト テンプレートに記入し、すべてのアクティビティ コードを 1 つのプロジェクトにリンクする必要があります。このように、ユーザーはプロジェクトのみを選択する必要があり、自動的に関連コードが表示されます。

これが論理スキーマの設計です。

このデザインがうまく機能するかどうか知りたいですか?Project_Activity テーブルとタイムシートをリンクしてもよろしいですか?

事業

PK_PROJECT_ID、名前

PROJECT_ACTIVITIES

PK_PA_ID、説明、FK_ACTIVITY_ID、FK_PROJECT_ID

活動

PK_ACTIVITY_ID、
説明

タイムシート

PKID、
EMP_ID、
FK_PK_PA_ID、
DATE、
HOURS

    PROJECT -->  PROJECT_ACTIVITIES <-- ACTIVITIES
                    |
                    |
                    |____TIME_SHEET

注: タイムシート テーブルには、この質問の一部ではない他の多くのフィールドがあります。

4

2 に答える 2

0

私はActivity1つだけを参照できると思いProjectますか?

もしそうなら、あなたは本当にテーブルを必要とせず、テーブルのテーブルProject_Activityに外部キーを置くだけです。ProjectActivity

Activityが複数を参照できる場合、Projectスキーマは正常であり、との間の多対多の関係を効果的に分解していProjectますActivity。:)

于 2012-05-16T19:58:17.003 に答える
0

一般的に、スキーマは問題ありません。読みにくいので、あなたの命名規則は使用しません。完全な言葉を使用しても害はありませんが、それは余談です。

私が変更するのは Timesheet テーブルです。代わりにこれを行います:

PKID,
EMP_ID,
FK_PK_PA_ID,
STARTDATE,
ENDDATE

これにより、特定の時間に誰が何をしていたかを簡単に照会できます。レコードに NULL ENDDATE を持たせて、現在取り組んでいるアクティビティを表示することもできます。

同じ EMP_ID に対して、レコードの STARTDATE と ENDDATE が他のレコードの STARTDATE と ENDDATE の間に決して入らないようにするトリガーを追加します (重複なし)。

于 2012-05-16T20:03:24.607 に答える