V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iugo
V2EX  ›  程序员

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

  •  
  •   iugo ·
    iugo · 2015-08-08 18:05:11 +08:00 · 3212 次点击
    这是一个创建于 3399 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不特指某一种语言.

    两张表, 用户表和成绩表

    用户表:
    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);
    

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

    第 1 条附言  ·  2015-08-09 10:14:20 +08:00
    希望在 后端逻辑 与 数据库 之间建立一层.

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

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

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

    如果将来有个新的表, 考试作弊存档表.
    这时后端只要知道每个学生是有作弊记录的就好, 直接说"小明在 5 月 2 日的数学考试中有作弊" 就能自动在作弊表中增加一行数据. 直接说"把小明的考试记录和作弊记录调出来", 就能得到小明的所有记录, 考了几次, 作弊几次, 然后计算比率多少什么的.
    23 条回复    2015-08-10 07:56:07 +08:00
    zjqzxc
        1
    zjqzxc  
       2015-08-08 20:31:18 +08:00   ❤️ 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  
       2015-08-08 20:38:03 +08:00   ❤️ 1
    @zjqzxc
    崇拜死你了 3分钟就看明白了
    我看了了一小时又30分钟也没看明白是啥意思

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

    楼主这写的是什么奇怪的语言。。看上去符合js的语法
    zonghua
        5
    zonghua  
       2015-08-08 21:44:32 +08:00 via iPhone   ❤️ 1
    @lujiajing1126 应该是python,java web里面的service层和一些node里面的proxy层是一致的吗?
    lujiajing1126
        6
    lujiajing1126  
       2015-08-08 21:49:29 +08:00   ❤️ 1
    @zonghua node的proxy层是指什么?
    rming
        7
    rming  
       2015-08-08 21:53:05 +08:00   ❤️ 1
    楼主说的 query builder么?
    9hills
        8
    9hills  
       2015-08-08 22:36:16 +08:00 via iPad   ❤️ 1
    不合理,不解释
    zonghua
        9
    zonghua  
       2015-08-08 22:46:17 +08:00   ❤️ 1
    qiayue
        10
    qiayue  
       2015-08-08 22:59:16 +08:00   ❤️ 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  
       2015-08-08 22:59:36 +08:00 via Android   ❤️ 1
    @zonghua 嗯,这个应该和service的思想类似的
    不过叫proxy只是写代码的人起的吧?并没有明确的标准
    yuankui
        12
    yuankui  
       2015-08-08 23:07:07 +08:00   ❤️ 1
    你能表达清楚你的问题么?

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

    抱歉耽误大家时间了.

    "不特指某一种语言."

    想脱离某种具体的语言, 看看这种想法是否可行. 对系统有没有正向的帮助.
    realpg
        15
    realpg  
       2015-08-09 09:43:19 +08:00
    @iugo

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

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

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

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

    取出所有人的名字和年龄
    jarlyyn
        17
    jarlyyn  
       2015-08-09 10:43:29 +08:00
    感觉楼主想要这样的东西?

    http://docs.sequelizejs.com/en/latest/docs/querying/
    neoblackcap
        18
    neoblackcap  
       2015-08-09 10:57:29 +08:00
    据我所知,Python里面的SQLAlchemy框架是有泛型的,可以完成你这样的需求。
    mahone3297
        19
    mahone3297  
       2015-08-09 11:14:11 +08:00
    orm?
    lightening
        20
    lightening  
       2015-08-09 11:19:31 +08:00
    我觉得楼主说的就是 ORM ……
    xierch
        22
    xierch  
       2015-08-09 14:26:11 +08:00 via Android
    关系型数据库在 table 之上还有一层 view 吧
    直接查询 view 的话就不用 join 了?
    workwonder
        23
    workwonder  
       2015-08-10 07:56:07 +08:00 via Android
    Try Django
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:58 · PVG 04:58 · LAX 12:58 · JFK 15:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.