gpt4 book ai didi

python - Django MySQL数据库设计

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:14 25 4
gpt4 key购买 nike

我正在尝试优化 Django 应用程序上的 MySQL 数据库,该应用程序为用户提供商品的搜索结果。有人向我推荐了一种选择,就是将我的 Items 表垂直拆分为多个表。经过一番思考,我意识到我正在将表格用于三个不同的目的:

  1. 查询行以获取与某些搜索词相关的结果。
  2. 显示与搜索词相关的分页结果。
  3. 将用户引导至他们点击的任何外部页面。

据我所知,我最好的选择是根据这些需要拆分表(这是正确的假设吗?)。

目前我的模型是这样的:

class Items(models.Model):
categories = models.CharField(max_length=64)
title = models.CharField(max_length=128)
description = models.CharField(max_length=1024)
thumb = models.CharField(max_length=255, unique=True)
vendor = models.CharField(max_length=16)
url = models.CharField(max_length=255, unique=True)

水平拆分后,表格将如下所示:

# Query all fields in this table for the search term
class ItemSearch(models.Model):

categories = models.CharField(max_length=64)
title = models.CharField(max_length=128)
description = models.CharField(max_length=1024)

# Once a set of relevant results has been compiled, query this table to get all information needed to display it on the page.
class ItemDisplay(models.Model):

title = models.CharField(max_length=128)
thumb = models.CharField(max_length=255, unique=True)
vendor = models.CharField(max_length=16)
# foreign_key referencing ItemSearch.id?

# Once a user clicks on an item they want, send them to a RedirectView associated with the products ItemDisplay.id: r'^item/(?P<item_id>[0-9]+)$'
class ItemOut(models.Model):

url = models.CharField(max_length=255, unique=True)
# foreign_key referencing ItemDisplay.id?

很明显,这些表目前没有链接,所以一旦我查询 ItemSearch,我就无法在 ItemDisplay 中找到相关联的行,随后为ItemOut.

如何将这些表相互关联?

最佳答案

您不应该按“目的”拆分表格。如果这样可以删除重复或消除冗余,则应该拆分表。此过程称为“数据库规范化”。

我真的不明白为什么你会在这个时间点这样做,因为我找不到任何冗余。同样在 Django 中,稍后使用 Django 迁移很容易做到这一点。

这里有一个很好的“数据库规范化”示例来理解这个概念:Django - how to normalize database?

关于python - Django MySQL数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com