mysql - MySQL 外键约束不适用于我的数据库设计
问题描述
我正在使用从其他网站导入的 XML 来制作产品价格比较网站。导入的产品进入名为“产品”的表中。
产品包含:
- id
- SKU(产品代码)
- url
- shopName
- price
我还有另一个名为“productshop”的表。此处,该表包含以下值:
- id (PK)
- SKU(“产品”表中产品的外键)
- 商店显示名称
工作原理:管理员手动添加productShop 条目。管理员输入商店的显示名称以及该商店使用的 SKU 代码。这样,该产品就被添加到网站上。
这一切都很好,但我遇到了以下问题:
当产品表更新时,商店可能会暂时缺货。这意味着它不再出现在我从他们那里收到的 XML 文件中。我也不想立即删除“productshop”条目,因为该项目可能再次可用,然后我必须手动再次添加它。
所以基本上:我希望产品商店能够引用可能不存在的产品。当 productShop 引用产品时,现在无法删除该产品。
这是糟糕的数据库设计吗?我应该禁用外键约束还是这只是一个非常糟糕的主意?
解决方案
您正在阅读 XML 文件,将它们添加到表中,然后当客户进行购买过程时,产品可能不再在网站上可用,因此也无法在 XML 上使用?
如果是这样,我相信您需要使用多线程在网站上工作,以检查该项目是否仍然可用,如果是,则继续销售。
另一种情况,不确定您使用 XML 更新数据库表的频率,但您可以向数据库添加行版本并检查是否发生更改,如果发生更改,则需要检查您是否仍然有可用的产品。
行版本 MySQL: https ://forums.mysql.com/read.php?60,367176,367176
行版本 SQL: https ://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-ver15
希望这可以帮助!
推荐阅读
- python - 将 python 列表插入 SQLite3 列
- c# - 如何使用 HashAlgorithm.TransformBlock / TransformFinalBlock?
- angular - Angular 6 Universal 不等待完成解析器
- c# - GROUP BY、ORDER BY 并在 LINQ 中排名第一
- php - PHP:检索文件的图像创建年份
- webpack - 错误:以下资产超出建议的大小限制 (244 KiB)
- spring-security - SAML:SignatureValue 和 X509Certificate 是否可重复使用?
- laravel-5 - 在 AWS 上执行“PutObject”时出错
- c# - 如何从控制器刷新 HTTP 标头?
- python-3.x - 在python中将double(float)转换为字节