跟蹤數據庫的變化必須成爲很多人的一個大問題,但似乎這些大公司都有軟件。跟蹤數據庫更改或使用時間戳區分記錄?
我的問題是用於10桌,< 10列,每列,使用連接創建一個「主」結臺小SQL數據庫:是有缺點更新每年幾次通過增加行 (有很多重複的信息),然後用MAX id(PK)生成並在網站上發佈表格形式的最新數據(摘錄自「master」)?這與更新記錄,,其中我會在特定時刻丟失有關值的信息。
教師聯繫信息的典型行將有fName,lName,schoolName,[address & phone info];爲曲目或試聽信息:年,樂器,作品,作曲家,出版商/版本。
其他人提出關於跟蹤數據庫的變化,但只有一個最近的,而不是用了很多票/詳細信息: How to track data changes in a database table Keeping history of data revisions - best practice? How to track data changes in a database table
這個輕量級的解決方案似乎是有前途的,但我不知道是否它沒有得到票,因爲它沒有幫助,或者因爲人們不感興趣。 How to keep track of changes to data in a table?
更多的背景如果需要的話: 我是一個音樂老師(即業餘程序員)保持一個Joomla網站,我們的組織。我使用名爲Sourcerer的Joomla插件來創建動態內容(Joomla數據庫中的PHP/SQL),以便更易於溝通變化(日期,人員,規則,劇目等)。多年來,這是通過靜態頁面完成的(和紙手冊)需要幾天更新。
然而,我也希望能夠回頭看看特定時間的數據庫狀態:誰在什麼地方教過什麼樣的試音片等等,就像紙質版本一樣。注意:我沒有跟蹤HTML更改,只是從數據庫提供的信息。
感謝您的幫助! (我遵循SO多年,但這是我的第一個問題。)
我現在用來生成「主節點表」的代碼。我會將其修改爲「插入到」我的新行並通過Sourcerer進行查詢以在線發佈信息。
CREATE TABLE 011people_to_schools_junction
AS (
SELECT *
FROM (
SELECT a.peopleID, a.districtID, a.firstName, a.lastName, a.statusID, c.schoolName
FROM 01People a
INNER JOIN (
SELECT districtID, MAX(peopleID) peopleID
FROM 01People
GROUP BY districtID
) b
ON a.districtID = b.districtID
AND a.peopleID = b.peopleID
INNER JOIN (
SELECT schoolID, MAX(peopleID) peopleID
FROM 01people_to_schools_junction ab
GROUP BY schoolID
) z
ON z.peopleID = a.peopleID
LEFT JOIN 01Schools c
ON c.schoolID = z.schoolID
WHERE z.schoolID IS NOT NULL
OR z.peopleID IS NOT NULL
ORDER BY c.schoolName
) t1
);
#Add a primary key as the first column
ALTER TABLE 011people_to_schools_junction
ADD COLUMN 011people_to_schoolsID INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (011people_to_schoolsID);
感謝徹底的回答@Riccardo Zorn:尤其是平衡性能和設置工作的清晰度。每年<200條記錄,我的想法是將時間戳/記錄ID添加到我的饋線表(人員,角色,學校等)進行跟蹤,並將交匯表作爲信息輸出。我可以添加WHERE = <日期查詢(如果需要,在phpMA中)來檢索歷史數據。在這裏存儲標記(好建議)實際上並不容易,因爲數據在多個頁面上傳播 - 我正在編碼的一個原因! – jchleb