【问题标题】:model for "has a" relationship where multiple tables can have a thing“有”关系的模型,其中多个表可以有一个东西
【发布时间】:2012-12-25 10:11:58
【问题描述】:

我需要为可以发送电子邮件的各种实体建模smtp 服务器配置,因此我有一个包含smtp 服务器设置的表。

例如:发送电子邮件的实体是“房间”和“服务器”——它们存在于不同的表中,因为它们几乎没有共同点,但它们都引用了一个可选的电子邮件配置。

虽然在房间和服务器表中都有一个SmtpConfigId 很简单,但我看不到如何在哪里进行级联删除,如果房间或服务器被删除,那么其相应的 smtp 配置也会被删除。

当然,我可以为每个可以发送电子邮件的实体表复制smtp配置字段,我认为如果电子邮件配置在自己的表中,发送邮件的业务逻辑将得到简化。

除了邮件配置,即发送邮件的实体之间的1:1及其smtp配置,还有套用信的问题,即1:M,我也想级联删除到如果创建它们的实体被删除,请清理套用信函。

我是否以正确的方式思考这个问题,什么是建模它的好方法?删除触发器?

【问题讨论】:

    标签: database-design


    【解决方案1】:

    我会将建模视为一种多态关系,其中一张表用于配置内容,并带有 smtp_type 字段来区分类型(房间、服务器等)。

    【讨论】:

    • 这基本上就是我最终得到的结果:ownertype 的枚举和引用拥有表的 PK 的 ownerid 字段。然后,对于每个拥有的表(房间、服务器等),我添加了一个 after delete 触发器来清理引用的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多