首先是一个项目记录表。 每一个点开的项目表字段都不一样 每一个项目点开后的记录都有上千条。 每一个项目点开后的表头字段也都不一样有的 3,4 列字段,有的 10 几列字段
请教下怎么实现比较好。
1
RihcardLu 2018-09-17 14:06:58 +08:00 via iPhone
专门建一个表存字段,值存在另一张表里
|
2
opengps 2018-09-17 14:11:13 +08:00
这时候似乎很适合 mongo 数据库的 json 存储
|
3
ben1024 2018-09-17 14:13:46 +08:00
外层进行规范格式,内层一个大 JSON 存储
|
4
breezeFP 2018-09-17 14:29:43 +08:00
我现在在做的一个功能和你的需求很像,字段列不固定,用 mongo 存储
|
5
saulshao 2018-09-17 15:44:23 +08:00
抽出来一个表,只建立比较少的字段,例如项目 ID,名称,编号。
其他的字段则建立一个纵向表,用 N-V 对来存储数据。 |
6
AngryPanda 2018-09-17 15:47:07 +08:00
|
7
shaojz2005 2018-09-17 15:53:32 +08:00
如果每个项目的字段差异性非常大,可以散列存储,每个项目都可以自定义字段,不把字段做成固定的表。
如果所有项目的字段总量是基本稳定的,只是每个项目都有选择性的填一些,那么可以全部定义出来,然后项目选填,前端页面渲染时,有内容就展示,无内容则隐藏。 |
8
DavidNineRoc 2018-09-17 15:56:02 +08:00
正好最近在做一个类似的功能:
fields 表,存列表锁展示的字段 id name table_name field_name 1 主键 users id 2 名字 users username 3 年龄 users age 4 主键 orders id 5 订单号 orders number 6 总价 orders total users 表 id username age 1 david 12 2 loc 21 orders 表 id number total 1 12 11.4 2 4 58 ## 现在在用户列表页面 $fields = Field::where('table_name', 'users')->get(); $users = User::latest()->get(); // 显示列表 foreach ($users as $user) { foreach ($fields as $field) { echo $user->{$field} } echo '<br>'; } ## 订单列表 $fields = Field::where('table_name', 'orders')->get(); $orders= Order::latest()->get(); // 显示列表 foreach ($ordersas $order) { foreach ($fields as $field) { echo $order->{$field} } echo '<br>'; } #### 其实更建议使用 数据表格 控件,把字段和数据分别赋值到数据表格,他会自动展示 ,不需要你遍历。 #### 还可以做成显示那个字段,当用户点了隐藏不看某个字段之类的。 |
9
bsg1992 2018-09-17 17:18:03 +08:00
看你用上面数据库来持久化数据了。关系型数据库就是把共同的字段抽取出来单独一张表。然后剩余的属性建立一个 Key Value 的表,与其关联即可。
或者使用文档型数据库直接存储 json 文档到时直接取出即可。 |
10
winglight2016 2018-09-17 19:46:54 +08:00
看起来 postgresql 比较适合你,同时支持关系数据库和 json 格式字段,不过,具体还是要分析一下为什么不同项目之间字段差异很大?
|
11
wizardforcel 2018-09-17 22:22:14 +08:00 via Android
一个项目存成多条,(项目 id,字段名,值)
|
12
xuanbg 2018-09-17 22:24:26 +08:00
mysql 从 5.6 开始支持 JSON 类型,或者 MongoDB 了解一下
|
13
NEETLEE 2018-09-18 09:19:47 +08:00
我遇到这种情况都是把他们个性的字段打包成一个 json 然后把 json 存进某个字段里面,这样表结构就可以固定下来了,不好的地方就是,每次要用到的时候都要把 json 解析成对象
|