“Invoice”表在专业数据库中的外观如何?

时间:2016-03-03 01:22:36

标签: mysql sql-server database

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

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

在外部计算机语言中,发票大多数时间都有几种产品。

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

1 个答案:

答案 0 :(得分:1)

通常的习惯用法是让父发票表包含子 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选择纯粹是任意的。