SQL数据库架构 - 多对多或数据透视表

时间:2014-01-03 10:11:47

标签: sql database laravel eloquent

我正在尝试为我正在处理的项目创建一个合适的数据库布局,但是我似乎无法解决哪个是最好的。

基本上,“app”可以将用户分配给许多产品,而产品可以拥有许多客户。

从这里开始,每个客户都有一个特定于该客户和产品的服务。

服务可以有多个突发事件,但突发事件只能分配给一个服务。

用户也可以拥有突发事件,但突发事件只能有一个用户。

以下是我为此做出的两个设计:

enter image description here http://i.imgur.com/ZcCFcdg.png

正如您所看到的,左侧设计具有针对Many-Many关系的特定于表的表,其中右侧的表具有针对它们的整体数据透视表。

我看到这两种方法都起作用(在我的脑海中) - 但是由于我不是最好的,这些方法中是否有任何缺点?你看到我将来会遇到什么问题吗?

另外,这是正确的做法吗?

我也将使用Eloquent ORM。

1 个答案:

答案 0 :(得分:3)

查找“第三范式”。这给出了如何设计表的规则。您可以采用您当前的一个或另一个设计并应用这三个规则来查看您的位置。

我会说右边的那个是错的:重复的信息太多,关系不清楚。左边的那个是好的,但是两个Many-Many表是多余的。您知道产品和客户是链接的,因为它位于服务表中。您知道用户和产品已链接,因为它位于事件+服务表中。

干杯 -

澄清后,用户属于客户。在这种情况下,将CustomerID添加到User表 - 这是关于用户的重要数据,应该包含在内。它将允许您停止用户在与客户无关的产品上引发事件。 这也使您能够通过与用户关联的客户列出与用户关联的产品。 此外,客户应在产品上拥有它的ID,而服务应具有ProductId,而不是CustomerID,因为服务与产品相关联,并且仅与客户通过与之关联的产品相关联。