Mysql 存储摔跤手、他们的角色和入场音乐之间关系的最合理的方式是什么? 必要的背景资料

Mysql 存储摔跤手、他们的角色和入场音乐之间关系的最合理的方式是什么? 必要的背景资料,mysql,database-design,properties,entity-relationship,database-schema,Mysql,Database Design,Properties,Entity Relationship,Database Schema,我知道这个标题是针对我的项目的,所以请允许我解释一下问题的背景 我经营一个网站,存储和显示各种摔跤手、标记团队、按次付费表演等(我称之为“实体”)的入场主题列表。我正在做一个完整的重构,从头开始编写代码,并重新考虑如何存储入口音乐列表 每个实体(每个人将包含一个记录)都可能在多个组织中。例如,摔跤手凯文·纳什(Kevin Nash)曾在WWE、WCW和TNA工作过。凯文·纳什也有多个“噱头”或角色,有时出现在多个组织中。例如,凯文·纳什(Kevin Nash)在WWE中被称为迪塞尔(Diesel

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

我经营一个网站,存储和显示各种摔跤手、标记团队、按次付费表演等(我称之为“实体”)的入场主题列表。我正在做一个完整的重构,从头开始编写代码,并重新考虑如何存储入口音乐列表

每个实体(每个人将包含一个记录)都可能在多个组织中。例如,摔跤手凯文·纳什(Kevin Nash)曾在WWE、WCW和TNA工作过。凯文·纳什也有多个“噱头”或角色,有时出现在多个组织中。例如,凯文·纳什(Kevin Nash)在WWE中被称为迪塞尔(Diesel)和他的真名;在TNA中,只有他的真名;在WCW中扮演维尼·维加斯、奥兹和他的真名

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

entity\u types
中,我将为凯文·纳什(Kevin Nash)等摔跤手存储“摔跤手”的实体类型。凯文·纳什将在
实体
中有一个条目,该条目将代表他作为一个人。接下来,Kevin Nash的多个噱头(记住,可以扩展到多个组织)将分别存储在
entity\u gimmicks
表中;唱片将包括“迪塞尔”、“维尼·维加斯”、“奥兹”和“凯文·纳什”(当他以自己的身份出现时,或作为自己的角色出现时)

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

  • “凯文·纳什在WWE”
  • “WWE中的柴油机”
  • “凯文·纳什在WCW”
  • “维尼维加斯在WCW”
  • 等等
当然,
组织
会存储摔跤运动员出现的公司

眼前的问题 现在回答我的问题。当用户查看摔跤手的主题列表页面时,我希望他们看到,例如,凯文·纳什在特定公司使用的所有入门主题(比如WWE)。这个列表理想情况下会显示所有主题的列表,以及此人使用的所有噱头。让我们假设凯文·纳什(Kevin Nash)第一次作为Diesel,使用了主题“Abc”和“Def”。然后,在离开公司并以凯文·纳什(Kevin Nash)的身份返回后,他使用了“Ghi”和“Jkl”这两个主题。如何对这些主题列表进行最佳排序

乍一看,可以简单地说,代码可以首先检索噱头,然后检索每个噱头中的主题,并根据噱头的顺序对它们进行排序。然而,问题在于,摔跤手在各种花招之间切换是有可能的。例如,约翰·多伊可能先被称为“十字军战士”,然后被称为约翰·多伊,然后又被称为“十字军战士”,每个人都有新的入场音乐。如果“十字军”是一个噱头条目,那么存储在该噱头下的主题如何与存储在“约翰·多伊”噱头下的主题相匹配

这是我面临的难题。我可以在
themes
表中添加
entity\u org\u sort\u order
列,但当我的管理员去编辑摔跤手的主题列表时,这可能是一场噩梦


有人能想出解决我问题的办法吗?即使这意味着重返图板,重新考虑我是如何存储所有这些信息的,我还是愿意考虑这个问题。我是一名摔跤爱好者,在搜索“摔跤”时偶然发现了它,我很好奇,想看看网站上是否有与摔跤相关的问题

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

  • 一个人有很多花招
  • 一个噱头与组织有着多对多的关系(正如你所说,凯文·纳什在WWE、WCW和TNA中以真名摔跤)
有了这两种关系,你就可以找到凯文·纳什在WWE中使用的伎俩,或者他用真名为哪些组织奋斗

入学主题变得复杂。您想将主题与人物或噱头关联吗?我个人会把一个主题和一个噱头联系起来,通常一个噱头的改变会让摔跤手采用一首新的音乐。我真的想不出有什么花招的变化,一个摔跤手在上面使用了相同的主题。现在你有了:

  • 一个噱头有很多入口主题
使用Laravel,这些关系将生成以下表格:

  • 噱头
    (外键指向
    人物
  • 组织机构
  • 入口主题
    (外键指向
    噱头
  • 组织的噱头(透视表)

然后,你可以通过列出摔跤手在某个组织中使用的技巧,以及该技巧子集的入口主题,来找到摔跤手在该组织中使用的主题。

我认为,你现在的桌子太多了。1) 我可以避免实体类型表将类型id作为枚举保留在实体中。2)也许,我会考虑加入EngyTyGimMikes和EntYTIL实例。这将不利于规范化,但肯定会避免在大多数查询中发生联接。我更改了它,以便
实体中的记录现在可以在
实体中有多个实例。每个实例必须有一个连接到
组织
表的
组织id
。谢谢你的建议!现在开始有意义了。我正在重新审视这个概念,以及你的答案