gpt4 book ai didi

MySQL - 1 列表

转载 作者:行者123 更新时间:2023-11-29 07:25:41 24 4
gpt4 key购买 nike

所以我昨天尝试问这个问题,但是我对这个问题的措辞非常糟糕。我陷入了设计数据库的困境,我的系统基本上保存了不同类型的生物,并且存在三种类型的生物。它们是昆虫、空气生物和水生生物,因此这三者有三个单独的表。每个生物都有一个基础表和一个事件表,以便用户可以获得该基础生物的副本。现在我希望能够从另一个表引用这些表中的 id,我不知道除了创建一个只有一个 id 的新表之外,然后这三个基本生物中的每一个都有 id 作为该父表的外键。

这样做意味着我将拥有一个只有一列 (ID) 的表,然后从其他表中引用该列。

基础生物表:

ID

<小时/>

1
2
3
4

AirCreatures 表:

ID名称

<小时/>

1只鹰
2 鸟

水生生物表:

ID名称

<小时/>

3鲸鱼
4 鲨鱼

你觉得怎么样?这样可以吗?

enter image description here

因此,使用 baseAquatic、baseInsect... 表,这些表存储该生物的基本统计数据。然而,这些尚未分配给用户。为了做到这一点,需要在 activeCreature 中创建一个新字段,以便它可以生成一个 id 进入 activeAquatic、activeInsect... 表中。 userID 在 activeCreatures 表中指定,而不是在各个事件表中指定。对于活跃的生物,它可以具有仅适用于该生物的特殊统计数据,因此一种活跃的昆虫可以具有与另一种不同的强度。 activeCreatures 与 baseCreatures 相同,因为除了 userID 之外,它们具有相同的字段。此外,基础生物在一个区域出现的比例可能比另一个区域更高。 (百分比表),这就是为什么我需要在单独的表中指定基础生物 ID 的原因,以便我可以在百分比表中使用它。您认为有更有效的方法吗?我的另一个问题是,在百分比表上,我真的需要存储 tableID 和基本 id 吗?我不能只存储baseID,然后从baseCreatures 表中获取id 和tableID 吗?

另一个想法是,我也可以将通用列(例如生物名称)放入 baseCreatures 表中,但是在布局信息时这可能会造成困惑,因为名称不会与生物特定表中的其他信息一起使用。

最佳答案

第二次编辑(原始内容位于“-----”)好的,我想我现在明白了,并且看到了 Base 与 Active 的需求。

基础生物就像一个物种名称(空气表会有不同种类的鸟)。活跃生物是该物种的一个特定实例(例如我的猫鲍勃是(不存在的)陆地类型基础生物“猫”的活跃生物)。

在这种情况下,我认为你的表格应该是:

Type
id name
-------------------
1 Air
2 Aquatic etc

BaseAir
type_id id name type_specific_attribute
----------------------------------------------------
1 1 eagle (wing-span?)
1 2 canary (wing-span?) etc

BaseAquatic
type_id id name type_specific_attribute
----------------------------------------------------
2 1 dolphin (number of fins?)
2 2 shark (number of fins?) etc

基表的主键是类型 id 和基 id 的复合键,因此 shark 为 2-2,canary 为 1-2。

对于活跃的生物,同样的想法:

ActiveAir
type_id base_id id name specific_characteristic
--------------------------------------------------------
2 1 1 Flipper (swim speed?)
2 1 2 Opo (swim speed?)
2 2 1 Jaws (swim speed?) etc

再次,type_id-base_id-id 的复合 PK(Jaws 为 2-2-1)。

然后可以将 BaseCreatures 表构建为所有空气、水生、昆虫基表的 UNION,然后可以在 Percentage 表中使用。

所以我并没有真正改变您的 ERD,只是修改 PK 使其更有意义,并将“表”表修改为“类型”表(这可能更有意义)。

(总而言之:您的 ERD 将所有内容显示为一对一关系,而实际上它们是一对多关系,以防万一。)

希望这会有所帮助。 。 。

<小时/>

已编辑(这是上一篇文章的内容)-您对不同动物类型需要不同表格的解释对我很有帮助。

我可以想到两种方法来处理你的情况。一是尝试挽救我原来的答案:)另一个是适应你的三张 table 的情况。

在第一种情况下,您可以尝试将所有动物放入一个表中,其中的列设计用于所有生物类型:

如果您有这样的设置:

table 1: creature type table
type_id type_name
-------------------
1 insect
2 air
3 aquatic

table 2: base creature table
creature_id name type (from table 1) #appendages size
------------------------------------------------------------------------
1 beetle 1 2 wings, 6 legs small
2 dolphin 3 3 fins medium
3 sparrow 2 2 wings, 2 legs small
4 eagle 2 etc
5 trout 3

然后您可以通过引用表 2 中的生物 ID 来引用事件表中的给定生物。将生物类型拆分到单独的表中的一个原因是减少数据冗余。它还允许您(将来)向生物类型表添加有关每种类型的附加信息(例如,每种生物类型的描述字段:“昆虫是六足节肢动物......”),而无需更新基础中的每条记录或活跃生物表。

这种方法可能有效,但取决于您想要的列 - 有些列可能无法在所有生物类型中正常工作,这就是为什么您有三个单独的生物类型表。

在这种情况下,我会设置这样的表:

AirCreatures
id name type_id column1 col2 and other type-specific info
------------------------------------------------------------------------
1 eagle 1 (wing span?) (feather length) etc
2 sparrow 1 etc
3 bat 1 etc

AquaticCreatures
id name type_id column1 col2 and other type-specific info
------------------------------------------------------------------------
1 dolphin 2 (max time underwater?) (is a fish?) etc
2 shark 2 etc
3 geoduck 2 etc

然后就有了

CreatureTypes
id TypeName
1 Air
2 Aquatic
3 Insect

按照你的建议。

然后,当您转到基础表或事件表时,您可以使用由 id 和 type_id 组成的复合主键引用特定生物(1-2 是麻雀,2-3 是象拔蚌等)。

关于MySQL - 1 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622788/

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