Sql 将两个数据库表转换为一个?

Sql 将两个数据库表转换为一个?,sql,database,database-design,orm,Sql,Database,Database Design,Orm,在为库存管理系统建模关系数据库时,我遇到了一些麻烦。目前,它只有3个简单的表: 产品 ID | Name | Price ID | Name | Price 接收 ID | Date | Quantity | Product_ID (FK) 销售 ID | Date | Quantity | Product_ID (FK) 由于接收和销售是相同的,我考虑采用不同的方法: 产品 ID | Name | Price ID | Name | Price 接受销售(名称无关紧要)

在为库存管理系统建模关系数据库时,我遇到了一些麻烦。目前,它只有3个简单的表:

  • 产品

    ID | Name | Price
    
    ID | Name | Price
    
  • 接收

    ID | Date | Quantity | Product_ID (FK)
    
  • 销售

    ID | Date | Quantity | Product_ID (FK)
    
  • 由于接收和销售是相同的,我考虑采用不同的方法:

  • 产品

    ID | Name | Price
    
    ID | Name | Price
    
  • 接受销售(名称无关紧要)

  • 列类型将标识它是接收还是销售

    有谁能帮我选择最好的选择,指出其中任何一种方法的优缺点吗? 第一个似乎是合理的,因为我在用一种ORM的方式思考


    谢谢

    如果表确实是并且永远都是相同的(我对此表示怀疑),那么将统一表命名为更通用的名称,如“InventoryTransaction”,然后对其中一种交易类型使用负数:可能是sales,因为这将正确地标记您的库存,以跟踪库存。

    如果表确实是并且永远都是相同的(我对此表示怀疑),那么请将统一表命名为更通用的名称,如“InventoryTransaction”,然后对其中一种交易类型使用负数:可能是销售,因为这将正确地标记您的库存,以跟踪库存。

    我个人更喜欢第一种选择,即销售和收货的单独表格

    选项2或将两个表合并为一个表的两个最大缺点是:

    1) Inflexibility
    2) Unnecessary filtering when use
    
    首先是缺乏灵活性。如果您的需求扩展了(或者您只是简单地忽略了它),那么您将不得不分解您的模式,否则您将得到未规范化的表。例如,假设您的销售现在将包括进行销售交易的销售职员/人员,因此显然这与
    的“接收”无关。如果您进行零售或批发销售,您将如何在合并的表格中容纳这些内容?折扣或促销怎么样?现在,我在这里指出显而易见的问题。现在,让我们转到
    接收
    。如果我们想将我们的收货与我们的
    采购订单关联起来怎么办?显然,采购订单的详细信息,如采购订单编号、采购订单日期、供应商名称等,将不在
    销售
    项下,而明显与
    接收
    相关

    第二,关于使用时不必要的过滤。如果您合并了表,并且只想使用表的
    销售
    (或
    接收
    )部分,则必须通过后端或前端程序过滤掉接收部分。然而,如果它是一张单独的桌子,你一次只需要处理一张桌子


    此外,您提到了
    ORM
    ,第一个选项最适合这项工作,因为显然,在这方面,一个对象或实体应该与其他实体/对象不同。

    我个人更喜欢第一个选项,即
    销售
    接收
    的单独表格

    选项2或将两个表合并为一个表的两个最大缺点是:

    1) Inflexibility
    2) Unnecessary filtering when use
    
    首先是缺乏灵活性。如果您的需求扩展了(或者您只是简单地忽略了它),那么您将不得不分解您的模式,否则您将得到未规范化的表。例如,假设您的销售现在将包括进行销售交易的销售职员/人员,因此显然这与
    的“接收”无关。如果您进行零售或批发销售,您将如何在合并的表格中容纳这些内容?折扣或促销怎么样?现在,我在这里指出显而易见的问题。现在,让我们转到
    接收
    。如果我们想将我们的收货与我们的
    采购订单关联起来怎么办?显然,采购订单的详细信息,如采购订单编号、采购订单日期、供应商名称等,将不在
    销售
    项下,而明显与
    接收
    相关

    第二,关于使用时不必要的过滤。如果您合并了表,并且只想使用表的
    销售
    (或
    接收
    )部分,则必须通过后端或前端程序过滤掉接收部分。然而,如果它是一张单独的桌子,你一次只需要处理一张桌子


    此外,您提到的
    ORM
    ,第一个选项最适合这项工作,因为显然,一个对象或实体应该与其他实体/对象不同。

    标题相同的事实是不相关的。由于标题相同而试图使用单个表是错误的

    每个基表在描述应用程序情况的-[named-]blanks语句中都有一个对应的谓词aka fill。基表包含构成true语句的行

    每个查询表达式通过JOIN、UNION、SELECT、EXCEPT、WHERE条件等组合基表名称,并具有一个相应的谓词,该谓词通过(分别)and、OR、EXISTS、NOT和condition等组合基表谓词。查询结果包含构成true语句的行

    这样一组满足谓词的行是一种关系。没有其他理由将行放入表中


    (这里的其他答案必须说明,你的一个表格可能具有的谓词的建议和后果。但是,如果你没有因为谓词而提出表格,为什么要提出它呢?答案是,因为不是谓词,没有充分的理由。)

    标题相同的事实是不相关的。由于标题相同而试图使用单个表是错误的

    每个基表在描述应用程序情况的-[named-]blanks语句中都有一个对应的谓词aka fill。基表包含构成true语句的行

    每个查询表达式都通过连接、并集和,