我正在创建一个.NET簿记应用程序,并认为从其他人那里听到我的数据库表应该是什么样子可能是一个好主意。
我有一个“产品”和一张“发票”表以及其他一些与我的问题无关的表格。
在外部计算机语言中,发票大多数时间都有几种产品。
我应该使用InvoiceId和ProductId列创建桥表“invoiceProduct”吗? 或者我应该在我的“发票”表中添加任意数量的列,其名称格式如下:“product1”,“product2”......直到达到某个限制?
答案 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
选择纯粹是任意的。