SQL 数据库布局,包括作为条目的列表

Posted

技术标签:

【中文标题】SQL 数据库布局,包括作为条目的列表【英文标题】:SQL Database Layout including Lists as entries 【发布时间】:2018-03-08 17:49:54 【问题描述】:

我想写一个简单的主页来跟踪各种在线商店的价格。我有一个刮板,它可以读取特定产品的价格,我计划每天运行一次这个刮板,也许我想跟踪一些产品。

现在我需要存储这些信息,但我不确定一个好的方法会是什么样子。我想我应该为我跟踪的每个产品创建一个表,其中包含两行:date | price.

我还有一些悬而未决的问题:这样一张桌子应该叫什么名字?产品名称?如果产品名称包含空格会怎样?或者可能是指向产品的 URL 部分?不过,这似乎有点难以理解。或者我应该将表名命名为 id(递增数字)并保留一个单独的表名products,其中包含以下行:product_nameproduct_urltrack_table_id

这似乎是个好主意,因为我可以稍后为产品添加更多信息(例如描述)。

欢迎任何有关此主题的帮助,因为我以前从未接触过数据库。我的考虑是否合理。可能会出现什么其他问题?

编辑:我无法将完整的产品数据存储在单个表中,因为每个产品在不同时间点都包含可变数量的价格点。

【问题讨论】:

恕我直言,您应该有一个 products 表,其中包含列或 字段 product_idproduct_nameurl 等...这是基本的数据库管理——您似乎对数据在 DBMS 中的存储方式缺乏了解? @Zak 然后我会有一行包含列表(不同价格点的不同价格),我在想没有人想要列表作为数据库条目。您将如何处理? 【参考方案1】:

我也建议对 RDBMS 和数据库设计进行一些研究。这是一个很好的开始资源:

https://www.calebcurry.com/blogs/database-design/what-is-a-relational-database

在那个系列之后,试试他的下一个级别的视频:

https://www.youtube.com/watch?v=e7Pr1VgPK4w

在您承担创建数据库的任务之前,需要进行一些基线 DB 设计。

【讨论】:

【参考方案2】:

如果我理解正确,您需要 3 个表...这是一个基本的关系数据库。

1) a product table
2) a pricing table
3) a price point type table

您的产品表将包含产品的基本信息 IE product_id product_name etc etc etc ...

您的产品定价表将包含您要存储的价格 - 它还将包含一个将其与价格点相关联的字段type

您的价格点类型表将包含不同的类型

例如,表一将如下所示:

+----------------------------------------------------------+
|                        Products                          | 
+----------------------------------------------------------+
|   product_id    |    product_name    |    product_url    |
+----------------------------------------------------------+
|      101        |    Baby Food       |  www.example.com  |
|      102        |  Green Tomatoes    |  www.widget.com   |
+----------------------------------------------------------+

那么你就有了一个价格点类型表

+-------------------------------------------------------+
|                  price_point_types                    |
+-------------------------------------------------------+
|    price_point_id    |    type    |    description    |
+-------------------------------------------------------+
|         1            |   small    | Small price point |
|         2            |   medium   |   Medium Point    |
|         3            |   large    |   Large  POint    |
+-------------------------------------------------------+

你有你的定价表:

+------------------------------------------------------------------+
|                            pricing                               |
+------------------------------------------------------------------+
|    id    |    price_point_id    |    product_id    |    price    |
+------------------------------------------------------------------|
|    1     |           1          |       101        |    5.00     |
|    2     |           2          |       101        |    10.00    |
|    3     |           3          |       101        |    15.00    |
|    4     |           1          |       102        |    6.00     |
|    5     |           2          |       102        |    9.00     |
|    6     |           3          |       102        |    12.00    |
+------------------------------------------------------------------+

现在您可以看到产品Baby Food 有3 个价格点smallmediumlarge,分别与5.0010.0015.00 的价格相关。产品Green Tomatoes 也是如此。这样您就可以拥有无​​限的价格点类型和每个产品的无限价格点......有意义吗?

【讨论】:

谢谢。这很有意义,但我对价格点表仍然有些困惑。它到底是干什么用的?这是否适用于例如具有多种尺寸并因此具有多种价格的产品? 是的 .. 没错 .. 它技术上 不是一个数据透视表 .. 但你仍然可以把它当作一个 .. 所以你可以有小、中、大、绿色、蓝色、橙色、短、高、中 - 都在同一张表中。它只是为您的价格点提供了一个描述 好的,谢谢。这似乎是个好主意。我还没有遇到过这样的产品,因此甚至没有想过需要这样的桌子。

以上是关于SQL 数据库布局,包括作为条目的列表的主要内容,如果未能解决你的问题,请参考以下文章

输出包含 null 的条目的列名(SQL,雄辩)

通过子查询中的 id 列表选择条目?

(节省内存)将`sorted`作为生成器来实现

Android 手机卫士--实现设置界面的一个条目布局结构

如何使用 SQL 查询从另一个表中更新作为下拉列表的字段

我怎样才能让这个程序也打印列表中的第一个条目?