Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 事务功能的完美数据库设计_Sql_Database_Postgresql_Database Design_Relational Database - Fatal编程技术网

Sql 事务功能的完美数据库设计

Sql 事务功能的完美数据库设计,sql,database,postgresql,database-design,relational-database,Sql,Database,Postgresql,Database Design,Relational Database,在我目前的项目中,我正在开发一个功能,人们将在其中相互购买/销售产品。假设User1有两个产品,User2有一个产品 现在,如果User1从User2购买一种产品。用户2购买了用户1的两个产品,我们将有3个交易。在我以前的项目中,我每次都在DB表中进行查询,得到所有的贷记和借记,然后像这样做 current_balance = all_credit-all_debit 但现在我知道这是一个非常糟糕的做法,因为如果你有太多的事务,它会减慢你的系统。知道我已决定为每个用户表创建一个额外字段,如av

在我目前的项目中,我正在开发一个功能,人们将在其中相互购买/销售产品。假设User1有两个产品,User2有一个产品

现在,如果User1从User2购买一种产品。用户2购买了用户1的两个产品,我们将有3个交易。在我以前的项目中,我每次都在DB表中进行查询,得到所有的贷记和借记,然后像这样做

current_balance = all_credit-all_debit
但现在我知道这是一个非常糟糕的做法,因为如果你有太多的事务,它会减慢你的系统。知道我已决定为每个用户表创建一个额外字段,如available balance(可用余额),我将在其中更新数据,并在每个用户执行事务后更新数据。如果是加法,我加上平衡,反之亦然。我还在事务表中保存数据。我也不确定这是否是一个完美的解决方案

但有了这个解决方案,我的下一个项目将面临的问题是,我有一些功能,系统需要保持7/15天。就像User1购买User2的产品一样,User2只能看到这些余额可用,或者可以在15天后提取/使用它们。与此同时,他也能看到类似的不可用平衡。但问题是我如何在7/15天后提供这些不可用的资金?虽然我过去常常在整个表中进行查询,但我可以按日期进行查询,以获得当前时间的可用余额。
我得到的解决方案之一是每隔6小时使用cronjob。但现在确定是否可以使用一些更先进的DB技术/逻辑来完成此任务或高级使用。这会给我更好的完美解决方案。或者克朗对我来说更合适。另外,如果将来我得到一个可能需要每小时运行cron的需求,该怎么办。那么,每小时运行一次大查询(使用cron)是否会对性能造成不良影响呢?

您的问题很难回答。请向我们展示到目前为止您所拥有的架构。您似乎没有明确的需求,因此担心“会减慢您的系统”就是我们所说的“过早优化”。不要那样做。也许需求如此复杂,必然会影响性能。chronjob几乎肯定是错误的答案:它会使整个设计更加脆弱。是的,我甚至害怕cronjob,因为我还从未在生产中使用过它。顺便说一句,如果我不能描述我的担忧,我很抱歉。方案是非常基本的,比如一个交易模型(用户收入、支出余额)和一个用户配置文件模型(其中我存储用户当前余额和可用余额)。现在唯一的问题是,用户只能在特定的时间后使用或取款,才能获得收入余额。现在他们有没有办法在整个事务表中查询他所能得到的余额?或者在特定的日子之后如何将当前余额添加到可用余额中?我仍然不清楚这些需求,但是我会考虑定义一个比较事务日期到系统日期的“视图”,添加了“特定时间”。为了优化,视图可以“物化”,而不会打乱业务逻辑。OTOH我不确定使用system date的定义是否允许具体化。@AntC并且该视图将每小时调用一次?是你吗?但要做到这一点,我们需要克朗乔,对吗?你的问题很难理解。请向我们展示到目前为止您所拥有的架构。您似乎没有明确的需求,因此担心“会减慢您的系统”就是我们所说的“过早优化”。不要那样做。也许需求如此复杂,必然会影响性能。chronjob几乎肯定是错误的答案:它会使整个设计更加脆弱。是的,我甚至害怕cronjob,因为我还从未在生产中使用过它。顺便说一句,如果我不能描述我的担忧,我很抱歉。方案是非常基本的,比如一个交易模型(用户收入、支出余额)和一个用户配置文件模型(其中我存储用户当前余额和可用余额)。现在唯一的问题是,用户只能在特定的时间后使用或取款,才能获得收入余额。现在他们有没有办法在整个事务表中查询他所能得到的余额?或者在特定的日子之后如何将当前余额添加到可用余额中?我仍然不清楚这些需求,但是我会考虑定义一个比较事务日期到系统日期的“视图”,添加了“特定时间”。为了优化,视图可以“物化”,而不会打乱业务逻辑。OTOH我不确定使用system date的定义是否允许具体化。@AntC并且该视图将每小时调用一次?是你吗?但要做到这一点,我们需要一份工作,对吗?