SQL 服务器 Reference/Lookup 表和更新

SQL Server Reference/Lookup Tables and Updates

我有两个 SQL tables:TableA 和 LookupTable。 TableA将LookupTableID(PK)存储为外键和一些其他字段。 LookupTable 存储 LookupTableID、PharmacyName、PharmacyAddress、PostCode、PharmacyTelephone、PharmacyFax、PharmacyEmail 等

来自 TableA 的数据以 Asp.net 形式显示。表格的每一行都有两个按钮:打印按钮和预览按钮。当用户单击“打印”按钮时,包含来自 LookupTable 的药房信息(对于 TableA 中的 LookupTableID)以及来自 TableA 的一些其他信息的 pdf 文档是文件中产生。此外,TableA中的Printed字段设置为true,并在TableA中创建了一条新记录,打印记录与新建记录的唯一区别在于以下字段:StartDate,结束日期和打印。新建记录中StartDate变为"EndDate from printed record + 1 Day",EndDate变为"EndDate from printed record + 7 days",新建记录Printed为false

当用户单击“预览”按钮时,一个 pdf 文档包含来自 LookupTable 的药房信息(对于 TableA 中的 LookupTableID)以及来自 TableA在文档中产生。请注意,在这种情况下,系统不会创建新记录或将 printed 设置为 true。

我在上述数据库设计中遇到的问题是:如果其中一列让查找 Table 中的邮政编码被修改,并且用户单击 historical/printed 记录的预览按钮,则预览pdf 文档将显示最新信息,即新的 post 代码,而不是打印时的 post 代码。我知道,这是预期的行为。但是,我想在打印时显示历史记录的信息,而只显示那些尚未打印的记录的最新信息。

我的一个解决方法是将 LookupTable 视为图书馆 table 供用户 select 药房,然后复制所有内容(查找中的所有字段 table) 穿过 TableA 的 selected 药房。这将在数​​据库中创建大量重复数据。有没有更好的方法来实现我的objective?任何帮助将不胜感激。

对于历史数据,有(至少)两种方法:

  1. 您使用 ValidUntil 日期存储您的信息。带NULL的就是当前的。

可以通过类似以下内容找到较旧的数据:

DECLARE @test TABLE(id INT,ValidUntil DATETIME);
INSERT INTO @test VALUES(1,{d'2015-01-01'})
                       ,(2,{d'2015-02-01'})
                       ,(3,{d'2015-03-01'})
                       ,(4,NULL);

DECLARE @ValidOn DATETIME={d'2015-01-02'}; --set any value you like, even NULL

WITH HelperDates AS
(
    SELECT ISNULL(@ValidOn,GETDATE()) AS ValidOn
          ,(SELECT MAX(ValidUntil) FROM @test) AS MaxDate
)
SELECT TOP 1 tbl.* 
FROM @test AS tbl
CROSS JOIN HelperDates AS hd 
WHERE hd.MaxDate IS NULL OR hd.ValidOn > hd.MaxDate OR  hd.ValidOn <= tbl.ValidUntil
ORDER BY tbl.ValidUntil ASC

尤其是印刷品我更喜欢这种方式

  1. 在创建文档时存储必要的数据。在我看来,最好的是 XML 列和创建的文档。

祝您找到最佳方法!

这似乎是一种不必要的复杂且不灵活的方式,每次打印数据时都会对数据进行快照。似乎更好的替代方法是对两个 table 进行版本化并创建第三个 table,它只包含 TableA ID 和它的打印日期。无需复制数据。要重现任何特定打印日期的数据,只需使用打印日期查询截至该日期的版本化数据。您将取回该日期出现的数据,无论此后数据发生了多大变化。

这里是我针对类似情况给出的一个答案:

https://dba.stackexchange.com/questions/114580/best-way-to-design-a-database-and-table-to-keep-records-of-changes/114738#114738

希望对您有所帮助。