【问题标题】:polymorphic relationship with not all columns in common与并非所有列共有的多态关系
【发布时间】:2020-07-19 09:53:41
【问题描述】:

我有以下表格

threads
- id

profile_posts
- id

replies
- id
- repliable_id
- repliable_type
- position
  • 两个线程都需要一个具有id、body、position的模型。
  • 虽然,ProfilePosts 需要一个具有 id、body 的模型

这里的问题是,如果我使用多态关系,那么对于所有 ProfilePosts,我将拥有根本不使用的列 position

这是使用 2 个表而不是多态关系的原因吗?例如,拥有

threads
 - id

thread_replies
- id
- body
- position

profile_posts
- id

profile_post_replies
- id
- body

【问题讨论】:

  • 在数据库设计中,有些记录的列未使用(null 值)的表并不少见。如果在获取/处理/显示回复时使用单个表存储回复不会造成问题,请继续。

标签: sql laravel eloquent


【解决方案1】:

这两种方法都有效。多态方法的缺点是数据库不能(容易)强制执行外键关系。也就是说,保证 type 和 id 引用同一个表是很棘手的。并且您可能在表中有一些特定于实体的列。

多表可能更常见——它允许同时查看所有外键关系。但是,如果您想查看所有相关实体,则需要仔细制作查询。多个joins 会产生笛卡尔积,这通常是不希望的。

这两种方法的缺点都可以解决,但解决方案不是特别优雅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多