【问题标题】:Database Schema relationship design数据库模式关系设计
【发布时间】:2016-05-14 07:26:59
【问题描述】:

你好,

我是数据库设计的新手,我正在尝试为模型设计一个非常简单的架构。

只是想知道这是否是设计它的最佳方式,因为这是我第一次并且不想在没有查看的情况下构建它。

Pokemon table:

  • 我收到了name, id (PK), type(FK), image and regionID(fk)
  • type 是来自Type 表的外键,具有one-to-many 关系。听起来对吗?我在想这是因为one pokemon can have multiple types? multiple pokemon can have multiple types 对我来说也很有意义。
  • regionID 是来自 Region 表的外键。 many pokemon can live in many regions 对我来说很有意义。还是应该是one pokemon can live in multiple regions?还是multiple regions can have multiple pokemon?

Region table:

  • 我这里只有一个PK。我还需要来自LocationWithinRegion 表的 FK 吗?
  • 我在这里有one to many 关系,因为1 region can have multiple locations 但one location can't have multiple regions。对吗?

Type table:

  • 我制作了所有这些类型的位,因此我可以表示一个布尔值。我希望能够查询 pokemon 表并查找所有相关数据,并在可以找到 pokemon 的区域中找到 true 或 false。

这是我第一次制作数据库模式,所以请告诉我它的外观!

谢谢

【问题讨论】:

  • pokmontype主键类型需要和pokmon表的外键匹配
  • 看起来已经是了。 Type table 的 PK 是口袋妖怪表中的 FK。

标签: sql sql-server database database-design


【解决方案1】:

一般:

  • 为每个表提供一个单数名称。 User 不是 Users 作为每个
    行代表一个用户。
  • 为每个表提供尽可能小的主键。多数情况 身份 int 可以做到的情况。
  • 在外键列上创建索引。这将有助于加入。

现在在你的情况下:

Pokemon 和 Type 之间存在多对多关系。所以我会从Pokemon 表中删除PokemonType string,然后创建一个表Type(Id int Identity PK, Description string Unique) 和一个表PokemonType(PokemonId int FK on Pokemon, TypeId int FK on Type, PK on both columns)

Pokemon 和 Region 之间也是多对多关系。

一般来说,要表示多对多关系,需要在两个表之间建立一个查找表。

类似于 A(id) -> 查找(A.id, B.id)

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多