V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BigDogWang
V2EX  ›  程序员

新手请教一个数据库表设计的问题

  •  1
     
  •   BigDogWang · 2019-06-20 11:51:01 +08:00 · 3912 次点击
    这是一个创建于 1743 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想做一个个人摄影作品展示的网站。作品有照片和视频。
    照片和视频想在同一个接口里混合返回。
    那么表应该怎么设计呢?
    因为照片和视频有共同的属性,也有不同的属性,那是应该放在一个表里还是放在两个表里?
    总觉得放在一个表里不太合适,但是放在两个表里返回的时候放在一个 list 里也有一点问题,请教一下大家
    29 条回复    2019-06-21 15:10:13 +08:00
    BigDogWang
        1
    BigDogWang  
    OP
       2019-06-20 12:00:09 +08:00
    不要沉啊
    Koral
        2
    Koral  
       2019-06-20 12:04:35 +08:00   ❤️ 1
    放一张表里,用 type 区分
    172721404
        3
    172721404  
       2019-06-20 12:05:02 +08:00
    我觉得视屏和图片从数据库层面应该分成不同的表来存;接口返回的时候返回两个数组对象,一个是视屏 一个是图片 里面肯定会包含什么 名称啊 点赞啊 转发啊 评论啊 好多东西的
    lastpass
        4
    lastpass  
       2019-06-20 12:16:15 +08:00 via Android   ❤️ 2
    两个独立的对象。自然是两张表。
    使用一个接口混合返回的业务要求放在业务层呀。
    不要用数据库来实现。
    BigDogWang
        5
    BigDogWang  
    OP
       2019-06-20 12:39:29 +08:00
    @lastpass 好的,谢谢。受教了
    wenzhoou
        6
    wenzhoou  
       2019-06-20 12:55:06 +08:00 via Android
    有个伪需求,要找最后的 10 张视频或图片。分两张表的话那就是要找两次。

    所以我想考虑到灵活性是分三张表,一张基础表放共通字段,一张照片特有字段,一张视频特有字段。
    icris
        7
    icris  
       2019-06-20 13:18:05 +08:00
    添加一个 post 表做列表内容,解决所有问题,顺便还能一对多
    bruceczk
        8
    bruceczk  
       2019-06-20 13:31:04 +08:00
    建议一开始放一张表里面用 type 区分,等后期需求明确了再拆分也不迟,拆分总是比合并方便的。
    xem
        9
    xem  
       2019-06-20 13:37:45 +08:00
    可以放一个总表,用 type 区分,如果不同的字段不多,列就取一个合集,
    如果不同的字段多,就分别为不同的 type 做一个详情表,这样,扩展和复用,效率等,比较均衡,
    具体还是要看你的数据类型特点,和业务趋势
    xh520630
        10
    xh520630  
       2019-06-20 13:39:34 +08:00
    两个类型一样吧 ,都是 URL(一个图片地址一个视频地址)其他数据(都是描述之类的)都一样.
    type 区分一下就好了
    annielong
        11
    annielong  
       2019-06-20 14:17:53 +08:00
    要么一个表加 type 区分,要么分三个表,一个主表,一个视频,一个图片,
    encro
        12
    encro  
       2019-06-20 16:38:09 +08:00
    这么多人居然选择 2 张表,甚至 3 张表:
    当然是 1 张表:
    media:id,type,name,url,size,width,height,created,updated
    fanqianger
        13
    fanqianger  
       2019-06-20 16:48:08 +08:00
    你看一下一本书,叫做 SQL ANI-PATTERN,里面对宽表用属性区分,和多表(类似于继承)都有分析。
    slgz
        14
    slgz  
       2019-06-20 16:53:01 +08:00
    @xh520630 #10 视频还有封面呢
    johnniang
        15
    johnniang  
       2019-06-20 17:10:44 +08:00 via Android
    其实它们都属于同一种类别,那就是媒体文件。所以这里建议用一张表。当然你可以考虑再添加一张表用于表示媒体的元信息。
    poisedflw
        16
    poisedflw  
       2019-06-20 17:12:39 +08:00
    直接 JSON 岂不是爽歪歪。
    leegoo
        17
    leegoo  
       2019-06-20 17:13:36 +08:00
    我觉得你应该用两张表(两个单体对象)或者三张表(两个单体对象+两个对象的公共属性作为父类).
    现在用一张表只是为了目前爽一下,但是你已经把两个表(对象)偶尔到一起了,重构的时候会比较麻烦
    而且用 type 的话在后端(java) 每次都需要根据类型去判断岂不是多了很多无用的代码?
    tabris17
        18
    tabris17  
       2019-06-20 17:15:25 +08:00
    media 表
    |
    | 继承
    |
    photo 表
    video 表
    dyllen
        19
    dyllen  
       2019-06-20 17:16:36 +08:00
    @172721404 分开存,那天前端展示的时候要混合展示,还要分页就不好搞了。
    justfindu
        20
    justfindu  
       2019-06-20 17:26:55 +08:00
    你把它看作是附件, 不就没这个问题了么.
    xh520630
        21
    xh520630  
       2019-06-20 17:52:35 +08:00
    @slgz 图册也需要有封面啊.
    yujieyu7
        22
    yujieyu7  
       2019-06-20 18:09:15 +08:00
    “照片和视频想在同一个接口里混合返回”,这种业务下,已经在逻辑上把照片和视频归为同一类了,即个人作品。所以建议一张表,不然以后如果增加分页、筛选、排序等需求的时候就很难维护了。
    wuzhizhan
        23
    wuzhizhan  
       2019-06-20 18:59:15 +08:00 via iPhone
    两张表分页麻烦。要么一张表,要么三张表
    yufeng0681
        24
    yufeng0681  
       2019-06-20 21:55:52 +08:00
    列表查看图片和视频,建议放一个表里面。 页面上展示的时候其实大多是缩略图或者 gif 动图,不会直接用到视频源的
    具体视频可能因为多个分辨率版本,还要单独弄详情表(视频媒体表)
    limuyan44
        25
    limuyan44  
       2019-06-21 00:26:15 +08:00
    都是 src type 没必要分,没必要搞得那么麻烦,一张表简单许多又不是什么复杂的项目,个人项目哪会有那么多奇奇怪怪的需求。
    CasualYours
        26
    CasualYours  
       2019-06-21 08:47:13 +08:00
    个人项目建议还是怎么简单怎么来,另外,我也喜欢摄影,希望楼主网站做好后分享一下。
    fmumu
        27
    fmumu  
       2019-06-21 13:31:04 +08:00 via Android
    mongodb 试试,mysql 可以三张表啊
    BigDogWang
        28
    BigDogWang  
    OP
       2019-06-21 14:28:51 +08:00
    好多回复,其实不仅仅是做个人项目,还想通过个人项目来锻炼自己的能力,所以想要求自己更多一点。
    半路出家,没有系统学过数据库。吸收了大家的建议,我决定先试试三张表#狗头
    tedchen
        29
    tedchen  
       2019-06-21 15:10:13 +08:00
    用 nosql
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:10 · PVG 05:10 · LAX 14:10 · JFK 17:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.