数据库模式多对多默认值

w46czmvw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我希望有人愿意看看这种多对多的关系。这个例子是针对一个laravel项目的,但是细节应该不太重要。
行动

+----+------+--------+-------------+------+--------+------------+
| id | name | script | description | icon | custom | project_id |
+----+------+--------+-------------+------+--------+------------+

管道( action_server 这是透视表)

+----+-----------+-----------+-------+
| id | action_id | server_id | order |
+----+-----------+-----------+-------+

服务器

+----+------+------------+------------+
| id | name | ip_address | project_id |
+----+------+------------+------------+

此多对多关系用于部署服务器。操作是部署管道的一部分。
一个操作可以在多个服务器上执行。
用户可以使用自定义脚本添加操作。
部署管道的所有操作都可以通过 project_id 这个概念在laravel中起作用,我可以简单地根据给定的 project_id . 反过来,我可以通过使用 action->servers() .
我需要一个方法来添加默认操作,虽然。与操作总是有用户提供的脚本不同,我希望能够为操作提供预定义的脚本,供用户从中选择并添加到部署管道中。
这些预定义的操作不能塞进 action 表中定义的操作绑定到 project_id . 这些必须是通用的。
我不能简单地为当前设置中的这些预定义操作创建另一个表,因为 action_id 在我的管道中已经设置了外键。
到目前为止,我感觉我混合了两个概念,分别是 pre-defined 行动和 user-defined 用户自己创建的操作。它们需要在同一条管道中,并最终以正确的顺序运行。
你对如何实现这一目标有什么想法吗?我愿意接受所有的建议。
编辑
在得出这个结论之后,一个可能的解决方案是以 action_project 这样我就可以把 project_idaction table。我想知道如何保持这个干净的拉雷维尔虽然。
行动计划

+----+-----------+------------+
| id | action_id | project_id |
+----+-----------+------------+
tcomlyy6

tcomlyy61#

以概念的方式总结您的问题:
应用程序(“项目”)具有关联的自定义操作,
没有为特定应用程序定义标准操作
服务器有/主机应用程序
管道定义了在哪个服务器上按哪个顺序执行哪些“操作”
我认为您需要的只是自定义操作和标准操作的泛化,对应于包含这两种情况的超类“action”。这将导致下表: actions(id, type, name, description)type 或者 custom 或者
standard custom_actions(id, script, icon, custom, project_id) 或者,可以附加 custom_actionsactions 对于标准操作,它们都为空。

相关问题