我做了一个苗木库存系统,因为原本设计时只是想简单应用,所以数据库也设计的很简单 存储苗木信息的表结构:所有信息都是直接存储在这一张表里边 只有供应商信息是另外一张表存储的,但是随着使用过程中不断的应老板要求加入新的功能 这样的表结构就显显出其非常不合理的地方来了,这个大家肯定一眼就能看出这样的缺点了
表1:
-数据表字段:ID--苗木类别--苗木名称--胸径--地径--蓬径-高度--分支--数量--单位--供应商ID--进价--售价-----品质
存储数据示例:1----乔木-----广玉兰----5-----------------------------10---棵-----5---------25-----30----一级
想改成这样的:1----1----------3-------5-----------------------------10---1------5--------25------30------1
这样把 苗木类别、苗木名称、品质、供应商 都单独做一个数据表首先我想问下,我这样改可行吗?
如果不可行的话,该怎么改?
如果可行的话:但是我原来的表里边已经存了几千条数据了,苗木类别因为类别很少写几个更新语句就可以了 。但是苗木名称已经有几百个了 不可能挨个更改吧,有没有批量执行语句?把表1中的名称导入到表2,然后用表2中生成的GoodsId代替表一中的苗木名称
苗木名称表:表2示例:
GoodsId---GoodsName
--3---------广玉兰
另外,苗木共有五种参数表示其规格,但是不同类型的苗木其使用的规格参数是不同的,比如乔木要测量胸径,花灌木要测量地径或者高度等,我应该用这种为每个参数设一个字段呢 还是直接建一个字段 然后存储用逗号隔开的几个参数呢?存储了之后要能根据每个参数查询出来

解决方案 »

  1.   

    我用这条语句已经把数据导入表2了INSERT INTO tb_GoodsName
          (GoodsName, ClassId)
    SELECT DISTINCT GoodsName, StoreName
    FROM tb_InStore现在的问题是:怎样根据表1中的GoodsName和表2中的GoodsId 在表1中对应的插入GoodsId的值
      

  2.   

    --1、新建tb
    create table tb(苗木名称id int identity,苗木类别id int,苗木类别 varchar(40),苗木名称 varchar(40))
    )--2、导入tb。(注: 2个id,苗木名称id 唯一(导入时自动生成),苗木类别id 不唯一(需手动生成))insert tb select distinct 0,苗木类别,苗木名称 from ta--3、生成【苗木类别id】DECLARE @N INT ,@苗木类别 varchar(20)
    SET @N=0
    set @苗木类别=''UPDATE #TB 
    SET @N=CASE WHEN @苗木类别<>苗木类别 then @n+1 else @n end,@苗木类别=苗木类别,苗木类别id =@n--4、更新原表ta
    update ta
    set 苗木类别=b.苗木类别Id,苗木名称=苗木名称id
    from ta,tb b 
    where 苗木类别=b.苗木类别 and 苗木名称=b.苗木名称
      

  3.   

    这个问题虽然文章写的一般,目前适合读
    http://www.code-123.com/html/2008820181155580.html