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

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

所以我想考虑到灵活性是分三张表,一张基础表放共通字段,一张照片特有字段,一张视频特有字段。
icris
2019-06-20 13:18:05 +08:00
添加一个 post 表做列表内容,解决所有问题,顺便还能一对多
bruceczk
2019-06-20 13:31:04 +08:00
建议一开始放一张表里面用 type 区分,等后期需求明确了再拆分也不迟,拆分总是比合并方便的。
xem
2019-06-20 13:37:45 +08:00
可以放一个总表,用 type 区分,如果不同的字段不多,列就取一个合集,
如果不同的字段多,就分别为不同的 type 做一个详情表,这样,扩展和复用,效率等,比较均衡,
具体还是要看你的数据类型特点,和业务趋势
xh520630
2019-06-20 13:39:34 +08:00
两个类型一样吧 ,都是 URL(一个图片地址一个视频地址)其他数据(都是描述之类的)都一样.
type 区分一下就好了
annielong
2019-06-20 14:17:53 +08:00
要么一个表加 type 区分,要么分三个表,一个主表,一个视频,一个图片,
encro
2019-06-20 16:38:09 +08:00
这么多人居然选择 2 张表,甚至 3 张表:
当然是 1 张表:
media:id,type,name,url,size,width,height,created,updated
fanqianger
2019-06-20 16:48:08 +08:00
你看一下一本书,叫做 SQL ANI-PATTERN,里面对宽表用属性区分,和多表(类似于继承)都有分析。
slgz
2019-06-20 16:53:01 +08:00
@xh520630 #10 视频还有封面呢
johnniang
2019-06-20 17:10:44 +08:00
其实它们都属于同一种类别,那就是媒体文件。所以这里建议用一张表。当然你可以考虑再添加一张表用于表示媒体的元信息。
poisedflw
2019-06-20 17:12:39 +08:00
直接 JSON 岂不是爽歪歪。
leegoo
2019-06-20 17:13:36 +08:00
我觉得你应该用两张表(两个单体对象)或者三张表(两个单体对象+两个对象的公共属性作为父类).
现在用一张表只是为了目前爽一下,但是你已经把两个表(对象)偶尔到一起了,重构的时候会比较麻烦
而且用 type 的话在后端(java) 每次都需要根据类型去判断岂不是多了很多无用的代码?
tabris17
2019-06-20 17:15:25 +08:00
media 表
|
| 继承
|
photo 表
video 表
dyllen
2019-06-20 17:16:36 +08:00
@172721404 分开存,那天前端展示的时候要混合展示,还要分页就不好搞了。
justfindu
2019-06-20 17:26:55 +08:00
你把它看作是附件, 不就没这个问题了么.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX