2013-08-16 54 views
2

我正在创建一个数据库来存储Magic the Gathering卡。
的设计,我想我应该用情况如下:MySQL检查数据库是否规范化和功能化

Database Schema

完全IMG:http://portolivre.net.br/imgs/MTGdb.png

为了帮助你们了解什么是需要在这个数据库:

  • 每卡可以出现在多个版本中,当它改变版本时可以改变:每个版本中的稀有性,艺术家和卡号。

  • 每张卡片可以有一种或多种类型。

  • 每张卡都可以有子类型(不是必需的)。

  • 马克也依赖卡和版本。

现在,我怀疑我的东西:

  • 这是正确归?

  • 可以保留一些没有任何主键的表吗? (cardSets,cardType和cardSub)

  • 考虑到当我需要卡信息时,我需要检查每张表,我应该学习哪些视图并使用它们?

也有基本的土地,女巫会出现不止一次在同一个版本,即任何版本可以有4个不同的森林,他们将拥有一切完全相同(包括卡号),只有在艺术家不同。

我应该创建一个地表并用它代替卡表来处理这种情况,还是应该在卡表中添加4次Forest?

谢谢大家=)

+0

如果您使用innodb作为存储,您应该创建一个PRIMARY键或UNIQUE键。如果你在innodb中没有创建PRIMARY键或UNIQUE键,那么我在mysql中发现了一些麻烦的代码。检查这个http://dba.stackexchange.com/questions/48072/why-does-mysql-ignore-the -index偶数上力换此阶由/ 48184#48184 –

回答

0

这是一个良好的开始正常化。添加数据然后尝试在它之上构建一些东西是了解需求的一种好方法。还要说明每个连接的所有关系(正如您之前所做的那样)是验证设计的好方法。

根据你要使用的数据模型,我会主张在所有表中添加pk - 如果使用ORM或其他代码生成工具,它们可能是必需的。视图确实可以帮助简化对数据的访问,但它们只是作为sql文本存储在数据库中的查询,因此不是严格要求的。