Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-1列表_Mysql_Database_Database Design - Fatal编程技术网

MySQL-1列表

MySQL-1列表,mysql,database,database-design,Mysql,Database,Database Design,所以我昨天试着问这个问题,但是我对这个问题的措辞非常糟糕。我一直在设计一个数据库,我的系统基本上是容纳不同类型的生物,有三种类型的生物。这些是昆虫、空气生物和水生生物,因此这三种生物有三个单独的表格。这些生物中的每一个都有一个基本表和一个活动表,因此用户可以获得该基本生物的副本。现在我希望能够从这些表中引用另一个表的id,我不知道如何创建一个新表,只使用一个id,然后这三个基本生物中的每一个都有一个id作为父表的外键 但这样做意味着我将有一个表,该表只有一个列(ID),然后从其他表引用 基本生物

所以我昨天试着问这个问题,但是我对这个问题的措辞非常糟糕。我一直在设计一个数据库,我的系统基本上是容纳不同类型的生物,有三种类型的生物。这些是昆虫、空气生物和水生生物,因此这三种生物有三个单独的表格。这些生物中的每一个都有一个基本表和一个活动表,因此用户可以获得该基本生物的副本。现在我希望能够从这些表中引用另一个表的id,我不知道如何创建一个新表,只使用一个id,然后这三个基本生物中的每一个都有一个id作为父表的外键

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

基本生物表: 身份证


1
2
3
四,

飞行特征表: 身份证名称


1鹰
2只鸟

水生物表: 身份证名称


3鲸鱼
4鲨鱼

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

所以对于一只水生的、低等的昆虫。。。这些表存储该生物的基本统计信息。但是,这些尚未分配给用户。为了做到这一点,需要在活动生物中创建一个新字段,以便它可以生成一个id进入活动水生生物、活动昆虫。。。桌子。用户ID是在ActiveBiodies表中指定的,而不是在各个活动表中指定的。对于一个活跃的生物,它可以有只适用于该生物的特殊属性,因此一个活跃的昆虫可以有不同于另一个的力量。ActiveBioters与BaseBioters相同,因为它们具有相同的字段(不包括用户ID)。同时,一个基础生物在一个区域的出现率比另一个区域高。(百分比表),这就是我需要在单独的表中指定基本生物ID的原因,以便我可以在百分比表中使用它。你认为有更有效的方法吗?我的另一个问题是,在百分比表上,我是否真的需要存储tableID和base id。我是否可以只存储baseID,然后从baseBioters表中获取id和tableID

另一个想法是,我也可以在BaseBioters表中放置通用列,如生物名称,但在布置信息时可能会混淆,因为名称不会与特定于生物的表中的其他信息混淆。

第二次编辑(原始内容在'----'后面) 好的,我想我现在明白了,并且看到了基础对主动的需要

基本生物类似于一个物种名称(气垫船上会有不同种类的鸟)。主动生物是该物种的一个特定实例(比如我的猫鲍勃是(不存在的)陆地类型基础生物“猫”的主动生物)

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

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
同样,类型为_id-base_id-id(Jaws为2-2-1)的复合PK

然后,可以将BaseBioters表构建为所有空气、水生物和昆虫基础表的联合,然后可以在百分比表中使用这些基础表

因此,我并没有对ERD做太多修改,只是修改PKs使其更有意义,并将“Tables”表修改为“Type”表(可能更有意义)

(暂且不谈总数:你的ERD显示的一切都是一对一的关系,而实际上是一对多的关系,以防万一。)

我希望这有助于


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

我可以想出两种方法来处理你的情况。一个是试图挽回我原来的答案:)另一个是同意你的三张桌子的情况

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

如果您有这样的设置:

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

这种方法可能有效,但取决于你想要的列——有些可能无法在所有生物类型中都有效,这就是为什么你有三个独立的生物类型表

在这种情况下,我会设置如下表格:

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
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是sparrow,2-3是geoduck,等等)。

我建议您的属性列表(空气、水生)将变得太长,无法作为表实现

建议您在没有标准化(ids)的情况下开始;画草图要容易得多。如果有保证的话,以后可以正常化

Animal  : attribute
------  : ---------
Beetle  : insect
Beetle  : flying
Sparrow : flying
Bat     : flying
Bat     : mammal
Whale   : mammal
Whale   : aquatic

SELECT animal FROM tbl WHERE attribute = 'flying';
会给你3排:甲虫,麻雀,蝙蝠

稍后,您可能需要一个包含以下列的动物表:id、common_name、latin_name、general_size、Devented。。。在这一点上,您将更改为

Animal_id : attribute
------  : ---------
1       : insect
1       : flying
2       : flying
...
and
Animal_id : common_name : latin_name ...
1           Beetle        ...
2           Sparrow       ...
3...

您不一定需要“规范化”属性。

为我上面绘制的表格不好表示歉意,我已经编辑了我的原始注释,以显示我正在使用的表格结构。BaseBiodies表中只有一个id,其中特定类型生物的其余信息在其自己的表中引用,并从中提取id