Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 数据库规范化是否足够/正确?_Mysql_Database_Normalization - Fatal编程技术网

Mysql 数据库规范化是否足够/正确?

Mysql 数据库规范化是否足够/正确?,mysql,database,normalization,Mysql,Database,Normalization,我的数据库中有一些非常难看的表,所以我回去尝试将其规范化。我不确定这是否足够,或者做得是否正确,如果您能给我提供一些关于如何改进我的数据库设置的建议,我将不胜感激 我已经在SQLFiddle上设置了它:我已经为缺少的表添加了PKs,并将这两个字段组合为PK CREATE TABLE IF NOT EXISTS `boosts` ( `habitat_list_id` int(10) NOT NULL, `element_id` int(5) NOT NULL, PRIMARY KEY

我的数据库中有一些非常难看的表,所以我回去尝试将其规范化。我不确定这是否足够,或者做得是否正确,如果您能给我提供一些关于如何改进我的数据库设置的建议,我将不胜感激


我已经在SQLFiddle上设置了它:

我已经为缺少的表添加了PKs,并将这两个字段组合为PK

CREATE TABLE IF NOT EXISTS `boosts` (
  `habitat_list_id` int(10) NOT NULL,
  `element_id` int(5) NOT NULL,
  PRIMARY KEY  (`habitat_list_id`,`element_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

是的,它看起来“已经足够标准化了”,但在某些表中缺少PK,并且在其他表(存在自然键的地方)中提供了代理PK。在其他任何表中都没有引用它们,这使得它们(在我看来)是多余的。你指的是哪一个?我知道像dragon_to_habitat、boosts和dragon_elements这样的表没有PKs,因为它们从其他表中获取PKs。您认为哪些是多余的?RDBMS中的所有表都需要主键。这是基本的(1NF)。在链接表上,主键可以由外键和其他表的组合构成,因为在关系理论中并没有主键。PK是选择的某个候选密钥(aka密钥)。。。调用“主键”。候选关键点很重要。它们是最小的超级键。超级键是具有唯一值的列。在SQL中,它是通过unique或PK声明定义的唯一的。所以实际上,SQL“PK”列集甚至不一定是键。但是每个表都至少有一个键,应该声明它的键。@philipxy太好了。我的观点很简单,RDBMS中的所有表都应该包含一种机制,用于唯一地标识每一行。无论它在技术上是否精确,我认为我们可以同意,用通俗的说法,这被称为主键。