Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Database design 使用相似的数据类型规范化各种属性_Database Design_Normalization_Database Normalization - Fatal编程技术网

Database design 使用相似的数据类型规范化各种属性

Database design 使用相似的数据类型规范化各种属性,database-design,normalization,database-normalization,Database Design,Normalization,Database Normalization,我正在建立一个数据库来存放与游戏相关的属性,例如它是否支持多人游戏、它是什么类型、发布日期等等 似乎为每种类别类型创建两个额外的表(例如,类型、类型和数据)并不像可能的那样动态。我最初的想法是用两种方式之一建立它 有一个包含骨架信息的游戏表,然后是一个列出所有属性的属性表,第三个表包含与游戏相关的所有数据,其中基本上只使用与每个属性相关的列: games ----------- game_id ... relevant data properties ----------- property_

我正在建立一个数据库来存放与游戏相关的属性,例如它是否支持多人游戏、它是什么类型、发布日期等等

似乎为每种类别类型创建两个额外的表(例如,类型、类型和数据)并不像可能的那样动态。我最初的想法是用两种方式之一建立它

有一个包含骨架信息的游戏表,然后是一个列出所有属性的属性表,第三个表包含与游戏相关的所有数据,其中基本上只使用与每个属性相关的列:

games
-----------
game_id
... relevant data

properties
-----------
property_id
title
type
category

properties_data
---------------
game_id
property_id
bool
min
max
date
text(max255)
longtext
或者,使games表相同,并使属性包含列名,然后使用第三个表中的列:

properties
--------------
property_id
title
type
category
column_name

properties_data
----------------
game_id
title
description
release_date_au
release_date_jp
genre_rpg
genre_fps
platform_360
platform_ps3
platform_pc
has_leaderboards
has_downloadable_content
... etc

在这种场景中,有六种左右类型的数据与一行相关,但每个类别中都有大量类别和支持属性,那么实际的方法是什么?(对我来说)为每个属性类型或类别创建一个表似乎效率不高。

从属性描述来看,第三个选项似乎是合适的

games
--------
game_id
name
...

release
----------
release_id
game_id
release_date
release_country

genre
---------
genre_id
name

game_genre
-----------
game_id
genre_id

从属性描述来看,第三个选项似乎是合适的

games
--------
game_id
name
...

release
----------
release_id
game_id
release_date
release_country

genre
---------
genre_id
name

game_genre
-----------
game_id
genre_id

这似乎是表的典型超类型子类型集群。除非你没有确认它是这样的。因此,正式地识别它,并使数据正常化

  • 在父类型(父类型)中放置公共列
  • 将特定于每个子类型的所有列放置在单独的子表中
  • 这样就没有可选的列了
  • 如果这样做,则需要另一个级别的子表
如果您选择“动态”填充的表,那么使用DDL中定义的busienss规则(而不是代码)将失去对数据库中静态表的所有控制。在这种情况下,请注意,这些松散定义的表以没有数据完整性的混乱而闻名。阅读这个最近的答案,了解一些背景

关键是,如果你做的是“动态”的东西,就要做得恰当


但我不认为你需要走那么远。使用普通的Rdb,您可以保持完全的关系能力和灵活性。更多的表是Rdb的本质,没有什么可怕的。如果操作得当,您将拥有完全的控制权和速度。这让我回到第一段。

这似乎是表的典型超类型子类型集群。除非你没有确认它是这样的。因此,正式地识别它,并使数据正常化

  • 在父类型(父类型)中放置公共列
  • 将特定于每个子类型的所有列放置在单独的子表中
  • 这样就没有可选的列了
  • 如果这样做,则需要另一个级别的子表
如果您选择“动态”填充的表,那么使用DDL中定义的busienss规则(而不是代码)将失去对数据库中静态表的所有控制。在这种情况下,请注意,这些松散定义的表以没有数据完整性的混乱而闻名。阅读这个最近的答案,了解一些背景

关键是,如果你做的是“动态”的东西,就要做得恰当


但我不认为你需要走那么远。使用普通的Rdb,您可以保持完全的关系能力和灵活性。更多的表是Rdb的本质,没有什么可怕的。如果操作得当,您将拥有完全的控制权和速度。这让我回到第一段。

我遇到的问题是有很多属性,但只有少数子类型的数据。例如,游戏平台的功能(排行榜、可下载内容等)、评级(E、M18等)。抱歉,请输入这里的内容。我的意思是,由于属性和类别太多,数据类型太少,使用类别对它们进行排序似乎更容易,通过这种方式,可以比使用静态表更动态地加载和处理它们。嗯,我想我会坚持这种规范化方法。尽管会有更多的表,但随着工作的进行,您将对每个表进行选择性控制,如在需要时完全删除它们。在元层进行管理是可能的,但它会带来自身的复杂性——在这种情况下,对我来说不值得。我的2美分,我现在明白你的意思了。我正试图思考如何以一种让它流畅增长的方式实现这一点,而不是每次我想引入新元素时都必须重新编码接口/服务器代码。我知道每个人都同意这是错误的,但我忍不住看到了在一个查询中获取关于某个内容的每个属性的吸引力(需要时进行过滤),然后从中进行排序。我遇到的问题是,有相当多的属性,但只有少数子类型的数据。例如,游戏平台的功能(排行榜、可下载内容等)、评级(E、M18等)。抱歉,请输入这里的内容。我的意思是,由于属性和类别太多,数据类型太少,使用类别对它们进行排序似乎更容易,通过这种方式,可以比使用静态表更动态地加载和处理它们。嗯,我想我会坚持这种规范化方法。尽管会有更多的表,但随着工作的进行,您将对每个表进行选择性控制,如在需要时完全删除它们。在元层进行管理是可能的,但它会带来自身的复杂性——在这种情况下,对我来说不值得。我的2美分,我现在明白你的意思了。我正试图思考如何以一种让它流畅增长的方式实现这一点,而不是每次我想引入新元素时都必须重新编码接口/服务器代码。我知道每个人都同意这是错误的,但我忍不住看到了这样一种吸引力:能够在一个查询中获取关于某个内容的所有属性(需要时进行过滤),然后从中进行排序;虽然这似乎是一个话题,但我要比t更深入地讨论