我在为库存管理系统建模关系数据库时遇到了一些麻烦。目前,它只有 3 个简单的表:
产品
ID | Name | Price
收货
ID | Date | Quantity | Product_ID (FK)
销售
ID | Date | Quantity | Product_ID (FK)
由于 Receivings 和 Sales 相同,我正在考虑一种不同的方法:
产品
ID | Name | Price
Receivings_Sales(名称无关紧要)
ID | Date | Quantity | Type | Product_ID (FK)
列类型将标识它是接收还是销售。
任何人都可以帮我选择最好的选择,并指出这两种方法的优缺点吗? 第一个似乎是合理的,因为我正在以 ORM 方式思考。
谢谢!
最佳答案
我个人更喜欢第一个选项,即Sales
和Receiving
的单独表。
选项 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/