问一个业务如何设计表的问题
现在有一个表
表名: 项目 project
字段
IDKey 主键
Name 项目名称
Amount 项目金额
Date 完成时间
CreateBy 创建者
CreateDate 创建时间
现在要针对每个项目签合同,原来一个合同对应一个项目.没有问题.
Contract表里面 加上外键为项目主健就行..
现在发生变更:项目可以按照金额拆分和合并
一个合同可能由几个项目合并而成,
而且一个项目也有可能被拆分成几个小项目分别签合同.
还有可能 一个合同对应着 一个项目加上另一个项目的拆分后的一个小项目
这就早成多对多的关系..
现在这个项目表该如何设计呢?
同事说: 在签合同的时候,通过选择的项目生成新的项目存放在项目表中,并且这个新生成的项目 有个字段叫 contactid . 它表明这个项目是从哪个项目派生出来的.
我觉得这样做有很多问题,请大家多给点建议.
------解决方案--------------------加一个树形结构的表专门存放项目分类和等级
------解决方案--------------------典型多对多关系
最典型的设计是
项目表
合同表
项目合同对应表
一共三个表
------解决方案--------------------恩...類似bom,多加個字段判斷,如果是(虛假)的合同或項目,判斷=phatom
erp中也有所謂的虛假工單,差不多是這樣處理
------解决方案--------------------项目表 主键id
合同表 主键id
项目合同对应表 两个外键加一个值
--
就这样
------解决方案--------------------项目表用树形结构表示
合同表用主表明细表表示
------解决方案--------------------其中项目表是树形结构
------解决方案--------------------1
------解决方案--------------------想把这些虚假的项目放到一个新表里是不是好点呢 叫做 ProjectTemp
--------------------------------
感覺差不多,要是放同一個表裡,就加上一個字段flag,加以區別而已.
------解决方案--------------------怎么会有虚假项目呢?即便它有子项目,它也可以完整的参与一个合同啊。
------解决方案--------------------既然它都能参与合同了,区别为虚假项目还有什么意义?
------解决方案--------------------对其中的一个项目为10000的,用户只签了一个5000的
我觉得此时应该把这个10000的标记为虚假项目,因为它不能参与合同了
而剩下那5000还可以签啊。
------解决方案--------------------项目是树的结构,合同是和树的叶子做关联
project
ID ParentID Name Amount
1 0 A 10000
2 1 A1 5000
3 1 A2 5000 --
4 2 A11 2000 --
5 2 A12 3000 --
6 0 B 8000 --
Contract
ID Name
1 Contract_1
2 Contract_2
ContractProjectRelation
ID ContractID ProjectID
1 1 3
2 1 5
3 2 4
4 2 6
------解决方案--------------------对于单个项目,是树的结构,你也可以N个数组成一个大树,里面包含N个Project
------解决方案-------------------- 对于单个项目,是树的结构,你也可以N个Project组成一个大树,里面包含N个Project
------解决方案--------------------在项目表里加入一列主项目不就得了 反正一个项目只可能有一个上级项目
主项目没有上级