2016-03-27 7 views
1

私は、ユーザーが独自のレコードを入力してデフォルトのレコードを上書きできるパターンまたはコードの例を探しています。例えばdbレコードを上書きするためのパターン

休日テーブルのデフォルトレコードは次のようになります。

HolidayName Holiday Date CompanyId 
----------- ------------ --------- 
New Year  01-Jan-2016 NULL 
Day After 02-Jan-2016 NULL 

とユーザーの後、自分の休日(たCompanyId「1234」用)を追加します。

HolidayName Holiday Date CompanyId 
----------- ------------ --------- 
New Year  01-Jan-2016 NULL 
Day After 02-Jan-2016 NULL 
Another Name 01-Jan-2016 1234 
My Holiday 03-Jan-2016 1234 
Joes Holiday 04-Jan-2016 5678 

私が取得することができますどのように

  1. デフォルトの休日(CompanyId = NULLの場合)または
  2. 012の組み合わせの休日の一覧
  3. オーバーライドされた祝日(同じ日付)
  4. さらに、ユーザーによって入力された休日(CompanyID別)が含まれます。企業ID = 1234このよう

:これはどちらかのSQLビュー、クエリまたはC#のコードで行うことができ

HolidayName Holiday Date CompanyId 
----------- ------------ --------- 
Another Name 01-Jan-2016 1234 
Day After 02-Jan-2016 NULL 
My Holiday 03-Jan-2016 1234  

わからない場合。許可されていません

SELECT 
    COALESCE(User.HolidayName, Default.HolidayName) as HolidayName, 
    COALESCE(User.HolidayDate, Default.HolidayDate) as HolidayDate, 
    User.CompanyId 
FROM Holidays as User 
FULL OUTER JOIN (
    SELECT * FROM Holidays WHERE CompanyId IS NULL 
) as Default ON 
    User.HolidayDate = Default.HolidayDate 
WHERE 
    User.CompanyId = 1234 

しかし、:

答えて

1

あなたはもう少しあなたのデータを正規化した場合、それは非常に役立つだろうように思える:

Table: Company 
CompanyId 
--------- 
1234 
5678 

Table: CompanyHoliday 
Id CompanyId HolidayId 
------------------------------------ 
1 1234  3 
2 1234  4 
3 5678  5 

Table: Holiday 
Id OccursOn IsDefault Name 
---------------------------------- 
1 01-01-2016 1   New Year 
2 01-02-2016 1   Day After 
3 01-01-2016 0   Another Name 
4 01-03-2016 0   My Holiday 
5 01-04-2016 0   Joes Holiday 

次に、新しい会社を作成述べたMark Brackett、として、CompanyHoliday中のために関連するレコード(複数可)を作成します既定の休日の新しい会社のテーブル。

1

(あなただけの休日を追加したり、既存の名前を変更するユーザーを示しているので)あなたの特定のケースでは、あなただけの完全な日付に参加するんだろうがユーザーを削除休日。あなたはIsDeletedフラグ付きのユーザーホリデーを作成することでそれを解決できますが、個人的には、おそらくもっと単純で柔軟な初期化時コピールーチンを選択することになります。将来新しい "デフォルト"の休日を展開する場合は、いくつかのマージコードが必要ですが、それはかなり簡単です。

関連する問題