在将关系数据库建模到库存管理系统时,我遇到了一些麻烦。目前,它只有3个简单的表:
产品
ID | Name | Price
Receivings
ID | Date | Quantity | Product_ID (FK)
销售
ID | Date | Quantity | Product_ID (FK)
由于收货和销售相同,我正在考虑采用不同的方法:
产品
ID | Name | Price
Receivings_Sales(名称无关紧要)
ID | Date | Quantity | Type | Product_ID (FK)
列类型将标识它是正在接收还是销售。
任何人都可以帮我选择最佳选择,指出这两种方法的优缺点吗? 第一个似乎是合理的,因为我正在以ORM的方式思考。
谢谢!
答案 0 :(得分:3)
我个人更喜欢第一个选项,即Sales
和Receiving
的单独表格。
选项编号2中的两个最大缺点或将两个表合并为一个:
1) Inflexibility
2) Unnecessary filtering when use
首先是缺乏灵活性。如果您的需求扩展了(或者您只是忽略了它),那么您将不得不打破您的架构,否则您将最终得到非标准化的表。例如,假设您的销售现在包括执行销售交易的销售员/人员,因此显然它与'Receiving'
无关。如果你做零售或批发销售怎么办?你会如何在合并的表中容纳它?折扣或促销怎么样?现在,我在这里找到了明显的证据。现在,我们转到Receiving
。如果我们希望将收到的内容绑定到Purchase Order
,该怎么办?显然,购买订单详情如P.O.号码,P.O。日期,供应商名称等不在Sales
下,但显然与Receiving
有关。
其次,在使用时进行不必要的过滤。如果您已合并表并且只想使用表的Sales
(或Receving
)部分,那么您必须通过后端或前端程序过滤掉接收部分。如果它是一个单独的表,你只需要一次处理一个表。
此外,您提到ORM
,第一个选项最适合该项目,因为显然该事项的对象或实体应与其他实体/对象不同。
答案 1 :(得分:1)
如果 这些表确实并且始终是相同的(我有疑问),那么将统一表命名为更通用的表,例如“InventoryTransaction”,以及然后对其中一种交易类型使用负数:可能是销售额,因为这样可以正确地标记您的库存,以便跟踪库存情况。
答案 2 :(得分:0)
标题相同的事实是无关。寻求使用单个表,因为标题是相同的误解。
-- person [source] loves person [target]
LOVES(source,target)
-- person [source] hates person [target]
HATES(source,target)
每个基表都有一个相应的谓词 aka fill-in-[named-]空白语句,用于描述应用程序的情况。基表保存了生成真实语句的行。
每个查询表达式通过JOIN,UNION,SELECT,EXCEPT,WHERE condition 等组合基表名,并且有一个相应的谓词,它通过(分别)AND,OR,EXISTS组合基表谓词, AND NOT,AND condition 等。查询结果保存了生成真实语句的行。
这样一组满足谓词的行是 关系 。没有其他理由将行放在表格中。
(其他答案在这里解决,因为它们必须,你的一个表可能有的谓词的建议和后果。但如果你因为它的谓词没有提出表格,为什么你提出它呢?答案是,因为不是出于谓词,没有充分的理由。)