V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
BigDogWang
V2EX  ›  程序员

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

  •  1
     
  •   BigDogWang · Jun 20, 2019 · 5055 views
    This topic created in 2505 days ago, the information mentioned may be changed or developed.
    想做一个个人摄影作品展示的网站。作品有照片和视频。
    照片和视频想在同一个接口里混合返回。
    那么表应该怎么设计呢?
    因为照片和视频有共同的属性,也有不同的属性,那是应该放在一个表里还是放在两个表里?
    总觉得放在一个表里不太合适,但是放在两个表里返回的时候放在一个 list 里也有一点问题,请教一下大家
    29 replies    2019-06-21 15:10:13 +08:00
    BigDogWang
        1
    BigDogWang  
    OP
       Jun 20, 2019
    不要沉啊
    Koral
        2
    Koral  
       Jun 20, 2019   ❤️ 1
    放一张表里,用 type 区分
    172721404
        3
    172721404  
       Jun 20, 2019
    我觉得视屏和图片从数据库层面应该分成不同的表来存;接口返回的时候返回两个数组对象,一个是视屏 一个是图片 里面肯定会包含什么 名称啊 点赞啊 转发啊 评论啊 好多东西的
    lastpass
        4
    lastpass  
       Jun 20, 2019 via Android   ❤️ 2
    两个独立的对象。自然是两张表。
    使用一个接口混合返回的业务要求放在业务层呀。
    不要用数据库来实现。
    BigDogWang
        5
    BigDogWang  
    OP
       Jun 20, 2019
    @lastpass 好的,谢谢。受教了
    wenzhoou
        6
    wenzhoou  
       Jun 20, 2019 via Android
    有个伪需求,要找最后的 10 张视频或图片。分两张表的话那就是要找两次。

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