【问题标题】:SQL Database Schema - Many to Many or Pivot TableSQL 数据库架构 - 多对多或数据透视表
【发布时间】:2014-01-03 10:11:47
【问题描述】:

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

基本上,“应用程序”是指一个用户可以分配给多个产品,一个产品可以有多个客户。

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

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

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

这是我为此做的两个设计:

http://i.imgur.com/ZcCFcdg.png

如您所见,左侧设计有一个针对多对多关系的特定表格,而右侧设计有一个针对所有关系的整体数据透视表。

我看到这两种方法都有效(在我的脑海中)——但是由于我不是最擅长这个,这两种方法有什么缺点吗?你认为我将来会遇到什么问题吗?

另外,正确的方法是否正确?

我还将使用 Eloquent ORM。

【问题讨论】:

    标签: sql database laravel eloquent


    【解决方案1】:

    查找“第三范式”。这给出了如何设计表格的规则。您可以采用您当前的设计中的一种或其他,并应用这三个规则来查看您的目标。

    我想说右边的那个是错误的:重复的信息太多,关系不明确。左边那个还可以,但是两张Many-Many表是多余的。您知道产品和客户是链接的,因为它位于服务表中。您知道用户和产品是相关联的,因为它位于事件 + 服务表中。

    干杯-

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

    【讨论】:

    • 啊,好吧,所以我明白了关于产品和客户的观点 - 明白这一点。但是对于用户和产品,您是说要访问用户拥有的产品/客户,您会找到他的所有事件,从而找到服务吗?或者在用户 - 服务之间创建一个多对多表?
    • 我必须对域有更多的了解。用户和客户有什么区别?他们有什么关系?
    • @simonatrcl 据我了解,Larry Page 和 Sergey Brin 将是用户。谷歌将成为客户。 Gmail、环聊、Google+ 将是产品。 Web 服务、API、防火墙等将是服务。
    • 好的,所以一个用户属于一个客户(一次只有一个客户)。我将编辑答案,因为它给了我更多空间。
    • @simonatrcl 一个用户可以有多个客户。假设您拥有一家销售多种产品的公司。一个用户可以是内部用户或外部用户,但内部用户可以有多个客户。一个客户可以拿多个产品。一个产品有多种服务。但是,事件与该服务有关。多个产品可能共享相同的服务,这意味着事件可能与可能影响多个客户的多个产品有关,但仅与 1 个事件有关。哇,好复杂..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2017-04-11
    • 2015-08-20
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多