您是否介意通过一些初学者SQL发票数据库创建问题进行排序?

时间:2011-07-04 09:56:47

标签: sql-server database-design relationships

我对SQL有点新鲜。

我需要制作一张可以查询的发票,以创建一个如下所示的文档:

Screenshot

这是我制作的乌鸦脚图:

crow's foot diagram

我不确定客户送货地址和帐单地址是否应该是一个单独的实体。我对tblItem和tblInvoice的tblProductLine关系也不太确定。我的图表是否正确?

我是否匹配架构并正确设置关系?此外,有人可以解释何时需要外键? (因为我不确定把它们放在哪里)我假设它们在1到多个关系的末尾去引用之前调用它的表,但是我不确定...哪些表需要一个外来的键?

无论如何......任何帮助或评论都会很棒!

2 个答案:

答案 0 :(得分:1)

随机顺序的一些想法:

  1. 你的乌鸦脚在一些实体的错误网站上。员工可以有多张发票,但我认为发票由一名员工“拥有”。
  2. 为什么EmployeeInvoiceID?他们当然可以有多张发票吗?
  3. 考虑添加Address表,并为您的客户提供ShippingAddressBillingAddress(可选),两者均引用Address
  4. QuantityAmounttblProductLine之间的区别是什么?
  5. 您从哪里获得运输和处理的价格?
  6. 您将大小存储在额外字段中,但不是颜色。颜色可能是ItemDescription的一部分,但是你不能真正发现红色和蓝色 Jag Something 是相同的产品
    根据您的要求,它可能更好地规范化该表并将sizecolor移动到子表中。如果您需要重命名产品,则只需更改一条记录而不是多条记录。

答案 1 :(得分:1)

通常情况下,ORDERS和INVOICES非常密切相关;你把它们混合成一个单一的实体。

CUSTOMER为一个或多个产品下订单。这会生成订单标题和订单明细。商家发出引用订单的INVOICE。但是在一个非常简单的妈妈和流行音乐操作中你可以省去ORDERS并让INVOICE实体代表订单。

        ORDER|INVOICE DETAIL
        id  int PK
        headerid foreign key references INVOICEHEADERS or ORDERHEADERS *mutatis mutandis*
        productid foreign key references PRODUCTS(id)
        quantity
        extendedamount

外键是必要的,因为它们可以防止为不存在的产品创建订单或为不存在的客户开票。它们确保数据库行不包含任何不可能性。

通常,您将CUSTOMERADDRESSES作为单独的表引用回CUSTOMERS。客户可以拥有一个或多个地址。

每当一个实体可以“拥有一个或多个X”时,你就需要一个单独的表来捕获Xes。