Python和SQL—按顺序管理不断变化的客户数据的最佳实践?

Python和SQL—按顺序管理不断变化的客户数据的最佳实践?,python,sql,python-3.x,database,database-design,Python,Sql,Python 3.x,Database,Database Design,目前,我经常使用Python和SQL进行练习,目前我正在尝试使用保存在SQL数据库中的数据创建订单工作流,以供测试 例如,目前我的客户表如下所示: CustomerSK CustomerID VersionID FirstName LastName Address DateEffective DateExpired IsCurrent ---------- ---------- --------- --------- -------- ------- ------------- -----

目前,我经常使用Python和SQL进行练习,目前我正在尝试使用保存在SQL数据库中的数据创建订单工作流,以供测试

例如,目前我的客户表如下所示:

 CustomerSK CustomerID VersionID FirstName LastName Address DateEffective DateExpired  IsCurrent
 ---------- ---------- --------- --------- -------- ------- ------------- ------------ ---------
 42942      123        1         Robert    Smith    10001   2018-12-07    2019-12-22  0
 42943      123        2         Robert    Johnson  10002   2019-12-23    NULL        1
因此,我试图跟踪客户的历史数据,因为如果客户的数据发生变化,我不希望旧订单受到影响

到目前为止效果不错,但我有几个问题:

  • 如果一个“订单”,目前我只有一个订单表,其中可以包含一个查询,正在与客户一起积极开发,因此尚未关闭,并且客户的数据发生变化,则需要获得最新的客户数据,如果出现上述表中所示的情况(地址或名称发生变化)。如果订单已关闭,则应保持数据的冻结状态

    我如何以及在何处建立这样一个过程,最好的方法是什么?还是我总的来说做错了什么

  • 下一个问题是:我想为ID设置前缀,以帮助用户记住ID。比如客户ID的“CU”和地址的“AD”等等。我应该将它们也保存在数据库中还是只在GUI中显示它们

  • 如果我正在编辑客户并希望创建CustomerID 123的新版本,但版本为3,那么我的SQL查询是什么样子的?我是更新还是插入?还是我还不知道该怎么做

  • 如果我在问题中遗漏了一些信息,请告诉我

    多谢各位

    如果是“订单”,目前我只有一张订单表,可以 也有询价,正在与客户积极开发,所以 尚未关闭,客户的数据需要更改才能获取 最新的客户数据(如上表所示) 发生(地址或名称更改)。如果订单已关闭,则应 保持数据的冻结状态。 我如何以及在何处建立这样一个过程,最好的方法是什么?或者我总的来说做错了什么

    您的客户表正在缓慢更改维度(SCD)类型2。一种方法是将订单表创建为SCD类型2,并基于 DateEffect和DateExpired之间的当前_日期

    这样,您就有了2个不同版本的订单,并能够跟踪它

    另一种方法是创建一个单独的查询表,并在订单最终确定或取消时按顺序插入数据。(提示:触发器)

    下一个问题是:我想让ID有前缀来表示 用户需要一些帮助来记住ID。如“CU”表示客户ID和 地址等的“广告”。我应该把它们也保存在数据库中吗 还是只在GUI中显示它们

    我会在我的表中添加一个ID_标志(C/U)字段,以检查ID是否代表客户或地址。字符串字段的所有联接/筛选操作都很昂贵

    如果我正在编辑客户并希望创建新版本的 CustomerID 123但在版本3中,我的SQL查询看起来如何?做 我更新还是插入?还是我还不知道该怎么做

    您需要先进行更新,然后再进行插入(UPSERT)。 我假设您将使用暂存表来存储修改的(新数据)

    第一步-->更新当前记录。设置结束日期=当前日期,版本=最大值(版本)+1


    第二-->插入新记录,开始日期=当前日期,版本=最大(版本)+1

    首先感谢您的回答!1.所以我的订单表也需要列来保存customer、CustomerID和CustomerVersion,这是对的?2.但是Customer和Address是两个不同的表,所以它们都需要ID_标志,对吗?在订单表中只需要CustomerSK字段。为了获取客户信息,您将加入此字段并获取所有信息。如果这是两个不同的表,则不需要标记。从表中选择数据时,只需输入字符串(CU/AD)好的,明白了。我想现在还有最后一个问题:在查询阶段,我希望始终为客户提供最新的条目,等等,之后,如果订单阶段完成,我希望冻结该数据。因此,你会做一个不同的“订单表”,在那里你移动查询数据来“冻结”它们?