基于资源的邮件系统的数据库架构

时间:2018-01-13 16:41:07

标签: mysql laravel database-design eloquent relational-database

我的laravel应用程序有一些services and products,为了简单起见,我将尽可能保持通用,我打算将单个服务/产品称为resource

我必须以这种方式实现消息传递系统,以便客户端可以针对单个resource向管理员发送消息(反之亦然)。

例如,将project视为一种此类资源。管理员可以创建project,客户端可以向创建该项目的管理员发送消息。客户端无法创建project

这就是我设计db模式的方法:

消息存储部分:

  

对话(id,message_id,from,to,body,is_seen)

     

消息(id,resource_id,resource_name)

资源存储部分:

  

项目(id,admin_id,client_id,some_other_column)

     

another_resource(id,admin_id,client_id,some_other_column)

     

yet_another_resource(id,admin_id,client_id,some_other_column)

注意resource_id表中的resource_namemessages
resource_id 是其中一个资源表(projects,another_resource,yet_another_resource)的id。 resource_name 是我的问题所在。如果我实现此模式,我将不得不在此列中硬编码表名。消息表中的条目如下所示:

+----+---------------+-------------+---------------------+---------------------+
| id | resource_name | resource_id | created_at          | updated_at          |
+----+---------------+-------------+---------------------+---------------------+
|  1 | project       |           1 | 2018-01-13 15:11:07 | 2018-01-13 15:11:07 |
+----+---------------+-------------+---------------------+---------------------+

正如您所看到的,如果某个客户端必须在another_resource条目上发送消息,我必须在消息表中将字符串"another_resource"存储为 resource_name 以及 resource_id

id行的another_resource

我承认我不是一名优秀的数据库设计师,但我强烈认为将表名存储为列值并不是一个好主意。必须有一些动态的处理方式。我怎样才能改进我的架构?任何修改,建议或建议将不胜感激。

0 个答案:

没有答案