mysql - 关系数据库设计场景

标签 mysql sql database database-design erd

假设我们有如下 2 个表:

products:       id, name
                  (PK = id)
product_group1: product_id
                  (PK = a1_id)
                  (FK = a1_id REFRENCES a1)
product_group2: product_id
                  (PK = a1_id)
                  (FK = a1_id REFRENCES a1)
product_group3: product_id
                  (PK = a1_id)
                  (FK = a1_id REFRENCES a1)

问题是,我想设计一个名为 approved_products 的表,它只接受来自 group1 和 group2(不是 group3)的产品。

我该如何设计这样的表格? (顺便说一句,我正在使用 mysql)

最佳答案

如果不在触发器或应用程序级别插入一些逻辑,您就无法用当前的设计解决这个问题。 FOREIGN KEY 不能引用多个表(我理解你的设计是每个产品组使用一个表,如果我错了请告诉我)。此外,它们不能包含任何条件逻辑,因此即使您只有一个 product_groups 表,您也无法创建仅允许该表中的 G1 和 G2 记录的 FOREIGN KEY

为了使用标准的关系完整性约束来完成此操作,您需要一个名为 approvable_products 的附加表,其中包含组中那些产品的 product_ids一个或第二组。

关于mysql - 关系数据库设计场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933877/

相关文章:

sql - SQL Server 中的几何和地理数据类型

mysql - SQL查询从所有数据库中获取数据

java - 将多个 JCR 存储库连接到一个数据库(并保持更新)

mysql - 在同一台机器上安装多个 MySQL 集群 - CentOS 7

MySQL索引帮助——哪个更快?

mysql - 何时使用不同的 never-rejected ("insert or update") MySQL 语句?

mysql - 如何仅返回一列中不同的结果,同时允许其他列中出现重复结果?

php - 如何在提交时从侧栏中的mysql获取搜索结果而不刷新页面

php - SQL 不接受其中包含冒号 (":") 的 INSERT INTO

php - PrestaShop,插入数据库时​​获取ID