跟踪数据库的变化必须成为很多人的一个大问题,但似乎这些大公司都有软件。跟踪数据库更改或使用时间戳区分记录?
我的问题是用于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