【发布时间】:2017-07-29 05:02:23
【问题描述】:
跟踪数据库的更改对于很多人来说一定是一个大问题,但似乎大牌有软件可以做到这一点。
我的问题是对于一个小型 SQL 数据库,它有 10 个表,每个 更新几次有缺点吗每年通过添加行(包含大量重复信息)然后使用 MAX id (PK) 以表格形式生成并在网站上发布最新数据(摘自“主”)?这相对于更新记录,我会在特定时刻丢失有关值的信息。
教师联系信息的典型行包括 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 插件来创建动态内容(PHP/SQL 到 Joomla 数据库),以便更轻松地传达更改(日期、人员、规则、曲目等)。多年来,这是通过静态页面完成的(和纸质手册)需要数天时间才能更新。
不过,我还希望能够回顾并查看特定时间的数据库状态:谁在哪里教书,列出了哪些试听作品等,就像我们可以使用纸质版本一样。注意:我不跟踪 HTML 更改,只跟踪从数据库提供的信息。
感谢您的帮助! (我已经关注 SO 多年了,但这是我的第一个问题。)
我现在用来生成“主联结表”的代码。对于我的新行,我会将其修改为“INSERT into”,并通过 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);
【问题讨论】:
标签: sql joomla change-tracking