读书人

问一个业务怎么设计表的有关问题

发布时间: 2012-01-29 21:39:32 作者: rapoo

问一个业务如何设计表的问题
现在有一个表

表名: 项目 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
10 A 10000
21 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
[解决办法]
在项目表里加入一列主项目不就得了 反正一个项目只可能有一个上级项目
主项目没有上级

读书人网 >SQL Server

热点推荐