SQLite3数据库设计

时间:2013-12-02 20:32:08

标签: database database-design sqlite

我正在尝试将我们的Excel电子表格(用作生成班次数据存储)转换为数据库解决方案。不过,我很难知道自己是否在使用我的桌子的正确道路上。我已经包含了用于创建表的SQL,以供参考。

每月数据来自多个来源。我们希望在某些指标上保留历史数据。所以我需要创建一个零件历史记录类型的东西跟踪Onhand,Onorder等每个月。看起来我似乎错过了关系数据库的...关系部分。这些主要是需要查询和汇总/分析的事实。例如,我需要一个Customer表来将我的POS内容联系起来。我只需要分析那里的POS数据。

CREATE TABLE "Vendors" (
    "VID" INTEGER PRIMARY KEY NOT NULL,
    "Vendor_Group" INTEGER NOT NULL
);
CREATE TABLE "VendorInfo" (
    "Vendor_Group" INTEGER PRIMARY KEY NOT NULL,
    "Vendor_Display_Name" TEXT NOT NULL,
    "Vendor_Name" TEXT NOT NULL,
    "Vendor_Active" INTEGER NOT NULL,
    "Vendor_Last_Update" TEXT
);
CREATE TABLE "Parts" (
    "Vendor_Group" INTEGER NOT NULL,
    "Vendor_Part" TEXT NOT NULL,
    "OnHand" INTEGER NOT NULL DEFAULT (0),
    "OnOrder" INTEGER NOT NULL DEFAULT (0),
    "Date_Sales_Enabled" TEXT NOT NULL,
    "Dropship_Only" INTEGER NOT NULL,
    "Obsolete_Date" TEXT,
    "Obsolete" INTEGER NOT NULL DEFAULT (0),
    "Discontinued_Date" TEXT,
    "Discontinued" INTEGER NOT NULL DEFAULT (0),
    "Conversion_Date" TEXT,
    "Converted" INTEGER NOT NULL DEFAULT (0),
    "Conversion_Type" TEXT,
    "Sample_Level" INTEGER NOT NULL DEFAULT (0),
    PRIMARY KEY (Vendor_Group, Vendor_Part) 
);
CREATE TABLE "Consigned_POS" (
    "ID" INTEGER PRIMARY KEY AUTOINCREMENT,
    "Vendor_Group" INTEGER PRIMARY KEY NOT NULL,
    "Batch_ID" INTEGER NOT NULL,
    "Transaction_Type" TEXT,
    "Vendor_Part" TEXT NOT NULL,
    "Report_Part" TEXT NOT NULL,
    "Quantity_Sold" INTEGER NOT NULL,
    "Cost" REAL NOT NULL,
    "Resale" REAL NOT NULL,
    "Extended_Cost" REAL NOT NULL,
    "Extended_Resale" REAL NOT NULL,
    "Invoice_ID" TEXT NOT NULL,
    "Salesorder_ID" TEXT NOT NULL,
    "Customer_ID" TEXT NOT NULL,
    "Company_Name" TEXT NOT NULL,
    "Invoice_Date" TEXT NOT NULL
);

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我赞成其他无意义的主键(尽管表中的其他列也可能基本上是唯一的)。我建议不要将具有其他含义的列作为主键。它很小,但我通常也会在表格中使用单数(而非复数)名称。