Search Postgresql Archives

Re: Shopping cart

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 22 October 2008 18:39:53 Jonathan Bond-Caron wrote:
>
> If there's no time constraints, I'd do as someone mentioned and build it
> yourself. Open source or even commercial e-commerce solutions tend to get
> very complicated in trying to be 'flexible'.
>
> i.e.
> CREATE TABLE shopping_carts
> (
>   carts_id serial NOT NULL,
>   carts_date_created timestamp without time zone NOT NULL,
>   carts_date_updated timestamp without time zone NOT NULL,
>   carts_subtotal numeric(9,4) NOT NULL,
>   carts_total numeric(9,4) NOT NULL,
>   carts_tax1 numeric(9,4),
>   carts_tax2 numeric(9,4),
>   CONSTRAINT shopping_carts_pkey PRIMARY KEY (carts_id)
> )
> WITHOUT OIDS;
>
> CREATE TABLE shopping_carts_products
> (
>   products_id serial NOT NULL,
>   products_code character varying(64) NOT NULL,
>   products_name character varying(100) NOT NULL,
>   products_description character varying(1024),
>   products_date_added timestamp without time zone NOT NULL,
>   products_date_modified timestamp without time zone NOT NULL,
>   products_taxable boolean NOT NULL DEFAULT true,
>   products_qty double precision NOT NULL,
>   products_price numeric(9,5) NOT NULL,
>   shopping_carts_id integer NOT NULL,
>   shopping_carts_pos smallint NOT NULL,
>   CONSTRAINT shopping_carts_products_pkey PRIMARY KEY (products_id),
>   CONSTRAINT shopping_carts_products_shopping_carts_id_fkey FOREIGN KEY
> (shopping_carts_id)
>       REFERENCES shopping_carts (carts_id) MATCH SIMPLE
>       ON UPDATE CASCADE ON DELETE CASCADE,
>   CONSTRAINT shopping_carts_products_products_code_key UNIQUE
> (products_code)
> )
> WITHOUT OIDS;
>
> CREATE TABLE products
> (
>   products_id serial NOT NULL,
>   products_code character varying(64) NOT NULL,
>   products_name character varying(100) NOT NULL,
>   products_description character varying(1024),
>   products_status int,
> ...
> )
> WITHOUT OIDS;
>
> Displaying products and adding to a shopping cart is not much work, but the
> product *management* and analytics / reporting will eat your time.
>
> Best of luck!

I agree with Jonathan and Grzegorz , you learn a lot doing it yourself and can 
have all (and just) the functionality you need.

Cart system we built with linux / Pg / ColdFusion / Apache has a bit more 
complex table structure than the above. Here's for the products (not in full 
but to give an idea).

maincategories:
maincategory_id SERIAL PRIMARY KEY NOT NULL
mc_maincategory_name text NOT NULL
mc_maincategory_descr text
mc_maincategory_pic text
mc_published boolean
...

categories:
category_id SERIAL PRIMARY KEY NOT NULL
c_maincategory_id integer
c_category_name text NOT NULL
c_category_descr text
c_category_pic text
c_published boolean
...
"categories_c_maincategory_id_fkey" FOREIGN KEY (c_maincategory_id) REFERENCES 
maincategories(maincategory_id) ON UPDATE CASCADE ON DELETE RESTRICT

subcategories:
subcategory_id SERIAL PRIMARY KEY NOT NULL
sc_maincategory_id integer
sc_category_id integer
sc_subcategory_name text NOT NULL
sc_subcategory_descr text
sc_subcategory_pic text
sc_published boolean
...
 "subcategories_sc_maincategory_id_fkey" FOREIGN KEY (sc_maincategory_id) 
REFERENCES maincategories(maincategory_id) ON UPDATE CASCADE ON DELETE 
RESTRICT
    "subcategories_sc_category_id_fkey" FOREIGN KEY (sc_category_id) 
REFERENCES categories(category_id) ON UPDATE CASCADE ON DELETE RESTRICT

products:
product_id  SERIAL PRIMARY KEY NOT NULL
p_maincategory_id integer NOT NULL
p_category_id integer NOT NULL
p_subcategory_id integer
p_manufacturer_id integer NOT NULL
p_supplier_id integer NOT NULL
p_product_name text NOT NULL
p_product_code text NOT NULL
p_product_descr text
p_product_pic text  
p_published boolean
...
 "products_p_category_id_fkey" FOREIGN KEY (p_category_id) REFERENCES 
categories(category_id) ON UPDATE CASCADE ON DELETE RESTRICT
    "products_p_subcategory_id_fkey" FOREIGN KEY (p_subcategory_id) REFERENCES 
subcategories(subcategory_id) ON UPDATE CASCADE ON DELETE RESTRICT
    "products_p_manufacturer_id_fkey" FOREIGN KEY (p_manufacturer_id) 
REFERENCES manufacturers(manufacturer_id) ON UPDATE CASCADE ON DELETE RESTRICT
"products_p_supplier_id_fkey" FOREIGN KEY (p_supplier_id) REFERENCES 
suppliers(supplier_id) ON UPDATE CASCADE ON DELETE RESTRICT

This way you can sort and display the products by maincats, cats and subcats 
in the actual webshop. A product must belong to a main category and a category 
under that main category, sub category under a category is optional. You would 
of course have much more info in the products table: taxes, added, modified, 
stock amount, next shipment, and what have you ...

Then add tables for orders, order rows, customers, delivery methods, payment 
methods, suppliers, manufacturers, order statuses, taxes, maybe temp tables 
for automatic updates from suppliers ...

As Jonathan said, the trick is not in getting the shop online but in the 
management side of it all. The public shop interface is in fact only a small 
proportion of the system.

Anyway, we did not use cart tables. The web application stores cart 
information in session cookies until the point the order is finished and 
approved and is then written to customers, orders and order rows. Two cookies, 
or a cookie pair, one for the product id and one for the amounts. E.g. a 
cookie for products "1,234,3472,555" and a cookie for amounts "2,1,1,3" means 
you have 2 pcs of product id 1, 1 pcs product id 234 and so on. 

And as mentioned, you have the freedom to choose your preferred API, be it 
php, python, perl or what ever.

Please (Andrus) have a look at the shop, LinuxShop, in action at

http://www.linuxkauppa.fi/

It is in finnish but I think you will get the hang of it with no problems. 
LinuxPood / LinuxKauplus, a web shop for linux compatible hardware.

With very best regards,

Aarni

-- 

Burglars usually come in through your windows.

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux