Terminology
具有“生效日期”列的表是否有術語?
我使用的系統使用了很多表,這些表的主鍵包括
- 另一個表的外鍵和
- 指示記錄變為/變為“活動”的日期的列。
範例表:
employee (primary key is employee_id) employee_id INT hire_date DATE employee_salary (primary key is employee_id, start_date) employee_id INT (foreign keyed to employee.employee_id) start_date DATE salary TINYINT
在我們的應用程序 UI 中查看員工時,我們將顯示所有資訊
employee
,無論哪條employee_salary
記錄的開始日期最近在我們感興趣的日期之前。在我的工作組中,我們將
employee
稱為“基本”表和employee_salary
“重複”表,因為我們認為薪水只是“基本”實體即員工的一個方面。我們還說該employee_salary
表使用“生效日期”。但這些似乎並不是廣泛使用的術語。有沒有標準條款
- 表示實體的表,以及
- 代表這些實體之一的變化方面的表?
Temporal Table 或 History Table 可能是您正在尋找的術語。通常,您還會在表中看到一個可為空的“結束日期”列。
在數據倉庫環境中,這是“類型 2 漸變維度”的一種形式。“緩慢變化的維度”(SCD)是一個包含描述性資訊(行話中的“維度”)的表格,它會周期性地而不是不斷地變化。一個典型的例子是客戶:他們可以經常更改姓名和地址,以至於您需要處理它,但不會頻繁到您應該記錄每筆交易的資訊。
“Type-2”是指處理 SCD 的特定方式,即您的方式:每次發生更改時創建一個新記錄,並帶有生效日期(通常是結束日期)。
標記最新記錄是很常見的;例如:
StartDate DATETIME NOT NULL, EndDate DATETIME, IsCurrent AS CASE WHEN EndDate IS NULL THEN 1 ELSE 0 END
然後,您可以在過濾索引中使用此欄位來非常快速地訪問任何員工的目前資訊,這可能是主要案例。
SELECT Name FROM Employees WHERE IsCurrent = 1 AND EmployeeID = 123
…甚至:
CREATE VIEW CurrentEmployees AS SELECT EmployeeID, Name FROM Employees WHERE IsCurrent = 1 SELECT Name FROM CurrentEmployees WHERE EmployeeID = 123
同樣,這些術語實際上只適用於數據倉庫環境。在事務上下文中,我會使用 Neil 已經提到的“歷史表”。