Sql server 您是否介意整理一些SQL发票数据库创建初学者的问题?

Sql server 您是否介意整理一些SQL发票数据库创建初学者的问题?,sql-server,database-design,relationships,Sql Server,Database Design,Relationships,我对SQL有些陌生 我需要制作一张可以查询的发票,以创建类似以下内容的文档: 这是我做的鱼尾纹图: 我不确定客户发货和账单地址是否应该是一个单独的实体。我也不太确定tblProductLine与tblItem和tblInvoice的关系。我画对了吗 我是否匹配了模式并正确设置了关系?还有,有人能解释一下什么时候需要外键吗?(因为我不确定把它们放在哪里)我假设它们在1对多关系的末尾引用前面的表,但我不确定。。。哪些表需要外键 无论如何。。。任何帮助或意见都将是伟大的 随机排列的一些想法: 对于

我对SQL有些陌生

我需要制作一张可以查询的发票,以创建类似以下内容的文档:

这是我做的鱼尾纹图:

我不确定客户发货和账单地址是否应该是一个单独的实体。我也不太确定tblProductLine与tblItem和tblInvoice的关系。我画对了吗

我是否匹配了模式并正确设置了关系?还有,有人能解释一下什么时候需要外键吗?(因为我不确定把它们放在哪里)我假设它们在1对多关系的末尾引用前面的表,但我不确定。。。哪些表需要外键


无论如何。。。任何帮助或意见都将是伟大的

随机排列的一些想法:

  • 对于某些实体,您的鱼尾纹位于错误的位置。一名员工可以有多张发票,但我假设一张发票由一名员工“拥有”
  • 为什么您的
    员工
    发票ID
    ?他们当然可以有多张发票
  • 考虑添加一个
    地址
    -表,并为您的客户提供一个
    发货地址
    和一个
    账单地址
    (可选),两者都参考
    地址
  • tblProductLine
    中的
    数量和
    金额之间有什么区别
  • 你从哪里得到运输和搬运的价格
  • 您将在一个额外的字段中存储大小,而不是颜色。颜色可能是
    项目描述的一部分,但是您无法真正发现红色和蓝色Jag是同一产品
    根据您的要求,最好将该表规范化,并将
    大小
    颜色
    移动到子表中。如果需要重命名产品,只需更改一条记录,而不是多条记录

  • 通常,订单和发票虽然密切相关,但它们是解耦的;您正在将它们合并为一个实体

    客户为一个或多个产品下订单。这将生成订单标题和订单详细信息。商户根据订单开具发票。但是在一个非常简单的mom-and-pop操作中,您可以省去订单,让发票实体代表订单

            ORDER|INVOICE DETAIL
            id  int PK
            headerid foreign key references INVOICEHEADERS or ORDERHEADERS *mutatis mutandis*
            productid foreign key references PRODUCTS(id)
            quantity
            extendedamount
    
    外键是必要的,因为它们可以防止为不存在的产品创建订单,或为不存在的客户开具发票。它们确保数据库行不包含不可能的内容

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

    每当一个实体可以“有一个或多个X”时,这表明您需要一个单独的表来捕获X