小编ntw*_*twk的帖子

在没有存储过程,触发器或UDF的情况下实施超类型和子类型数据完整性

我经营一家小型食品生产企业,我需要管理客户订单.我已经构建了我的业务这方面的概念数据模型,但我需要一些关于如何在RDMS中完全实现它的指针.

作为第一步,我提出了下面给出的逻辑模型.我对数据建模的了解有限,因此我的图表中可能存在错误,但希望它能传达我的意图.请注意,这仅仅是较大模式的简化部分,为简单起见,我仅提供相关表格.

数据库架构图

数据模型简要介绍

  • 客户Ordr可以拥有一个或多个OrdrItems
  • OrdrItem可以是FoodItem或ComboItem
  • ComboItem是两个或更多FoodItems的逻辑分组

我在MySQL中实现了上面的模式,我编写了一些小程序来用客户订单填充表.这可以完成工作,但没有太多考虑数据完整性.我注意到,通过此实现,一些数据完整性规则不会在数据库级别强制执行.

例如,FoodItem是OrdrItem的子类型.对于FoodItem中的每一行,OrdrItem中必须只有一个对应的行.但是,在其当前实现中,我可以从FoodItem中删除一行,从而在OrdrItem中留下一行而在其中一个子类型表中没有相应的行.这应该是不允许的.

一些进一步的数据限制

  • 订单必须至少有一个关联的"订单商品"(即订单不能为空)
  • 订单商品必须是FoodItem或ComboItem的一个关联子类型(即,OrderItem不能同时是FoodItem和ComboItem).
  • 未来可能会出现一些进一步的限制因素

我希望将这些数据完整性规则融入到数据库中,这样我就不必担心自己在每个新客户端应用程序中执行它们,抛弃脚本或我写的伪劣SQL语句.我怀疑,如果我不在数据库级别做出这些保证,那么我将极大地增加遇到数据完整性问题的可能性.

这个问题

我对存储过程,触发器和用户定义的函数只有最微弱的了解.我得到的印象是,部分或全部这些功能可以帮助我实现我想要的目标.但是,如果我能完成检查约束,外键和相对简单的功能,我很乐意走这条路.基本上,我希望尽可能地限制复杂性,如果没有保证,不要引入每个漂亮的数据库功能.是否有可能确保我想要的数据完整性,而无需借助存储过程,触发器,用户定义的函数和其他更深奥的数据库功能?

我愿意使用MySQL或Postgresql来实现我的解决方案,因为我对两个系统都有基本的工作知识.

最后,如果这种对数据完整性的方法被认为是过度的,或者如果有一个更实用但稍微不完美的解决方案,我也会对此持开放态度.

mysql sql database postgresql database-design

5
推荐指数
1
解决办法
330
查看次数

标签 统计

database ×1

database-design ×1

mysql ×1

postgresql ×1

sql ×1