gpt4 book ai didi

database-design - 为重复数据设计

转载 作者:行者123 更新时间:2023-12-01 12:01:46 26 4
gpt4 key购买 nike

我正在设计一个产品数据库,我有一个设计问题。

有几种不同的产品类别,例如书籍、视频游戏、家用电子产品和宠物用品。有一些共同点,例如制造商和价格,而另一些则是每个类别所独有的,例如功耗。

个别产品会定期更新,价格可能会波动,而制造商将保持相当稳定(我想制造商可能会被另一家公司收购,而品牌名称会被收购公司吸收)。更新可能每小时发生一次。可以频繁地请求每个产品(取决于客户数量,因此没有限制)。

与我执行数据更新的速度相比,我更关心客户端访问数据的速度。

哪个更有意义,为什么?:

  • 所有类别的表格允许为空列(例如宠物用品的功耗为空)
  • 每个类别一个表,重复列(例如价格将在每个表中)
  • 一张表用于通用特征(价格、制造商等...),一张表用于独特属性

最佳答案

退后一步,把头从数据库中拉出来。你打算如何在你的应用程序中解决这个问题?通常,您将使用继承。父类(super class)将定义公共(public)属性,而子类将定义特殊特征。

所以您的问题可以改写为:如何在数据库中实现继承?

首先,尽量避免数据重复。如果您在交易(或代码)中犯了一个简单的错误,数据可能会变得不一致,而且没有人会知道哪个价格是正确的。

一张大表可能不是一个好的解决方案,因为您最终会想要添加一项新功能。这会导致数据库中越来越多的空间被浪费。另外,您要么必须为每个类构建查询,要么从数据库中检索大量 NULL。

这导致了多表方法。公共(public)基类映射到为实例提供 ID 的中央表。所有子类都使用更小的特殊表,这些表具有从基类填充的 ID 列。

加载数据时,将一个类的所有表连接在一起并一次性加载所有数据(使用所有表中的 ID)。这是非常有效的,因为数据查找是通过唯一的主键进行的,而简单的 ID=ID 连接不会花费太多。

关于database-design - 为重复数据设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630649/

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