【问题标题】:How does an "Invoice" table look like in a professional database?“发票”表在专业数据库中的外观如何?
【发布时间】:2016-03-03 01:22:36
【问题描述】:

我正在创建一个 .NET 簿记应用程序,并认为从其他人那里了解我的数据库表应该是什么样子可能是个好主意。

我有一个“产品”和一个“发票”表以及与我的问题无关的其他一些表。

在计算机语言之外,一张发票大部分时间包含多种产品。

我应该创建一个包含 InvoiceId 和 ProductId 列的桥接表“invoiceProduct”吗? 或者我应该在我的“发票”表中添加任意数量的列,其名称格式如下:“product1”、“product2”...直到达到某个限制?

【问题讨论】:

  • 肯定是前者,创建一个桥接表。

标签: mysql sql-server database


【解决方案1】:

通常的习惯用法是有一个父 Invoices 表和一个子 InvoiceItems 表,如下所示:

CREATE TABLE invoices
(
    invoice_number  INT,
    customer_id     INT    REFERENCES customers (customer_id),
    purchase_date   DATE,
    -- other fields go here,
    PRIMARY KEY (invoice_number)
);

CREATE TABLE invoice_items
(
    invoice_number   INT   REFERENCES invoices (invoice_number),
    line_number      INT,
    product_id       INT   REFERENCES products (product_id),
    quantity         INT,
    -- more fields,
    PRIMARY KEY (invoice_number, line_number)
);

请注意,这是一个通用的伪 SQL,需要针对您的特定平台进行编辑,并且我为大多数字段选择的 INT 纯属任意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2010-09-15
    • 2022-07-13
    • 2011-09-06
    • 1970-01-01
    • 2011-07-28
    • 2012-05-06
    • 2014-11-23
    相关资源
    最近更新 更多