关于设计表结构的困惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xing393939
V2EX    数据库

关于设计表结构的困惑

  •  
  •   xing393939 2013-07-21 18:21:37 +08:00 1799 次点击
    这是一个创建于 4539 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一个私信的场景,二人之间的私信在表中会产生二条记录(方便查询)。
    uid,chat_uid,forbid_status,is_payed,content
    101 303 1 0 hello
    303 101 0 0 hello
    forbid_status表示被阻止私信联系,上面可以看出101用户不能发私信给303用户。
    is_payed表示是否付费过,如果is_payed=1,那么即使forbid_status=1,101用户仍然可以发私信给303。

    现在我是用的一张表实现的这些,现在想着用三张表实现是否更好:
    chat表
    uid,cha_uid,content
    forbid表
    uid,chat_uid,forbid_status
    payed表
    uid,chat_uid,is_payed

    因为chat表的记录远多于forbid表和payed表,这样可以节约存储空间。另外在判断二人能否私信的时候,也不必去查chat表了。

    有必要拆分表吗,我对一些数据库的一些设计概念不是很懂,只是感觉这样会更好些。。。。
    8 条回复    1970-01-01 08:00:00 +08:00
    lichao
        1
    lichao  
       2013-07-21 18:29:59 +08:00 via iPhone   1
    如果拆分能减少很多冗余数据,那就拆分
    hemingway
        2
    hemingway  
       2013-07-21 18:33:57 +08:00   1
    必须拆分,否则就是数据冗余了。
    因为forbid_status和is_payed这两个数据和其他数据没有关系。
    xing393939
        3
    xing393939  
    OP
       2013-07-21 18:56:56 +08:00
    @lichao
    @hemingway 谢谢,如果我想学关于数据库设计方面的规范和原则什么的,有啥好的文章或者书籍推荐啊
    hemingway
        4
    hemingway  
       2013-07-21 19:25:52 +08:00   1
    michaelbibby
        5
    michaelbibby  
       2013-07-21 20:14:00 +08:00   1
    多嘴一句,is_payed 应该改为 is_paid。
    hahastudio
        6
    hahastudio  
       2013-07-21 20:33:16 +08:00   1
    首先,原来的表里,我们可以知道
    uid, chat_uid → forbid_status
    uid → is_paid #我猜的,也许实际情况是一可以用户只对某一用户付费而使其强制收到私信?
    那么这么拆分比较好
    UserToUserForbid(uid, chat_uid, forbid_status)
    UserPaid(uid, is_paid)
    UserToUserChaContents(uid, chat_uid, timestamp, content) #在这里加入时间戳我觉得是符合应用场景的

    关于数据库的范式,BCNF,3NF,4NF用的比较多,可以看一看
    xing393939
        7
    xing393939  
    OP
       2013-07-22 09:28:18 +08:00
    @michaelbibby 英语不好。。
    @hahastudio 实际情况的确是一个用户只对某一用户付费而使其强制收到私信
    hahastudio
        8
    hahastudio  
       2013-07-22 11:30:10 +08:00   1
    @xing393939 那可以改成 UserToUserChatStatus(uid, chat_uid, forbid_status, paid_status)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5663 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 02:59 PVG 10:59 LAX 18:59 JFK 21:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86