首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库和类设计

数据库和类设计
EN

Stack Overflow用户
提问于 2015-01-24 12:06:51
回答 2查看 145关注 0票数 2

我正在建设一个网站出售自行车在django。我有一个包含自行车的类自行车,它看起来如下:

代码语言:javascript
复制
class Bike(models.Model):
    brand = models.CharField(max_length=100)
    model = models.CharField(max_length=100)

现在,我想添加一个实地车轮描述自行车的车轮,我希望这个领域可能包含几个领域,如品牌,车轮的大小。我希望这些关于车轮实现的细节与自行车的类规范分开;然而,我希望每个车轮都与一个自行车相关联。

我的一个想法是做以下工作:

代码语言:javascript
复制
class Wheels(models.Model):
    description = models.CharField(max_length=100)
    size = models.DecimalField(max_digits=5,decimal_places=2)

然后在我的自行车里加入一个新的领域:

代码语言:javascript
复制
class Bike(models.Model):
    # previous fields
    wheels = models.ForeignKey(Wheels)

不过,我对此有一些疑问:

( 1)设计正确吗?如果我这样做,我最终会得到一个车轮的数据库,我不认为我真的需要。我只想在我的自行车数据库中有灵活的字段。基本上,我希望我会有一对一的关系自行车和车轮。

2)如果这是正确的设计,那么我想要的是能够在添加自行车的同时增加轮子(不要单独添加轮子)。做这件事的最好方法是什么?

非常感谢你的暗示/参考。我是django的初学者..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-25 19:25:30

  1. 这个设计在我看来不错--把单个的物品放在单独的桌子里是个好主意(在这种情况下,构成自行车的部件--尤其是因为它们可以单独出售,自行车可以用不同的部件定制)。
  2. 我认为从自行车类继承的简单的预设类应该能做到这一点: 类别BicycleFrame(models.Model):品牌=models.ForeignKey(品牌)模型= models.CharField(max_length=100) # class BicycleWheels,BicyclePedals等。类别自行车(models.Model):车架= models.ForeignKey(BicycleFrame)车轮= models.ForeignKey(BicycleWheels)踏板= models.ForeignKey(BicyclePedals) #等。PresetBicycle类(自行车):通过类PurchaseableMixin(models.Model):user_id =models.ForeignKey(客户) def购买(Self):#.在表单处理程序中调用它,将自行车的这个#实例保存在数据库中,或者通过电子邮件通知客户他们的购买情况等等。类元:摘要=真类PurchasedBicycle(自行车,PurchaseableMixin):pass

。。然后,您可以在您的管理区域中创建一个PresetBicycle,然后在您向客户显示的视图中,默认情况下可以显示PresetBicycle,还可以提供一个表单来购买它,该表单自动填充PresetBicycle的详细信息,并在提交时创建PurchasedBicycle实例( JS框架,如ReactJS和主干,或者角可能对客户视图最好)。

希望这能有所帮助!

请注意,我自己还没有测试过这种方法--我建议在版本控制中创建几个新分支(例如git),并为每个分支设置单独的设置文件(从一个基本设置文件导入,并为每个设置文件使用单独的数据库,以避免在做出最后决定之前需要处理过多的迁移和过时的表)来测试几种方法--最好尽早解决这些问题,这样您就不会在稍后做出重大的结构更改。

P.P.S也不是说我已将品牌字段更改为ForeignKey,因为您以后可能希望对该品牌进行过滤。

票数 1
EN

Stack Overflow用户

发布于 2015-01-24 12:32:04

我怀疑(在现实生活中)你真的会有一对一的关系自行车和车轮-不止一个自行车型号肯定会使用相同的车轮。

类似的现实生活中的关系存在自行车品牌/模型和部件,如脱轨,刹车,曲柄,踏板等。

顺便说一句,您不会为每个组件拥有单独的数据库,每个组件将被建模为同一个数据库中的一个表。

所以我的建议是采用多表方法,因为你最终会在不同的自行车上使用相同的组件,如果在相同的基本自行车模型中有可选的组件,例如相同的自行车,但不同的车轮大小,则可能相反。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28125300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档