原理:让这个小公司先把所有原材料,半成品,成品都编上号,然后用户通过界面在数据库里面相应就建立一个表存放相关信息,可以反映是否原材料,半成品,成品信息和半成品,成品的组成成分建立两个表:
ProdTypeName,ProdInfo
执行脚本如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_ProdInfo_ProdType]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[ProdInfo] DROP CONSTRAINT FK_ProdInfo_ProdType
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ProdInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ProdInfo]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ProdType]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ProdType]
GOCREATE TABLE [dbo].[ProdInfo] (
[ProdID] [int] IDENTITY (1, 1) NOT NULL ,
[fProdID] [int] NOT NULL ,
[TypeID] [int] NOT NULL ,
[ProdName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[ProdType] (
[TypeID] [int] IDENTITY (1, 1) NOT NULL ,
[TypeName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
--脚本结束
注意fProdID是该材料[可以是原材料,半成品,成品]来原材料的ID,在同一个表中,默认为零,表示该材料在本系统就没有来源了[原材料或者购进]。例如:
TypeID TypeName
-----------------------
1 原材料
2 半成品
3 成品下面数据TypeID对应上面表的编号
ProdID fProdID TypeID ProdName
-----------------------------------------------------------
1 0 1 原木材
2 0 1 原回收垃圾
3 2 1 原回收分类垃圾[铁制品]
4 3 2 回收垃圾铁制提炼品
可以编写存储过程循环查询fProdID<> 0的数据,一直找到fProdID = 0 或者找不到数据为止,最后那条记录就是该产品的源头。
前提是你要做好数据录入的限制,没有源头就必须输入fProdID为零,
这两个表无论是分类汇总[用视图即可]还是查询流水线[存储过程]都可以。
ProdTypeName,ProdInfo
执行脚本如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_ProdInfo_ProdType]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[ProdInfo] DROP CONSTRAINT FK_ProdInfo_ProdType
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ProdInfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ProdInfo]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ProdType]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ProdType]
GOCREATE TABLE [dbo].[ProdInfo] (
[ProdID] [int] IDENTITY (1, 1) NOT NULL ,
[fProdID] [int] NOT NULL ,
[TypeID] [int] NOT NULL ,
[ProdName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[ProdType] (
[TypeID] [int] IDENTITY (1, 1) NOT NULL ,
[TypeName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
--脚本结束
注意fProdID是该材料[可以是原材料,半成品,成品]来原材料的ID,在同一个表中,默认为零,表示该材料在本系统就没有来源了[原材料或者购进]。例如:
TypeID TypeName
-----------------------
1 原材料
2 半成品
3 成品下面数据TypeID对应上面表的编号
ProdID fProdID TypeID ProdName
-----------------------------------------------------------
1 0 1 原木材
2 0 1 原回收垃圾
3 2 1 原回收分类垃圾[铁制品]
4 3 2 回收垃圾铁制提炼品
可以编写存储过程循环查询fProdID<> 0的数据,一直找到fProdID = 0 或者找不到数据为止,最后那条记录就是该产品的源头。
前提是你要做好数据录入的限制,没有源头就必须输入fProdID为零,
这两个表无论是分类汇总[用视图即可]还是查询流水线[存储过程]都可以。
解决方案 »
- 数据导出
- 行列转换,动态的实现,表的名称和字段都是动态的,上面的条件也是动态的????
- 哪里有sql sever 6.5 下载啊?急!
- 在新建视图时想建立一个临时的字段,这个字段不属于数据库里的任何一张表,它是表a中字段b和字段c的乘积。怎么写啊?
- 数据库角色问题
- 紧急求助:有两个表,想要查询显示这两个表中内容。
- 请问,我建立一个表,执行下面语句,但提示有语法错误,请帮忙修改?
- 怎样过滤掉重复的查询值?(急,大家帮帮我,分不够,再给!)
- 请问,如何在sql server7.0中设定自动生成的id号?
- sql如何限制只能增、删、改,就是不能sele查看数据
- 有关数据库所有者的问题?
- 如何得知 the last modification time of a database and table?
2:如果是小型公司,数据处理不多的话,不防这样处理:
将你的对应表分成:
主信息: ProdMaster
ProdID ProdName ProdType CreateDate
对应表演:ProdRef
ProdID, FprodID