V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
v2hh
V2EX  ›  MySQL

有偿求教数据库结构设计

  •  
  •   v2hh · 2020-03-26 01:14:02 +08:00 · 4300 次点击
    这是一个创建于 1463 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://oss.dbbaxbb.cn/WechatIMG116.jpeg 如图,每个单元格的价格是可以编辑的,时间和场地都不是固定的,用户选择对应的单元格下单之后改变颜色。 最终合理的建议会发 66 红包,资金有限。

    20 条回复    2020-04-01 09:30:52 +08:00
    littlewing
        1
    littlewing  
       2020-03-26 01:22:15 +08:00 via iPhone
    别设计表了,直接上 mongo
    v2hh
        2
    v2hh  
    OP
       2020-03-26 01:23:48 +08:00
    @littlewing mongo 并不能解决问题
    kinotrip
        3
    kinotrip  
       2020-03-26 01:30:07 +08:00
    不需要什么特别的数据结构吧?每天的每个时间点存到一个表,每天的每个可用场地存到另一个表,然后这两个多对多一乘是第三个表,定时自动生成以后几天这三张表的数据就行了。然后数据查询的时候按天返回三张表的内容,让前端自己按数据索引拼界面就行了。
    Aoang
        4
    Aoang  
       2020-03-26 01:32:55 +08:00 via Android
    表一:id 、时间、场地、价格(外键 表二)、状态
    表二:id 、价格(金额)

    就一个图,什么需求都没有,怎么设计。

    场地可以分出去建表,状态也可以分出去建表。
    如果业务量不大,可以不管这些。

    考虑到查询问题,时间可以分成两个字段,一个记录日期,一个记录时分秒。

    查询的时候,直接查日期。
    v2hh
        5
    v2hh  
    OP
       2020-03-26 01:39:48 +08:00
    补充一下:时间对应的是一个营业时间,每个商家的营业时间可能不同,场地也是商家自己添加的
    v2hh
        6
    v2hh  
    OP
       2020-03-26 01:40:45 +08:00
    @kinotrip 时间可能会变,还有场地。
    SuperAllen
        7
    SuperAllen  
       2020-03-26 01:40:55 +08:00 via Android
    既然①时间段和②场地都不是固定的,把这两块分别单独拆出来建两个表,③价格设定这块和场地,日期,时间段放一起,另外订单作两个表④订单和⑤订单详情,如果订单数据量大,再在这个基础上作拆分。关联部分做好索引设置。
    一点拙见,也欢迎有更好的方案一起探讨
    tiluo
        8
    tiluo  
       2020-03-26 04:04:45 +08:00
    这个帖子关于时间段的思路还不错
    https://segmentfault.com/q/1010000016159952

    以下内容为复制粘贴:
    一个店铺的营业时间段一般不会超过三个,所以可以有三个字段来存时间段

    店铺 table
    id, name, duration_id1, duration_id2 (可空), duration_id3 (可空)
    然后时间段的表设计:

    时间段 table
    id, start_time, end_time
    店铺表的 duration_id 是时间段表的外键。
    时间段表相当于是 reference data,而店铺表的数据是会更改的。
    Immortal
        9
    Immortal  
       2020-03-26 04:16:33 +08:00
    这个普通逻辑就好了吧:
    场地表:id 商家 id 场地名称,营业时间...额外你需要的字段。
    - 关于营业时间,你这边应该是按小时为单位切分成 15 个对吧,提供一个思路,这个字段用标记位。一周 7 天每天 15 个时段,其实就是 105 位+5 位分隔符,比如周一 7-8 点不营业其他全营业,分隔符为“|”,表里就是:011111111111111|111...
    在页面展现的时候优先判断是否营业,再展现具体数据(价格等),这样营业时间就不会和下面的场地拓展表有关联了,是个商家属性。

    场地拓展表:id 场地 id 价格 当前时段的场地具体类型 时段序号。
    - 这里的时段我看图片上就是 15 个时段,可以不用时间表示,直接用序号也可以 1-15
    Immortal
        10
    Immortal  
       2020-03-26 04:19:57 +08:00
    @Immortal
    着急了。应该把营业时间提到另一个商家表,不应该在场地表。
    当然,如果每个场地有自己的营业时间,商家还有商家的营业时间,也可以根据这个思路拓展,进行位运算(&)来判断当前时段当前场地是否营业。
    thinkmore
        11
    thinkmore  
       2020-03-26 09:33:13 +08:00
    ```json
    {
    _id: 1,
    # 某一天,比如 3.27
    date: 157xxxxxxxxx,

    info: [
    {
    time: 7:00,
    detail: [
    {
    price: 183,
    address: A2 半场,
    type: 可预订
    },
    {
    price: 183,
    address: B1 半场,
    type: 转让场地
    }
    ]
    },

    {
    time: 8:00,
    detail: [
    {
    price: 183,
    address: A2 半场,
    type: 可预订
    }
    ]
    }

    ]

    }


    ```

    这个是 mongodb 的数据结构,可以参考下。

    商家可以自定义场地,时间等
    v2hh
        12
    v2hh  
    OP
       2020-03-26 10:00:54 +08:00
    感谢各位回复,现在有个问题就是初始数据的问题,不可能商家每个单元格都分别设置,我想的是查询的时候直接返回时间段,场地,价格这些,前端自己匹配单元格价格,只有商家单独设定某个单元格的价格才会被记录入库,不然预先生成数据之后商家如果改价格会很难处理
    fancy111
        13
    fancy111  
       2020-03-26 10:01:50 +08:00
    这有什么特别的吗? 随便设计一个都能用。 一个表就搞定了
    thinkmore
        14
    thinkmore  
       2020-03-26 10:12:27 +08:00
    @v2hh 预生成数据即可,把能填充的全部填充。比如我上面给出的数据结构
    summerwar
        15
    summerwar  
       2020-03-26 10:17:15 +08:00
    参考日历
    v2hh
        16
    v2hh  
    OP
       2020-03-26 10:26:41 +08:00
    @thinkmore 如果与生成的话,之后商家改变价格,所有生成的数据都要改,还有需要生成一周的数据会有点多吧
    xuanbg
        17
    xuanbg  
       2020-03-26 11:39:53 +08:00
    这个不是价格日历嘛……每天每个时间段一条数据,场地、价格以 k/v 形式存成 Json 就行。

    红包就免了,能帮到你就好
    thinkmore
        18
    thinkmore  
       2020-03-26 13:31:17 +08:00
    @v2hh 一天的数据对应数据库是一条记录。 一周也才七条记录,多?

    每个商家都有对应的记录,如果要修改只用修改对应商家的即可。

    初始化的时候可以用模板为商家填充就行了。当需要修改的时候从将模板数据复制一份保存成商家的即可
    v2hh
        19
    v2hh  
    OP
       2020-03-26 21:10:58 +08:00
    @thinkmore 只存一条记录涉及到 单元格数据变更会和麻烦的吧
    thinkmore
        20
    thinkmore  
       2020-04-01 09:30:52 +08:00
    @v2hh 不麻烦,在 mongodb 中更新数组很简单
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4626 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:04 · PVG 18:04 · LAX 03:04 · JFK 06:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.