我希望有人愿意看看这种多对多的关系。这个例子是针对一个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_id
从 action
table。我想知道如何保持这个干净的拉雷维尔虽然。
行动计划
+----+-----------+------------+
| id | action_id | project_id |
+----+-----------+------------+
1条答案
按热度按时间tcomlyy61#
以概念的方式总结您的问题:
应用程序(“项目”)具有关联的自定义操作,
没有为特定应用程序定义标准操作
服务器有/主机应用程序
管道定义了在哪个服务器上按哪个顺序执行哪些“操作”
我认为您需要的只是自定义操作和标准操作的泛化,对应于包含这两种情况的超类“action”。这将导致下表:
actions(id, type, name, description)
与type
或者custom
或者standard
custom_actions(id, script, icon, custom, project_id)
或者,可以附加custom_actions
至actions
对于标准操作,它们都为空。