我正在为一家餐馆做一个mysql数据库。
我有一个名为:*tbl_contents*的表,它存储了准备不同菜单项时使用的所有内容。
现在我必须维护一张表来记录所有的开支。这些支出可以是“购买内容”,也可以是一些常规支出,如电费或餐厅的租金。
如何在同一张表中存储两种支出?
我有tbl_fixed_expanditures和tbl_contents这张桌子。如果我为厨房购买了什么东西,它应该存储在tbl_contents中,如果我已经支付了电费,它就会保存在tbl_fixed_expenditures中。

发布于 2012-12-28 02:10:37
您实际上是在尝试在关系数据库中表示继承。
你有两个“类”,它们在某些方面相似,在其他方面不同。我的建议是创建一个表,作为tbl_expanditures和tbl_fixed_expanditures的父表。
这就是我要做的:
+------------------+
| tbl_expenditures |
+------------------+
| id |
+------------------+
+------------------------+
| tbl_fixed_expenditures |
+------------------------+
| id |
| expenditureId |
| ... |
+------------------------+
+---------------------------+
| tbl_variable_expenditures |
+---------------------------+
| id |
| expenditureId |
| ... |
+---------------------------+...where tbl_fixed_expenditures.expenditureId和tbl_variable_expenditures.expenditureId都引用了tbl_expenditures.id。
这样,当您需要将它们简单地称为“支出”时(例如,在您的事务处理表中),您可以引用tbl_expenditures,而当您需要固定支出或可变支出的唯一信息时,您可以引用“子”表。
这是关系数据库中非常常见的问题,有几种方法可以处理它,每种方法都有其优缺点。IBM有一篇非常好的文章概述了这些选项,我强烈建议您进一步阅读:
http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/
发布于 2012-12-28 02:09:32
嗯,很难给出一个恰当的答案,但我可以给你一些模糊的猜测,基于我到目前为止所理解的。
如果这两种支出具有不同的属性,但它们有一些共同的细节,您应该规范化表格。使用expenditures_tranx作为中间表(类似于OO术语中的顶级类),其余的表tbl_fixed_expanditures和tbl_contents可以是“专用”表(同样,在OO术语中,这些表将“继承”父表的属性),它们将存储有关支出的更多详细信息。这里有一个简单的模型实体关系草案来说明。
____________ ___________________ _______________________
|tbl_contents|-1----*-| expenditures_tranx|-*---1-|tbl_fixed_expenditures|
|exp_id:fk___| |___________________| |exp_id:fk_____________|这里有一篇有趣的文章解释了这些概念:http://apps.topcoder.com/wiki/display/training/Entity+Relationship+Modeling
让我知道你的想法。
https://stackoverflow.com/questions/14058928
复制相似问题