ASP.NET C#购物车的数据库怎么设计啊

ASP.NET C#购物车的数据库怎么设计啊,第1张

如果访问量比较大,建议不要直接存储在数据库,会给服务器造成很大的负担

可以存放在cookie里面,只有在用户准备提交订单的情况下才入库

另外,你说到的100行的情况,肯定会存在的。可以对表进行分区,或者分表或者分库的设计

下面分析一下它们的机制及作用。1 cookiecookie是由服务器产生,存储在客户端的一段信息。它定义了一种Web服务器在客户端存储和返回信息的机制,cookie文件它包含域、路径、生存期、和由服务器设置的变量值等内容。当用户以后访问同一个Web服务器时,浏览器会把cookie原样发送给服务器。通过让服务器读取原先保存到客户端的信息,网站能够为浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告等等。利用cookie的特性,大大扩展了WEB应用程序的功能,不仅可以建立服务器与客户机的联系,因为cookie可以由服务器定制,因此还可以将购物信息生成cookie值存放在客户端,从而实现购物车的功能。用基于cookie的方式实现服务器与浏览器之间的会话或购物车,有以下特点:n cookie存储在客户端,且占用很少的资源,浏览器允许存放300个cookie,每个cookie的大小为4KB,足以满足购物车的要求,同时也减轻了服务器的负荷;n cookie为浏览器所内置,使用方便。即使用户不小心关闭了浏览器窗口,只要在cookie定义的有效期内,购物车中的信息也不会丢失;n cookie不是可执行文件,所以不会以任何方式执行,因此也不会带来病毒或攻击用户的系统;n 基于cookie的购物车要求用户浏览器必须支持并设置为启用cookie,否则购物车则失效;n 存在着关于cookie侵犯访问者隐私权的争论,因此有些用户会禁止本机的cookie功能。2 sessionsession是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。同样,利用session也能实现购物车,这种方式的特点是:n session用新的机制保持与客户端的同步,不依赖于客户端设置;n 与cookie相比,session是存储在服务器端的信息,因此显得更为安全,因此可将身份标示,购物等信息存储在session中;n session会占用服务器资源,加大服务器端的负载,尤其当并发用户很多时,会生成大量的session,影响服务器的性能;n 因为session存储的信息更敏感,而且是以文件形式保存在服务器中,因此仍然存在着安全隐患。3 结合数据库的方式这也是目前较普遍的模式,在这种方式中,数据库承担着存储购物信息的作用,session或cookie则用来跟踪用户。这种方式具有以下特点:n 数据库与cookie分别负责记录数据和维持会话,能发挥各自的优势,使安全性和服务器性能都得到了提高;n 每一个购物的行为,都要直接建立与数据库的连接,直至对表的 *** 作完成后,连接才释放。当并发用户很多时,会影响数据库的性能,因此,这对数据库的性能提出了更高的要求;n 使cookie维持会话有赖客户端的支持。各种方式的选择:虽然cookie可用来实现购物车,但必须获得浏览器的支持,再加上它是存储在客户端的信息,极易被获取,所以这也限制了它存储更多,更重要的信息。所以一般cookie只用来维持与服务器的会话,例如国内最大的当当网络书店就是用cookie保持与客户的联系,但是这种方式最大的缺点是如果客户端不支持 cookie就会使购物车失效。Session 能很好地与交易双方保持会话,可以忽视客户端的设置。在购物车技术中得到了广泛的应用。但session的文件属性使其仍然留有安全隐患。结合数据库的方式虽然在一定程度上解决了上述的问题,但从上面的例子可以看出:在这种购物流程中涉及到对数据库表的频繁 *** 作,尤其是用户每选购一次商品,都要与数据库进行连接,当用户很多的时候就加大了服务器与数据库的负荷我们公司采用的是数据库的方式1、用户浏览系统,获取用户机器的MAC地址2、如果用户购买物品,添加到数据库里面,同时插入机器的MAC地址,也是用户的ID标示3、如果用户登录系统,用用户真实的ID,更新当前机器的MAC对应的记录。

//购物车类ShoppingCart,仅供参考

package bookshop;

import javautil;

import javasql;

import javatext;

public class ShoppingCart {

    HashMap items = null;

    public ShoppingCart() {

        items = new HashMap();

    }

