gpt4 book ai didi

mysql - 处理同一个表上的多个多对多关系?

转载 作者:行者123 更新时间:2023-11-29 16:20:44 25 4
gpt4 key购买 nike

我是一个偶然的 DBA。我使用的大多数数据模型都可以表示为简单的一对多关系,并使用此处或那里的奇怪连接表来建模偶尔的多对多关系。我遇到了一种对我来说很新的情况,并且不确定对其进行建模的正确方法。

我的应用程序规定可以通过几种需要单独指定的不同方式来修改特定属性。考虑 D&D 中的一个例子,其中怪物可以对各种伤害类型具有抵抗力、免疫力或脆弱性(例如“抵抗酸、火和闪电,易受寒冷影响)

在这个例子中,我的第一个想法是为怪物、修改类型和伤害类型构建单独的表,以及它们之间的连接表 - 如下所示。

CREATE TABLE monsters (
id char(32) NOT NULL,
monster_name varchar(100) NOT NULL,
PRIMARY KEY (id)
)

CREATE TABLE dmgModTypes (
id char(32) NOT NULL,
dmg_modifier varchar(20) NOT NULL,
PRIMARY KEY (id)
)

CREATE TABLE dmgTypes (
id char(32) NOT NULL,
dmg_type varchar(25) NOT NULL,
PRIMARY KEY (id)
)

CREATE TABLE monster_dmg_mod (
id char(32) NOT NULL,
monster_id char(32) NOT NULL,
dmgModType_id char(32) NOT NULL,
dmgType_id char(32) NOT NULL,
PRIMARY KEY (id),
KEY monster_dmg_mod_monster_id_fk_monsters_id (monster_id),
KEY monster_dmg_mod_dmgModType_id_fk_dmgModTypes_id (dmgModType_id),
KEY monster_dmg_mod_dmgType_id_fk_dmgTypes_id (dmgType_id),
CONSTRAINT monster_dmg_mod_monster_id_fk_monsters_id
FOREIGN KEY (monster_id)
REFERENCES monsters (id),
CONSTRAINT monster_dmg_mod_dmgModType_id_fk_dmgModTypes_id
FOREIGN KEY (dmgModType_id)
REFERENCES dmgModTypes (id),
CONSTRAINT monster_dmg_mod_dmgType_id_fk_dmgTypes_id
FOREIGN KEY (dmgType_id)
REFERENCES dmgTypes (id)
)

这个功能有效,但感觉……很糟糕。我想我还可以为每种修改类型制作单独的表格......

monster--|
|-Resistance
dmg_type-|

monster--|
|-Immunity
dmg_type-|

monster--|
|-Vulnerability
dmg_type-|

...但这也感觉不太对劲。是否有对这种行为进行建模的标准?

如果这是重复的,我深表歉意 - 我正在学习如何描述此类事情的具体术语。

最佳答案

@Jeremy 在原帖评论中的输入非常有启发性。在这种情况下,似乎并没有真正的“正确”方法来处理这种情况,答案很大程度上取决于上下文。在我的特定用例中,我最终为关系的每个维度创建了表,并使用类似联结的表来描述关系本身:

monster------|
|
dmg_type-----|--Junction (cols. for monster, dmg_mod_type, dmg_type)
|
dmg_mod_type-|

在我的特定业务案例中,我们很可能会定期添加或删除修饰符(可以说是“添加 dmg_mod_types”),这使得根据需要添加和删除变得非常容易。如果这些修饰符及其相关值更加静态,那么将它们分成单独的表,或者实际上向“monster”表添加一列来表示修饰符可能更有意义。

感谢您的意见 - 我将此问题标记为已关闭。

关于mysql - 处理同一个表上的多个多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com