php - 导入数据时防止网上商店没有产品

标签 php postgresql database-design pdo

在我的网站上,一些供应商可以导入他们的文章。

我想为他们提供清理文章的选项(例如,删除不在导入文件中的文章)。

我首先想到的是在导入之前先删除该供应商的所有文章,但这可能会出现客户访问该站点而看不到任何产品(特定供应商的)的情况.

经过深思熟虑,我想到了另外两个解决方案:

  1. 导入产品并记住导入/更新了哪些产品(如果它们已经存在)并删除之后不在导入中的供应商的产品
  2. 导入另一个临时表中的产品,删除供应商的当前产品,然后将临时表中的产品复制到“真实”表中。

然而,这两种选择都可能存在一些问题。

  1. 假设记住所有导入/更新的产品真的是个好主意,因为有时它可能超过 100 万种产品?
  2. 是否可以删除当前产品并将产品从临时表复制到真实表,速度如此之快,以至于来访客户看不到任何产品的可能性很小?

也许我想出的选项还有更多问题。

或者也许还有其他一些选择可以做到这一点?

附言

在导入时“锁定”站点/锁定客户不是一种选择。

最佳答案

当我阅读您的问题时,我想到了两个解决方案:

  1. 在导入时启动“维护模式”,但这可能不是您想要的。抱歉没有阅读您最后的声明。
  2. 一件一件地导入(或删除)商品,因为这样一来,用户在任何给定时刻最多只会丢失一件商品。不过,这里有几个注意事项需要考虑:
    • 如果产品在用户购物篮中被删除会怎样?
    • 已进行的购买中的引用需要保持完整,以便能够在删除购买的产品后重建帐单。

此外,您可以像这样重命名 PostreSQL 中的表:

ALTER TABLE TableB RENAME TO TableC;

万一你想使用你的“临时表”解决方案,我也使用过,虽然在不那么关键的情况下,无可否认。但请注意,至少在 MySQL InnoDB 中,您必须担心外键,如果重命名,外键仍将指向旧表,例如如果从 TableA 到 TableB 有一个外键,并且您将 TableB 重命名为 TableB_old 并将 TableB_new 重命名为 TableB,那么外键将指向 TableB_old。不过,我不知道 PostgreSQL 是否属于这种情况。

关于php - 导入数据时防止网上商店没有产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883235/

相关文章:

php - 使用PHP上传文件添加路径到MySQL

php - 窗口上的 voltDB

PostgreSQL 格式化时间戳

sql - POSTGRESQL 必须出现在 GROUP BY

mysql - 数据库设计 : How should I store user's news preferences in MySQL database?

mysql - Multi-Tenancy 共享数据并按租户排除特定的默认数据

php - 防止php脚本同时运行两次

php - 本地 xampp wordpress 安装 - 找不到 wp-blog-header.php

postgresql - plpgsql 函数错误

database-design - Doctrine 中的复合外键