    public synchronized void add(String bookID) throws Exception {

        if (itemscontainsKey(bookID)) 

        {

            ShoppingCartItem item = (ShoppingCartItem) itemsget(bookID);

            itemquantity++;

        } 

        else 

        {

            String sql = " SELECT  FROM tb_Book WHERE bookID='" + bookID

                    + "' ";

            DBHandle dbhandle = new DBHandle();

            ResultSet rs = dbhandleexecuteQuery(sql);

            ShoppingCartItem newItem = new ShoppingCartItem();

            if (rsnext()) {

                newItembookID=bookID;

                newItemisbn = rsgetString("ISBN");

                newItembookName = rsgetString("bookName");

                newItembookImage = rsgetString("bookImage");

                newItemcategoryID = rsgetString("categoryID");

                newItemauthor = rsgetString("author");

                newItemprice = rsgetFloat("price");

                newItemdescription = rsgetString("description");

                newItemquantity=1;

                dbhandlecloseResource();

                itemsput(bookID, newItem);

            }

        }

    }

    public synchronized void setItem(String BookID, int num) {

        if (itemscontainsKey(BookID)) {

            ShoppingCartItem item = (ShoppingCartItem) itemsget(BookID);

            itemquantity=num;

        }

    }

    public synchronized void remove(String BookID) {

        itemsremove(BookID);

    }

    public synchronized Iterator getItems() {

        Collection c = itemsvalues();

        return citerator();

    }

    protected void finalize() throws Throwable {

        itemsclear();

    }

    public synchronized int getNumberOfItems() {

        return itemssize();

    }

    public synchronized double getTotal() {

        double amount = 00;

        for (Iterator i = getItems(); ihasNext();) {

            ShoppingCartItem item = (ShoppingCartItem) inext();    

            amount += itemquantity itemprice;

        }

        return roundOff(amount);

    }

    private double roundOff(double x) {

        long val = Mathround(x  100); // cents

        return val / 100;

    }

    public synchronized void clear() {

        itemsclear();

    }

    public int payOrder(String userName, String trueName, String postcode,

            String address, String telephone, String memo) throws Exception {

        Connection conn = null;

        int orderID = 0;

        DBHandle dbhandle = new DBHandle();

        try {

            conn = dbhandlegetConnection();

            connsetAutoCommit(false);

            Statement stmt = conncreateStatement();

            double total = getTotal();

            SimpleDateFormat dataFormat = new SimpleDateFormat(

                    "yyyy-MM-dd HH:mm:ss");

            String orderDate = dataFormatformat(new javautilDate());

            String sql = " INSERT INTO tb_Orders(userName,trueName,address,postcode,tel,memo,totalPrice,isPay, isDeliver,orderDate)VALUES('"

                    + userName+ "','"+ trueName

                    + "','"

                    + address

                    + "','"

                    + postcode

                    + "','"

                    + telephone

                    + "','"

                    + memo

                    + "',"

                    + total + ",'0','0','" + orderDate + "' ) ";

            Systemoutprintln(sql);

            stmtexecuteUpdate(sql);

            sql = " SELECT MAX(orderID) AS maxOrderID FROM tb_Orders ";//改动

            Systemoutprintln(sql);

            ResultSet rs = stmtexecuteQuery(sql);

            rsnext();

            orderID = rsgetInt(1);

            Iterator i = getItems();

            while (ihasNext()) {

                ShoppingCartItem item = (ShoppingCartItem) inext();

                int quantity = itemquantity;

                String id = itembookID;

                double price = itemprice;

                sql = " INSERT INTO tb_OrderDetail(orderID,bookID,quantity,price) VALUES("

                        + orderID

                        + ","

                        + id

                        + ","

                        + quantity

                        + ","

                        + price

                        + ")";

                stmtexecuteUpdate(sql);

            }

            conncommit();

            connsetAutoCommit(true);

        } catch (Exception ex) {

            connrollback();

            Systemoutprintln(exgetMessage());

            throw ex;

        } finally {

            dbhandlecloseResource();

        }

        return orderID;

    }

}

//图书信息类,ShoppingCartItem

package bookshop;

public class ShoppingCartItem{

    public String bookID = null;

    public String isbn = null;

    public String bookName = null;

    public float price = 00F;

    public String description = null;

    public String bookImage=null;

    public String author=null;

    public String categoryID=null;

    public int quantity;    

}

用户登陆后系统应该会分配一个session : id,这个id应该是改用于的用户表id。然后再做一个购物车的表,里面可以只考虑存商品id、用户id等关键信息;

当用户提交购买的时候再做相关的 *** 作,具体可以参考淘宝、天猫的购物车已经后续付款效果。

以上就是关于ASP.NET C#购物车的数据库怎么设计啊全部的内容,包括:ASP.NET C#购物车的数据库怎么设计啊、购物车怎么实现、jsp购物车的代码和数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9293484.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存