• 请不要在回答技术问题时复制粘贴 AI 生成的内容
iugo
V2EX  ›  程序员

在数据层上加这样一个东西合理吗?

  •  
  •   iugo ·
    iugo · Aug 8, 2015 · 3647 views
    This topic created in 3954 days ago, the information mentioned may be changed or developed.

    不特指某一种语言.

    两张表, 用户表和成绩表

    用户表:
    userid, name, age

    成绩表:
    testid, userid, scores, time

    select = select('userid', '12');
    data = {'name': 'Jim'};
    write = query(select, data);
    
    select = select('userid', '13');
    data = {'name': 'Sam', 'age': '21'};
    write = query(select, data);
    
    select = select('userid', '13');
    data = ['name', 'age'];
    read = query(select, data);
    
    select = select('userid', '13');
    data = {'find': 'test', 'field':['scores', 'time']};
    read = query(select, data);
    

    如果这个东西加上比不加好, 那么这样写合理吗?

    Supplement 1  ·  Aug 9, 2015
    希望在 后端逻辑 与 数据库 之间建立一层.

    比如有 用户表 和 成绩表. 用户表中储存学生资料, 成绩表中列出所有人每次考试的成绩.

    如果直接写 SQL, 要同时取出学生资料和成绩就需要表连接. 但我不希望后端去想这些东西.

    写几个简单的函数让后端使用, 然后 后端就不需要知道表结构, 只要知道数据关系就好. 即只要知道每个学生是有年龄, 有成绩的就好, 不需要知道它所需的数据是在两个表中, 不需要知道表的名称.

    如果将来有个新的表, 考试作弊存档表.
    这时后端只要知道每个学生是有作弊记录的就好, 直接说"小明在 5 月 2 日的数学考试中有作弊" 就能自动在作弊表中增加一行数据. 直接说"把小明的考试记录和作弊记录调出来", 就能得到小明的所有记录, 考了几次, 作弊几次, 然后计算比率多少什么的.
    23 replies    2015-08-10 07:56:07 +08:00
    zjqzxc
        1
    zjqzxc  
       Aug 8, 2015   ❤️ 1
    消灭零回复。。
    好吧,看了足足3分钟还没看明白楼主要干嘛。。(楼主这不给一点儿文字描述就说什么好不好,这个东西是啥呢?还有哈,楼主这12行数据库操作语句是啥语言的,,看起来怪怪的)
    楼主的意思是指定了一个用户表中的一个userid,然后再找出他的名字,再在成绩表中找出他某此考试的成绩,大概是这个意思吧。
    但是,我还是不明白这个好不好指的是啥。
    目前是:
    step1:SELECT name,age FROM 用户表 WHERE userid=13
    step2:SELECT scores,time FROM 成绩表 WHERE userid=13 AND testid=test
    是这个意思吧
    realpg
        2
    realpg  
    PRO
       Aug 8, 2015   ❤️ 1
    @zjqzxc
    崇拜死你了 3分钟就看明白了
    我看了了一小时又30分钟也没看明白是啥意思

    对于一个强迫症来说,看这个没回复的帖子悬在这里点进去就是看不懂 也没别人看得懂 那个难受啊
    xierch
        3
    xierch  
       Aug 8, 2015   ❤️ 1
    我也没看懂,好难受..
    lujiajing1126
        4
    lujiajing1126  
       Aug 8, 2015   ❤️ 1
    应该是说ORM吧?

    楼主这写的是什么奇怪的语言。。看上去符合js的语法
    zonghua
        5
    zonghua  
       Aug 8, 2015 via iPhone   ❤️ 1
    @lujiajing1126 应该是python,java web里面的service层和一些node里面的proxy层是一致的吗?
    lujiajing1126
        6
    lujiajing1126  
       Aug 8, 2015   ❤️ 1
    @zonghua node的proxy层是指什么?
    rming
        7
    rming  
       Aug 8, 2015   ❤️ 1
    楼主说的 query builder么?
    9hills
        8
    9hills  
       Aug 8, 2015 via iPad   ❤️ 1
    不合理,不解释
    zonghua
        9
    zonghua  
       Aug 8, 2015   ❤️ 1
    qiayue
        10
    qiayue  
    PRO
       Aug 8, 2015   ❤️ 1
    select = select('userid', '12');
    data = {'name': 'Jim'};
    write = query(select, data);

    修改用户表 userid 为 12 的记录的 name 为 Jim

    select = select('userid', '13');
    data = {'name': 'Sam', 'age': '21'};
    write = query(select, data);

    修改用户表 userid 为 13 的记录的 name 为 Sam,age 为 21

    select = select('userid', '13');
    data = ['name', 'age'];
    read = query(select, data);

    从用户表取出 userid 为 13 的用户的 name 和 age

    select = select('userid', '13');
    data = {'find': 'test', 'field':['scores', 'time']};
    read = query(select, data);

    没太明白,大概是从成绩表取出 userid 为 13 的记录的 scores 和 time ?

    依然不知道楼主想问的是什么,什么东西加上还是不加?
    lujiajing1126
        11
    lujiajing1126  
       Aug 8, 2015 via Android   ❤️ 1
    @zonghua 嗯,这个应该和service的思想类似的
    不过叫proxy只是写代码的人起的吧?并没有明确的标准
    yuankui
        12
    yuankui  
       Aug 8, 2015   ❤️ 1
    你能表达清楚你的问题么?

    你这是对回答者的不尊重
    omengye
        13
    omengye  
       Aug 9, 2015 via Android   ❤️ 1
    看上去是orm之类的思想,不直接去写sql,用方法去拼接生成。不好说好不好…得看实际情况吧。
    iugo
        14
    iugo  
    OP
       Aug 9, 2015
    @zjqzxc
    @realpg
    @xierch
    @lujiajing1126
    @zonghua
    @rming
    @9hills
    @qiayue
    @yuankui
    @omengye

    抱歉耽误大家时间了.

    "不特指某一种语言."

    想脱离某种具体的语言, 看看这种想法是否可行. 对系统有没有正向的帮助.
    realpg
        15
    realpg  
    PRO
       Aug 9, 2015
    @iugo

    select = select('userid', '12');

    我学历低你别骗我,你写成
    select = where('userid', '12');
    我觉得不会有人看不懂……
    各位看不懂的,各位李伟呢
    iugo
        16
    iugo  
    OP
       Aug 9, 2015
    @realpg

    当时想的可能会有这样的用法:

    select = select('userid');
    data = ['name', 'age'];
    read = query(select, data);

    取出所有人的名字和年龄
    jarlyyn
        17
    jarlyyn  
       Aug 9, 2015
    感觉楼主想要这样的东西?

    http://docs.sequelizejs.com/en/latest/docs/querying/
    neoblackcap
        18
    neoblackcap  
       Aug 9, 2015
    据我所知,Python里面的SQLAlchemy框架是有泛型的,可以完成你这样的需求。
    mahone3297
        19
    mahone3297  
       Aug 9, 2015
    orm?
    lightening
        20
    lightening  
       Aug 9, 2015
    我觉得楼主说的就是 ORM ……
    xierch
        22
    xierch  
       Aug 9, 2015 via Android
    关系型数据库在 table 之上还有一层 view 吧
    直接查询 view 的话就不用 join 了?
    workwonder
        23
    workwonder  
       Aug 10, 2015 via Android
    Try Django
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   933 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
    ♥ Do have faith in what you're doing.