Django PostgreSQL数据库表设计,外键,1对多

时间:2014-12-22 06:55:32

标签: django postgresql database-design

我的数据库中有4个表。下图显示了包含在红色框中的表名称的行和列。总共4张桌子。我是否正确地进行了关系设计?这是一个测试项目,我强烈假设我将使用JOIN在一个表上获取整个数据集。我想非常正确地开始这个。

一个初学者问题但是,例如,发布商表有4行Nintendo是正常的吗?

我正在使用Django 1.7和PostgreSQL 9.3。我的目标是保持简单,有成长的空间。

enter image description here

2 个答案:

答案 0 :(得分:1)

是的,你说出错是正确的。

首先,这些屏幕截图难以理解,对于这个简单的例子,它们可以工作,但这不是正确的工具,拿起笔和纸并绘制一些关系图并思考模式中涉及的实体是什么他们的关系是什么,例如你知道你有发布者,他们可以发布游戏,所以在这个受限制的例子中,你有2个实体,gamepublisher,以及关系publish其中(在这种情况下,如果你有一个游戏发行商,你可以在游戏上放置一个fk,或者为多个案例创建一个中介关系)。对于平台和游戏可以做出同样的观点,为什么你要在那里放置一个fk游戏,如果id为2的游戏将发布给任天堂64会发生什么?你在所有实体中都犯了同样的错误。

选择任何有关数据库设计基础知识的书籍,这可能有助于推理您的背景和未来的问题。

答案 1 :(得分:1)

基本上你在这里得到了关系......

每个game_idpublisherdeveloper模型都有platform(即ForeignKey关系)......但这意味着每个实体只能是与游戏相关。我很确定这不是你想要的。

你需要反过来...而是将三个外键放到game模型上,每个模板分别用于publisherdeveloperplatform

ForeignKey被称为many-to-one relation。在这个例子中,我认为你想要的是多少'游戏与“一个人”有关。出版商。对于开发人员和平台也是如此。

  

例如,发布商表有4行Nintendo,这是正常的吗?

不,这就是为什么你倒退的一个例子。每个发布商只能有一行。