把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架

简介:     更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。

 

    更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。

    目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。

 

    上一篇里 球球 同学询问“不太明白需求是怎么转化为数据库的。比如一个最简单的会员例子,累计1万消费以上是一级会员,5000消费以上是2级会员,买商品属于1级会员的8折,属于2级会员的9折,这个业务逻辑要怎么转化成数据库?”那我就以这个作为例子说一下吧。

 

     根据这个需求我们可以得到以下几个已知条件
1、有会员信息——会员表。
2、会员要有等级,建立一个会员等级表。
3、会员的等级是依据累计消费金额而定。5000元以上是二级会员,10000元以上是一级会员。
4、有产品信息——产品表。
5、会员购买产品可以享受折扣,折扣根据会员的级别而定。

 

    问题
1、会员级别的确定?
2、如何获得会员购买商品的折扣?

我们可以在数据库里面建立四个表:【会员表】、【会员等级表】、【产品表】、【会员享受的折扣表】。
【示意图】。

 

 

 

(这里的商品表怎么还有商品等级ID呢?折扣表里面也有?这个后面的需求扩展里面的,本来要做两套图的,俺就偷懒了)

 

    回答
1、会员级别是依据会员的消费累计金额来确定的,那么当前的会员消费金额就是已知条件,我们可以把它作为函数的参数,于是我们可以写一个函数:

 

private   int  SetMemberLevelID( int  memberID, int  money)
        {
            DataAccessLayer dal 
=   new   DataAccessLayer();
            
            
// 依据累计的消费金额,确定会员的等级
            sql  =   " SELECT TOP 1 会员级别ID FROM Demo_会员级别表 WHERE (消费金额 <  " +  money  + " ) " ;
            
string  会员级别ID  =  dal.RunSqlGetID(sql);

            
// 修改会员的等级
            sql  =   " update Demo_会员表 set 会员级别ID =  "   +  会员级别ID  +   "  where memberID=  "   +  memberID.ToString();
            dal.RunSql(sql);

            
        }

 

 

    当然我们也可以把第一个SQL语句作为一个子查询,加在第二个SQL语句里面。
    或者如果我们可以知道会员原先的级别的话,我们可以先做一下比较,会员级别变化的时候在修改会员的等级。

 

2、这个就简单了,会员享受的折扣是和等级相关的,我们有了会员享受的折扣表,写一条SQL语句就出来了。

 

sql  =   " select 折扣 from Demo_会员级别折扣表 where 会员级别ID = 1 " ;

 

 

    不知道这个是不是求求想要的。

 

    功能扩展

     这个会员折扣的例子,让我想起来了去年看的一篇帖子,和这个很像,区别在于商品也是分等级的,不同的会员等级对应不同的产品等级可以享受不同的折扣,比如会员有三个等级——一级、二级、三级,产品有两个等级——优等、一般。
那么就会出现一个笛卡尔乘积的形式:


一级会员购买优等商品享受九折,
一级会员购买一般商品享受八折,
二级会员购买优等商品享受九五折,
二级会员购买一般商品享受八五折,
三级会员购买优等商品享受九九折,
三级会员购买一般商品享受九折。

 

    以前的那个帖子的要求就是如何依据会员的等级和商品的等级来判断享受的折扣。

    我们看看如何来解决这个问题。我们的商品表里面加上商品等级字段,在【会员享受的折扣表】里面也加上一个商品等级ID字段。剩下的就不用说了吧,只需要稍稍改一下那个SQL语句就可以了。

 

sql  =   " select 折扣 from Demo_会员级别折扣表 where 会员级别ID = 1 and 商品级别ID = 1 " ;

 

    如果您也看多那篇帖子的话,您会发现那篇帖子用了好长的代码才解决,当然人家是用了OO的方法,好像解决的还挺巧妙地,我的OO水平还不够,没有看懂。

 

FAQ

1、为什么要建立【会员等级表】、【商品等级表】?
     因为建立表以后,就可以做一个维护程序让客户自己维护这两个级别。

2、为什么要建立【会员享受的折扣表】?
    理由同上,我们也可以做一个维护程序,这样享受什么样的折扣,客户就可以随时修改了。

 

ps: 博客园北京俱乐部第三次技术活动(2009/05/23) 

 

相关文章
|
3月前
|
SQL 数据采集 自然语言处理
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
|
2月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
164 71
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
149 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
5月前
|
SQL Java 数据库
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
|
1月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
54 7
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
72 4
|
3月前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
102 3
|
3月前
|
算法 安全 Java
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
【用Java学习数据结构系列】探索Java集合框架的无尽秘密pro
25 1
|
3月前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
70 0