初次使用表
做一表,遇到这样的问题,物品单上有很多商品,比如30个以上的,如果用表记录,将是一个物品占用一条记录,但是发货地和其它字段都相同,冗余太多,求教应该怎么样实现才好
发货地  品名  日期
北京    1 
北京    2
……    3
……
北京    30
这是一张单的,有好多单怎么设计表呢。

解决方案 »

  1.   

    建3张表 发货地table  , 物品单table, 商品table
    发货地table的字段 : id  name ……
    物品单table的字段 : id  发货地table_id  商品table_id 日期……
    商品table的字段: id name ……
      

  2.   

    太谢谢了。
    就是说在实现上,一个表记录货单(号),另一个表记录每张单的物品,然后在前表中设货单号为主键,在后表中引此列做为外键,如此可以降低冗余,结构清晰。MYSQL,
    我想使用自编的单号为主键,可以自动加1的,请教在MYSQL中要怎样的语句实现(以前用视窗只点点就行,现在都要语法语句,真不会)
      

  3.   

    MySQL中也可以通过命令设置自动编号。AUTO_INCREMENT,下面是MySQL帮助手册中的一个例子。
    CREATE TABLE animals (
         id MEDIUMINT NOT NULL AUTO_INCREMENT,
         name CHAR(30) NOT NULL,
         PRIMARY KEY (id)
     );
      

  4.   

    谢谢楼上,我用了这个语句了,成功建表了!
    有一点不明白,ID字段后的那个 MEDIUMINT 和 INT 有什么不同,我用的时候直接用的 INT ,那个 AUTO_INCREMENT=10000 可以可以设一个初值,比如说从10000开始?谢谢了
      

  5.   

    MEDIUMINT 和 INT 有什么不同http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types
    11.2. 数值类型
    MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
     
      

  6.   

    那个 AUTO_INCREMENT=10000 可以可以设一个初值,比如说从10000开始? http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#create-table
    13.1.5. CREATE TABLE语法AUTO_INCREMENT 表的初始AUTO_INCREMENT值。在MySQL 5.1中,本选项只适用于MyISAM和MEMORY表。InnoDB也支持本选项。如果引擎不支持AUTO_INCREMENT表选项,则要设置引擎的第一个auto-increment值,需插入一个“假”行。该行的值比创建表后的值小一,然后删除该假行。对于在CREATE TABLE语句中支持AUTO_INCREMENT表选项的引擎,您也可以使用ALTER TABLE tbl_name AUTO_INCREMENT = n来重新设置AUTO_INCREMENT值。
     
      

  7.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html