跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问一个实体的多个字段可能有多个值,应该怎么设计数据库?
未分類
7 2 月 2021

请问一个实体的多个字段可能有多个值,应该怎么设计数据库?

请问一个实体的多个字段可能有多个值,应该怎么设计数据库?

資深大佬 : vansl 2

像下面这样,一个表中的好几个字段是有多个值的: 请问一个实体的多个字段可能有多个值,应该怎么设计数据库?

目前的存储方式是把外键 id 列表用逗号分隔,直接存储在表里,总感觉不太优雅。 另外想到的一种方式是字段存一个表,字段值存一个表,像这样:

主表

指标名称
指标 1

字段表

字段名称 字段类型(用户 /部门)
责任用户 1 用户
责任部门 1 部门

字段值表

外键主表 id 外键字段表 id 字段值
1 1 测试用户 1
1 1 测试用户 2
1 2 测试部门 1
1 2 测试部门 2

没实际用过也不知道会有什么问题。请问各位遇到这种情况是怎么设计数据库的?

大佬有話說 (10)

  • 資深大佬 : Slartibartfast

    这个要看查询需求,如果不需要反向查询,你的做法足够。否则就需要设计多对多表

  • 資深大佬 : Jacky23333

    mysql5.7 支持 json 类型了

  • 資深大佬 : xarthur

    愣是没看懂,这里的关系是什么?一对多、多对一还是多对多?

  • 主 資深大佬 : vansl

    @Slartibartfast 能用倒是能用,主要还是想知道实际生产中是怎样设计

  • 主 資深大佬 : vansl

    @Jacky23333 目前用的确实是 MySQL 的 json,上司要求迁移到 oracle 于是再找找有没有更好的方案

  • 資深大佬 : huobazi

    property property-values 这种经典画面,你那两种都能用,还有可以考虑直接存 json,这要看你的数据库是是否支持。

    想优雅那就看看 eav,其实吧,我觉得优雅还不一定用逗号来的舒服,具体要看你的场景,常用什么样的查询啊什么的。

    类似的问题比如树形结构,可以优雅的只存个 parentid,也可以规定 id 格式后,把祖先 id 全部都存到一个字段里,都具体要看你的场景了,

  • 資深大佬 : sytnishizuiai

    我现在用的第二种,虽然看表的时候比较繁琐不好找,但是 sql 语句查起来简单,好关联和统计,并且用户和部门可以后台方便设置(添删改)

  • 主 資深大佬 : vansl

    @xarthur 多对多吧,类似一个订单有多个购买人,把购买人字段存放到订单购买人表,但是不单单这个字段是这样的,其他字段也可以有多个值

  • 主 資深大佬 : vansl

    @huobazi
    @sytnishizuiai
    好的,感谢二位

  • 資深大佬 : iCong

    有查询需求建表,只展示就 json array 。我的做法

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具