【问题标题】:SQL Virtual TableSQL 虚拟表
【发布时间】:2009-12-18 16:47:23
【问题描述】:

我的数据库是这样设置的:

我拥有的每个产品都有自己的表格,其中记录了销售/交易的数量#(所以第 1 列是“transactionID”,第 2 列是“数量”)

ex) p-backScratcher(其中 p- 表示“产品”)

还有每年的表格,其中保存了每笔交易的记录。这些表中的每一个都包含以下列:“transactionID”、“date”、“time”、“pt_CA”、“pt_DB”、“pt_VC”、“pt_MC”、“pt_CH”、“pt_AM”

例如)sales-2008、sales-2009 等。

我希望能够引用一个包含每年所有记录的表,而无需更改该表的 sql 以包含新的一年。

例如,我想查询“p-backScratcher”的所有交易,我不想输入

SELECT sales-2008.date, sales-2009.date 
  FROM sales-2008, sales-2009 
 WHERE sales-2008.transactionID = p-backScratcher.transactionID 
    OR sales-2009.transactionID = p-backScratcher.transactionID

...而是:

SELECT sales.date 
  FROM sales 
 WHERE sales.transactionID = p-backScratcher.transactionID

【问题讨论】:

  • 这种设计似乎很难使用。是否有理由选择这种设计而不是其他可能更容易使用的设计?
  • 我的第一个想法是将所有内容都包含在一个表中; “pt_AM”列之后的任何内容都是产品的数量。基本上任何时候我会做这样的事情,我最终会用完列(从长远来看)。每个产品都有一个表格可以确保a)我不会有任何带有多余空条目的表格,b)通过按年份分隔销售,查找时间会更短;考虑到报告通常是每月或特定年份生成的(尽管由于发布的问题,我可能会将所有交易信息合并到一个表中)

标签: sql ms-access ms-access-2003


【解决方案1】:

在 SQL 中,正如 Kyle 的回答所说,您可以创建一个 View,这是一种虚拟表,但我强烈建议您购买一本书,或谷歌,关系型数据库设计,然后再将自己提交给数据库结构。

【讨论】:

    【解决方案2】:

    我希望能够引用一个包含每年所有记录的表,而无需更改该表的 sql 以包含新的一年。

    这就是为什么您不应该每个产品使用一张桌子,每年使用一张桌子。

    您需要一张“Product”表和一张“Transaction”表。

    【讨论】:

    • 没错。这是一个糟糕的设计。
    【解决方案3】:

    您要查找的内容称为“视图”,它几乎是一个存储语句,是格式正确的结果列表。可以像查询表格一样直接查询。

    【讨论】:

      【解决方案4】:

      不确定这个项目有多大或您的具体要求是什么(例如,如果您有与之关联的代码),但您可能希望考虑将数据迁移到 MS SQL(或 MySQL 等)。 SQL Server 有一个免费的桌面版,但仅支持有限的功能集(其中包含视图)。

      MySQL、PostGre 等支持您正在寻找的功能,包括 PostGre 中的继承表(不完全是您需要的,但类似)。

      我有一段时间没有使用 Access,我不确定它是否支持您正在寻找的功能。

      【讨论】:

      • 为什么您认为“Access”不支持正确的表格设计?
      • 我实际上说我不确定它是否支持他正在寻找的功能。我没说不会。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2011-01-11
      • 2010-11-08
      相关资源
      最近更新 更多