Database-Design

最好的數據庫設置來完成日常呼叫的是/否客戶列表

  • December 22, 2021

我會先說我是 Access 的新手,但我已經設法開發了一些基本的數據庫。我對錶達式和宏有一些工作知識,但 VBA 對我來說仍然有點神秘。

我有一個很容易在心理上形象化的問題,但在數據庫中實現似乎是一個相當大的挑戰(至少對我來說:))。我在一個項目中工作,該項目涉及每天打電話給通常是老年人和獨居的客戶,他們有各種健康問題,這使他們可能容易受到突發的不良健康事件的影響。我們需要改進對日常呼叫名冊的管理,這包括根據兩個基本條件確定每天是否需要呼叫客戶:

  1. 客戶已確定不被呼叫的預先選擇的正常日期。(例如周一、週三、週五等不接電話)
  2. 通話日的臨時更改(去醫院,從日期到現在的假期等)。

我最初通過在 Clients 表中合併一個多值欄位來啟動該項目,這使得選擇或取消選擇日期變得容易,但是在開發一個表達式來過濾任何特定日期的列表時,它被證明是一個挑戰。

然後我考慮了一個“DaysOfWeek”表,該表可以由連接表“ClientCallDays”引用。挑戰在於能夠將任何結果查詢解析為每個客戶每天只得到一個結果。

我現在正在考慮為一周中的每一天包括是/否欄位,這很容易在表單或 IIF 查詢中使用 OR 運算符嵌套處理(例如“如果今天介於 dateX 和 dateY 之間或在是/沒有對應Today的欄位,則不呼叫,否則呼叫") 但可能違反規範化。

一般來說,我發現在設計中使用積極的術語不太容易混淆。在這裡,它意味著儲存“可以打電話”的日子而不是“不打電話”的日子。當然,這取決於您,但可能值得考慮。

例如,如果您要完全規範化,您將有一個Person表格和一個Day帶有值的表格 “Monday”、“Tuesday” .. “Sunday” 和一個Callable帶有 values 的表格(Andy, Monday), (Andy, Tuesday), (Bobbie, Tuesday), (Bobbie, Friday)。我認為出現新工作日的風險足夠小,您可以將這些日子非Person正常化而不必擔心。

然而,走這條路會使您的查詢複雜化,因為您必須明確地將每個“日”列與今天的日期進行比較。如果您使用完全規範化的形式,您可以EXISTS以通用方式使用語法。然後您的查詢變為(在虛擬碼中,抱歉我沒有要測試的 Access 副本)

select Distinct
  Person.Name
from Person
where exists
 (select ..
  from Callable
  where Callable.PersonName = Person.Name
  and Callable.Day = DayName(<your date here>)
and not exists
 (selcet ..
  from Holiday
  where Holiday.StartDate <= <your date here>
  and Holiday.EndDate >= <your date here>
  and Holiday.PersonName = Person.Name)

聽起來您需要一個適當的 CRM (:對於一周中的幾天,我認為您做對了,為一周中的每一天設置一個列,如果某一天是“無呼叫日”,則將其選中。您的查詢將然後說,“好的,今天是星期一,我可以給誰打電話?”。

至於臨時日子(假期等)。您可能只想在呼叫列表的每條記錄上顯示一個備註欄位。這可以在呼叫之前查看並根據註釋的內容進行修改或跳過。

引用自:https://dba.stackexchange.com/questions/108514