Database design 如何使用不使用';不支持复合键

Database design 如何使用不使用';不支持复合键,database-design,Database Design,参考这篇文章,租户id传播到多个表的多租户问题带来了多级联路径的问题 事实上,在文章中,订单行可以引用属于不同于拥有订单的客户公司的公司的产品,而这不是您想要的(除非所有公司都共享相同的产品目录,但这在实践中是不太可能的) 因此,您可能希望将CompanyID作为PKs的一部分,以便在定义FKs时确保相同的CompanyID一直到OrderLine都是一致的 问题是您需要复合键,而不是所有ORM都能处理它。此外,如果您有一个需要引用自身的表(例如,依赖于另一个订单的订单),那么该体系结构开始变得

参考这篇文章,租户id传播到多个表的多租户问题带来了多级联路径的问题

事实上,在文章中,订单行可以引用属于不同于拥有订单的客户公司的公司的产品,而这不是您想要的(除非所有公司都共享相同的产品目录,但这在实践中是不太可能的)

因此,您可能希望将CompanyID作为PKs的一部分,以便在定义FKs时确保相同的CompanyID一直到OrderLine都是一致的

问题是您需要复合键,而不是所有ORM都能处理它。此外,如果您有一个需要引用自身的表(例如,依赖于另一个订单的订单),那么该体系结构开始变得复杂

为了在克服前面提到的问题的同时保持shema的简单性,我只能看到一个设计,比如每DB 1个租户


但是,如果有人有更好的想法,我们会很高兴地欢迎。

确实在帖子中,订单行可以引用属于不同于拥有订单的客户公司的产品
——除非您的程序有缺陷。考虑到可以连接数据库的解决方案数量,我认为DB有责任避免出现公司ID差异。此外,需要在所有iInterface中重新实现此测试逻辑,因此出现错误的可能性很高。也许可以用触发器来代替id传播……不是特别优雅,是吗?数据库所能做的就是抛出。无论如何,你都必须修复这个bug。无论如何,看看这里:
确实在帖子中,订单行可以引用属于不同于拥有订单的客户公司的产品
——除非您的程序有缺陷。考虑到可以连接数据库的解决方案数量,我认为DB有责任避免出现公司ID差异。此外,需要在所有iInterface中重新实现此测试逻辑,因此出现错误的可能性很高。也许可以用触发器来代替id传播……不是特别优雅,是吗?数据库所能做的就是抛出。无论如何,您都必须修复该错误。在任何情况下,请查看以下内容: