mysql - 存储 wreSTLers、他们的角色和他们的入口音乐之间的关系的最合乎逻辑的方法是什么?

标签 mysql database-design properties entity-relationship database-schema

必要的背景信息

我知道标题是针对我的项目的,所以请允许我解释一下我的问题的背景。

我运营着一个网站,用于存储和显示各种摔跤手、 double 队、按次付费节目等(我称之为“实体”)的入场主题列表。我正在做一个完整的重构,从头开始做一些代码,并且正在重新考虑我如何存储入口音乐列表。

每个实体(每个人包含一条记录)有可能在多个组织中。例如,摔跤手凯文纳什(作为一个人)曾在 WWE、WCW 和 TNA。凯文纳什也有多个“噱头”或角色,有时会出现在多个组织中。例如,凯文·纳什 (Kevin Nash) 已为人所知:在 WWE 中以 Diesel 的身份使用他的真名;在 TNA 中只是他的真名;在 WCW 中作为 Vinnie Vegas、Oz 和他的真名。

这就是我最近决定存储此信息的方式:

Entity-Relationship Diagram of my site's Entities and Organizations

entity_types 中,我会为像 Kevin Nash 这样的摔跤手存储实体类型“wreSTLer”。 Kevin Nash 然后将在 entities 中有一个条目,这将代表他作为一个人。接下来,Kevin Nash 的多个 gimmicks(请记住,可以扩展到多个 Organizations)每个都将存储在 entity_gimmicks 表中;记录将包括“Diesel”、“Vinnie Vegas”、“Oz”和“Kevin Nash”(当他以自己的身份出现时,或对他自己的描述)。

entity_instances 中,我会存储凯文纳什的噱头之一出现在特定组织中的每个实例。例如,将有以下条目:

  • “WWE 中的凯文纳什”,
  • “WWE 中的柴油机”,
  • “WCW 中的凯文纳什”,
  • “WCW 中的 Vinnie Vegas”,
  • 等等。

当然,organizations 会存储出现摔跤手的公司。

手头的问题

现在回答我的问题。当用户查看摔跤手的主题列表页面时,我希望他们看到,例如,凯文纳什在特定公司(比如 WWE)中使用的所有入场主题。此列表最好显示所有 主题的列表,用于此人使用的所有 噱头。假设凯文纳什最初是柴油机,使用主题“Abc”和“Def”。然后,在离开公司并以凯文纳什本人的身份回归后,他使用了“Ghi”和“Jkl”的主题。 我怎样才能最好地对这些主题列表进行排序?

乍一看,人们会简单地说代码可以先检索 gimmick,然后检索每个 gimmick 中的主题,并根据 gimmick 的顺序对它们进行排序。然而,这样做的问题在于,摔跤手可以在噱头之间切换。例如,John Doe 可能首先被称为“The Crusader”,然后被称为 John Doe,然后又被称为“The Crusader”,每个都有新的入口音乐。如果“The Crusader”是一个噱头条目,那么存储在该噱头下的主题如何与存储在“John Doe”噱头下的主题相匹配?

这是我面临的难题。我可以将 entity_org_sort_order 列添加到 themes 表,但是当我的管理员去编辑摔跤手的主题列表时,这可能是一场噩梦。

任何人都可以看到可以解决我的问题的解决方案吗?即使这意味着重新考虑我如何存储所有这些信息,我也愿意考虑这一点。

最佳答案

很抱歉回答晚了。作为一名粉丝,我在搜索“摔跤”时偶然发现了它,并且很想知道网站上是否有任何与摔跤相关的问题!

您的项目听起来很有趣。我不知道你是否解决了这个问题,但我会查看你的实体并将它们拆分到你自己的表中。所以你提到了噱头组织入口主题。您的关系将如下所示:

  • 一个人有很多噱头。
  • 噱头与组织具有多对多关系(正如您所说,凯文纳什在 WWE、WCW 和 TNA 中以真名摔跤)。

通过这两个关系,你就可以找到凯文纳什在WWE中使用了哪些噱头,或者他以他的真名为哪些组织摔跤。

入口主题变得复杂。您想将主题与人或噱头相关联吗?我个人会将主题与噱头联系起来,通常噱头的改变会导致摔跤手采用新的音乐。我真的想不出摔跤手在其中使用相同主题的任何噱头变化。所以现在你有:

  • 一个噱头有很多入口主题

使用 Laravel,这些关系将产生下表:

  • gimmicks(person 的外键)
  • 组织
  • entrance_themes(gimmick 的外键)
  • gimmick_organisation(数据透视表)

然后,您可以通过列出摔跤手为该组织使用的噱头,然后列出该噱头子集的入口主题,找到摔跤手在该组织中使用的主题。

关于mysql - 存储 wreSTLers、他们的角色和他们的入口音乐之间的关系的最合乎逻辑的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26532788/

相关文章:

mysql - 在 Django 模型的管理器中扩展 SQL 查询?

mysql - PHP/MySQL – 连接到服务器时出错

php - 在 PostgreSQL 中存储一对多或多对多关系的最佳方式是什么?

c# - 双时态设置中的 PostgreSQL 排除约束?

jsf - 如何获取 JSF 类中资源的句柄?

ms-access - 在 Access 应用程序中查找查询的所有用途

mysql - 如何防止mysql数据库中出现重复数据

mysql - 无法连接MySQL服务器错误111

mysql - 数据库设计。请问如何处理这个问题?

javascript - 测试 Angular 表单提交