具有默认值的多对多数据库模式

问题描述 投票:1回答:1

我希望有人愿意看看这种多对多的关系。这个例子适用于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。我想知道如何在Laravel中保持这种清洁。

action_project

+----+-----------+------------+
| id | action_id | project_id |
+----+-----------+------------+
mysql laravel database-design many-to-many pivot-table
1个回答
1
投票

从概念上总结您的问题:

  1. 应用程序(“项目”)具有关联的自定义操作,
  2. 没有为特定应用程序定义标准操作
  3. 服务器有/主机应用程序
  4. 管道定义在哪个服务器上执行哪些“操作”

我认为你需要的只是对自定义动作和标准动作的概括,对应于包含两种情况的超类“动作”。这导致以下表格:

  1. actions(id, type, name, description)typecustomstandard
  2. custom_actions(id, script, icon, custom, project_id)

或者,您可以将custom_actions的属性附加到actions,并将它们全部为NULL以用于标准操作。

© www.soinside.com 2019 - 2024. All rights reserved.