sql - 将两个数据库表变成一个?

标签 sql database database-design orm

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

  1. 产品

    ID | Name | Price
    
  2. 收货

    ID | Date | Quantity | Product_ID (FK)
    
  3. 销售

    ID | Date | Quantity | Product_ID (FK)
    

由于 Receivings 和 Sales 相同,我正在考虑一种不同的方法:

  1. 产品

    ID | Name | Price
    
  2. Receivings_Sales(名称无关紧要)

    ID | Date | Quantity | Type | Product_ID (FK)
    

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

任何人都可以帮我选择最好的选择,并指出这两种方法的优缺点吗? 第一个似乎是合理的,因为我正在以 ORM 方式思考。

谢谢!

最佳答案

我个人更喜欢第一个选项,即SalesReceiving 的单独表。

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

1) Inflexibility
2) Unnecessary filtering when use

首先是缺乏灵 active 。如果您的需求扩大了(或者您只是忽略了它),那么您将不得不分解您的模式,否则您将得到未规范化的表。例如,假设您的销售现在包括执行销售交易的销售员/人员,因此显然它与 'Receiving' 无关。如果您从事零售或批发销售,您将如何在合并表中容纳这些内容呢?折扣或促销怎么样?现在,我在这里确定显而易见的事情。现在,让我们转到 Receiving。如果我们想将收货与我们的Purchase Order 联系起来怎么办?显然,采购订单的详细信息,如 P.O.号码,邮政信箱日期、供应商名称等不会在 Sales 下,但显然与 Receiving 相关。

其次,关于使用时不必要的过滤。如果您合并了表格并且只想使用表格的 Sales(或 Receving)部分,那么您必须通过后端过滤掉 Receiving 部分或者你的前端程序。而如果它是一个单独的表,您一次只需处理一个表。

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

关于sql - 将两个数据库表变成一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742675/

相关文章:

php - 如何用sum连接多个表

sql - 我应该让 JPA 还是数据库级联删除?

database - Sybase 到 SSIS 连接错误

database - 为什么数据库上有 "relations"而不是只使用 SQL 的连接?

mysql - 多列交叉制表又名枢轴

php - 如果日期列日期不是当前的,Mysql INSERT

mysql - 如何在同一查询中过滤的 SQL 中查找值

java - 确保数据库中每个用户、每个页面的单次投票

database - 你用什么工具来规划和绘制数据库结构=表,关系

c# - 创建一个饲料墙