【问题标题】:Optimal DB Schema最佳数据库模式
【发布时间】:2012-05-28 02:42:28
【问题描述】:

我即将重新设计数据库架构,并且正在考虑在我的应用程序中使用 ORM,下面的架构是否可以与例如 Eloquent ORM 一起使用,还是我还必须添加 JOIN 表?

ISSUES(ID, ORGANIZATION_ID, DATE, TIME, CATEGORY_ID, TYPE_ID, ISSUE_DETAILS_ID)
ISSUE_DETAILS(ID, NAME, STATUS, EMAIL)
ORGANIZATIONS(ID, NAME, ADDRESS, CONTACT)
CATEGORIES(ID, CATEGORY)
TYPES(ID, TYPE, CATEGORY_ID)

【问题讨论】:

  • 看起来干净整洁。当您映射 ORM 时,您可以映射您的实体,这样您就可以执行类似 Issue.Organization.Name 的操作,然后 ORM 会将其转换为您的连接 :)

标签: mysql database-design orm schema laravel


【解决方案1】:

我可能会做的唯一不同的事情是在issue_details 表上添加issue_id 外键,这样您就可以拥有一对一 关系。

所以如果你使用 Eloquent,你可以做这样的事情。

echo $issue->details->name;

不过,我不完全确定您将在详细信息表中存储什么,可能会有多个问题的详细信息,在这种情况下,您会有 多对多 关系。

【讨论】:

  • 我想我可以结合问题和 issue_details,我担心有一个“胖”表。将其分开/合并,我会获得或失去任何东西吗?
  • 如果您不想合并它们,则不必合并它们。这取决于你需要什么。没有什么可担心的。如果对于所有请求,您都需要详细信息,那么将它们全部放在一个表中可能会更容易,这样您就不必每次都加入或获取其他详细信息。但话又说回来,您可能只需要几个地方的详细信息,在这种情况下,有一个单独的表格可能更有意义。
【解决方案2】:

除了 Jason 的建议之外,您还可以从 issues 表中删除 category_id,因为每个 type 已经有一个 category,您已经可以通过类型访问该类别。

$issue->type->category

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-29
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2017-04-26
    • 2012-06-04
    相关资源
    最近更新 更多