首页 > 解决方案 > 如何创建大量表

问题描述

我有一个大型数据集可以用来创建一个存储系统来监控商店中的移动。那家商店有超过 300 种产品,所有桌子的主要结构都是相同的。唯一不同的是里面的数据。有一个名为 StorageTF 的更大数据库,我想创建很多名为 Product_1、Product_2、Product_3 等的表。表结构应如下所示

主要的大数据集(表)如下所示:

CREATE TABLE StoringTF (
Store_code INTEGER,
Store TEXT,
Product_Date TEXT,
Permission INTEGER,
Product_Code INTEGER,
Product_Name TEXT,
Incoming INTEGER,
Unit_Buying_Price INTEGER,
Total_Buying_Price INTEGER,
Outgoing INTEGER,
Unit_Sell_Price INTEGER,
Total_Sell_Price INTEGER,
Description TEXT)

我希望用户在名为 PCCode 的条目中输入代码,它看起来像这样

PCode = Entry(root, width=40)
PCode.grid(row=0,column=0)

然后一个函数将输入与主表中的所有代码进行比较,并获取那个并获取具有相同产品代码的表。所以顺序是。将创建主表中所有 product_Codes 的所有产品表,并将包含来自具有相同 product_code 的主表的所有数据。然后,当程序打开时,用户输入 product_code,程序会选择具有相同代码的表并将其显示给用户。非常感谢,我知道这很难,但我真的需要你的帮助,我相信你可以帮助我。谢谢。

产品表应如下所示

CREATE TABLE Product_x (Product_Code INTEGER, 
    Product_Name TEXT, --taken from main table from lines that has same product code
    Entry_Date, TEXT,
    Permission_Number INTEGER,
    Incoming INTEGER,
    Outgoing INTEGER,
    Description TEXT,
    Total_Quantity_In_Store INTEGER, --which is main table's incoming - outgoing
    Total_Value_In_Store INTEGER --main table's total_buying_price - total_sell_price
    )

谢谢你的帮助,希望你能弄清楚,因为我真的很挣扎。

标签: pythonsqlitetkinter

解决方案


从您的评论中:

我想我会从主表中选择一些列,但我不知道如何使用产品代码 = PCode.get() “这是输入框”的主表中的选择列更新仅有的一些列。那可能吗。

是的,绝对可以只向用户显示某些行和列的数据。

但是,您可以遵循许多模式(即编程技术)来向用户呈现数据,但每种常见的最佳实践技术总是将后端数据(即数据库)与用户界面分开。不必一次将数据的呈现限制在一个完整的表中。在大多数情况下,数据不应该完全按照表格中的样子呈现和/或暴露给用户。当然,有时数据足够简单直接,可以做到这一点,但大多数应用程序会在不同的 视图中重新格式化和分组数据,以便正确呈现。(这里的术语视图是一个非常笼统的抽象术语,用于以不同于存储方式的替代方式表示数据。我在下面提到了特定的 sqlite 视图。)

现代数据库背后的整个理念是高效、精心设计的存储,可以通过查询返回适合每个应用程序的数据。此功能大部分基于宿主语言数据模型,但 sqlite 直接支持功能来帮助解决此问题。例如,可以将视图定义为一次仅选择某些列和行(即选择某些 Produce_Code 值)。sqlite 视图只是一个保存的 SQL 查询,可以为其定义某些属性和操作。默认情况下,sqlite 视图是只读的,但可以定义触发器以允许通过视图更新基础表。

根据我之前的评论:您应该研究数据规范化。这是设计关系数据库的关键原则。例如,您应该避免重复的数据列,例如Product_Name. 该列应该只在 StoringTF 中。计算的列通常也是多余的和不必要的——不要存储Total_Value_In_Store列,而是在查询和/或视图需要时计算它。有重复的列会导致数据不匹配,或者至少是不必要的注意,以确保在更新列时同步所有列。相反,您可以只查询连接表以获取相关值。

老实说,这些概念在正确实施之前可能需要大量研究。无论如何,继续开发适合您需求的解决方案,但 Stack Overflow 答案不适用于我认为您可能需要的完整教程。真的,您的问题似乎更多关于整体设计,我认为我的回答可以让您走上正轨。任何更具体的内容,您稍后需要提出其他问题。


推荐阅读