比如:  音乐, 图片
用户登录后可以收藏音乐和图片.这样的数据库如何设计我第一个想到的是:
音乐表 音乐收藏表
图片表 图片收藏表第二个是:音乐表
图片表
收藏表  在收藏表中加一个类型字段 判断是音乐还是图片,但这样的话,收藏表中的外键不对了,

解决方案 »

  1.   

    收藏表   id  type listid
     1    M      1
     2    P      1M:Music
    P: Picture
      

  2.   


    User([UserID], ...)
    Item([ItemID], ItemType, Item公共字段)
      CK_Item_ItemType CHECK(ItemType IN ('M','P'))
    Music([ItemID], Music特有字段)
      FK_Music_Item FOREIGN KEY(ItemID) REFERENCES Item(ItemID)
    Picutre([ItemID], Picture特有字段)
      FK_Picture_Item FOREIGN KEY(ItemID) REFERENCES Item(ItemID)
    UserFavorite([UserID],[ItemID], ...)
      FK_UserFavorite_User FOREIGN KEY(UserID) REFERENCES User(UserID)
      FK_UserFavorite_Item FOREIGN KEY(ItemID) REFERENCES Item(ItemID)其中红色字段为主键。