1.设计一个投票记录表,将用户投过的票id以 1||2||4||5 格式存放.如果参与了1000个投票,不知道这样会不会让字段体积过大?每次投票前取出,分割字符串,用数组循环检查,如果没有相等的值,则没有投过..用户投完一次更新一次记录字段
2.设计一个表,字段是 用户id,票id,用户每投一次就插入一条记录.可是这样如果有10000个人投了1000个票就有一千万条记录了,每次投票前都得扫描一遍,查询用户是否投过,会不会过慢?用户投完一次插入一条记录哪种方式合适??或者还有其他方案吗?谢谢PHP+mySQL

解决方案 »

  1.   

    第二种方案比较合适数据库的设计规则。第一种方案连起码的第一范式都不满足。
    create table votelog (
    uid int,
    opt int,
    vtime datetime,
    v_ip varchar(30),
    v_hostname varchar(30),
    primary key (uid,opt)
    )然后投票选择提交后,PHP检查一下表中是否有记录。或者直接提交,然后根据返回的错误是否为0判断是否插入成功。
      

  2.   

    约束一下,联合一起做个UNIQUE INDEX就可以了。
      

  3.   


    为啥要设联合主键 primary key (uid,opt) 呢?那不是允许用户张三投A一次,再投B一次?
    直接把uid设为UNIQUE INDEX就可以了。不过这样重名的用户就有人不能投票了
      

  4.   

    uid
    voteId做唯一键,且都分别建立索引
    这个足以,每个用户每个投票只能有一个这样记录。当然,你要把投票日期啥的放进去也行。