数据库小白请教一个前端数据录入数据库的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
volvo007
V2EX    数据库

数据库小白请教一个前端数据录入数据库的问题

  •  
  •   volvo007 2021-09-29 13:37:52 +08:00 1927 次点击
    这是一个创建于 1525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题本身应该非常简单和常见, 但是不知道怎么用合适的语言 /术语去描述这个问题, 所以搜索引擎里面也比较难查.

    问题的场景是后台管理系统, 假设做一个商品属性的登记. 现在有一个 商品: A, 前端在登记的时候肯定是一个表单, 要求填写对应的属性, 点击“提交” 按钮之后传到后端, 后端再根据预设的函数录入数据库

    但是这个表单里面, 时不时就会碰到一些定的选项做到下拉菜单里, 例如 商品类别: X, 假设目前类别有 XYZ 三种, 我的想法是后台会有一个专门的表记录这些类别, 类似这种:

    商品类 id 商品类名
    1 X
    2 Y
    3 Z

    登记后的商品表应该是这样吧:

    商品 id 商品名称 商品类 id 商品类名(可选)
    1 A 1 X
    2 B 3 Z

    先说这个 商品类名 好像商品表里面可以不用录入吧, 这个可以理解.

    但是, 我前端给用户看到的选项, 肯定是 商品类名 不是 商品类 id, 而后面 商品 数据表里又要求插入这个 商品类 id 的话, 一般是怎么设计的呢?

    通过 类名 反查 类名 id 肯定不行吧, 这个例子类名是没有重复的, 但比如 人名 这种肯定会有重复的, 这种反查就不成立了.

    应该是非常简单的问题, 望大佬们不吝赐教. 或者提供一些关键词也很感谢

    8 条回复    2021-09-29 23:47:40 +08:00
    MonkeyJon
        1
    MonkeyJon  
       2021-09-29 13:47:04 +08:00   1
    数据库:商品表里存个商品类 id
    后端:查询的时候让后端带给你商品类名称不就行了
    前端:展示就完事了
    lishunan246
        2
    lishunan246  
       2021-09-29 13:47:22 +08:00 via Android   1
    前端处理下,用户看到的是类别字符串,但实际提交的是 id
    shilianmlxg
        3
    shilianmlxg  
       2021-09-29 13:51:52 +08:00   1
    @lishunan246 我就做过,但是要定义好一张 key value 对应关系啊,也需要一个接口或者一个死的 json
    KotlinAmai
        4
    KotlinAmai  
       2021-09-29 13:57:11 +08:00   1
    1. 数据库里面存商品类 id 就可以
    2. 进入页面的查询的时候,把商品类 id 和名称都带回来
    3. 前端选择数据的时候,展示和获取到的值可以是不一样的。将它绑定起来,你选择了 X ,但是你可以拿到 1 。就像下面那样。

    <select>
    <option value="1">X</option>
    <option value="2">Y</option>
    <option value="3">Z</option>
    </select>
    volvo007
        5
    volvo007  
    OP
       2021-09-29 14:06:59 +08:00 via iPhone
    @actar 谢谢回复这么多,还有楼上的各位
    这个方法我的顾虑和 3 楼一样, 当类别比较少的时候,可以维护一个写死的 json ;但如果这个表比较长比如几十个、几百个的时候要怎么处理啊
    另外这种方法肯定不适用人名这种会有重复值的情况。如果录入人名(比如该商品是某某销售)的情况的话,那就不能用人名了,应该就是人名你可以选,但我旁边会加一个员工号 /身份证号 这种的提醒用户选择了对的人,这样吧
    volvo007
        6
    volvo007  
    OP
       2021-09-29 14:10:01 +08:00 via iPhone
    @MonkeyJon 谢谢回复,可能我没描述清楚问题,我的需求和你的描述恰好相反……是前端登记,要如何设计能在后端写入 id 而不是商品类别

    看了下面的回复,可能在前端通过调用这个类别表,生成一张包含 id 的 json 是比较合适的办法?
    volvo007
        7
    volvo007  
    OP
       2021-09-29 14:11:21 +08:00 via iPhone
    @actar 啊我傻了,如果这个 option 的值非常多的话,就先访问数据库把它们都拿出来,然后用框架自动生成这个 option 代码就好了吧……不用手写啊
    limars
        8
    limars  
       2021-09-29 23:47:40 +08:00   1
    3 楼已经给你说了,需要一个接口(后端查询数据库后提供),返回类别名称和对应的 id 的 json 给你。或者是死 json,死 json 一般都是在万年不改的类别上。进了数据库的类别,通常都是接口提供。如果类别太多,甚至你下拉列表那边还要做成可搜索(还是调接口)的样式才行。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1161 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:40 PVG 07:40 LAX 15:40 JFK 18:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86