db/setup.sql (61 lines of code) (raw):
-- Drop everything
ALTER TABLE "products" DROP CONSTRAINT IF EXISTS "products_fk0";
ALTER TABLE "orders" DROP CONSTRAINT IF EXISTS "orders_fk0";
ALTER TABLE "order_lines" DROP CONSTRAINT IF EXISTS "order_lines_fk0";
ALTER TABLE "order_lines" DROP CONSTRAINT IF EXISTS "order_lines_fk1";
DROP TABLE IF EXISTS "products";
DROP TABLE IF EXISTS "product_types";
DROP TABLE IF EXISTS "customers";
DROP TABLE IF EXISTS "orders";
DROP TABLE IF EXISTS "order_lines";
-- Create everything
CREATE TABLE "products" (
"id" serial NOT NULL,
"sku" varchar NOT NULL UNIQUE,
"name" varchar NOT NULL,
"description" TEXT NOT NULL,
"type_id" int NOT NULL,
"stock" int NOT NULL,
"cost" int NOT NULL,
"selling_price" int NOT NULL,
CONSTRAINT products_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "product_types" (
"id" serial NOT NULL,
"name" varchar NOT NULL UNIQUE,
CONSTRAINT product_types_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "customers" (
"id" serial NOT NULL,
"full_name" varchar NOT NULL,
"company_name" varchar NOT NULL,
"email" varchar NOT NULL,
"address" varchar NOT NULL,
"postal_code" varchar NOT NULL,
"city" varchar NOT NULL,
"country" varchar NOT NULL,
CONSTRAINT customers_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "orders" (
"id" serial NOT NULL UNIQUE,
"customer_id" int NOT NULL,
"created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
CONSTRAINT orders_pk PRIMARY KEY ("id")
) WITH (
OIDS=FALSE
);
CREATE TABLE "order_lines" (
"order_id" int NOT NULL,
"product_id" int NOT NULL,
"amount" int NOT NULL
) WITH (
OIDS=FALSE
);
ALTER TABLE "products" ADD CONSTRAINT "products_fk0" FOREIGN KEY ("type_id") REFERENCES "product_types"("id");
ALTER TABLE "orders" ADD CONSTRAINT "orders_fk0" FOREIGN KEY ("customer_id") REFERENCES "customers"("id");
ALTER TABLE "order_lines" ADD CONSTRAINT "order_lines_fk0" FOREIGN KEY ("order_id") REFERENCES "orders"("id");
ALTER TABLE "order_lines" ADD CONSTRAINT "order_lines_fk1" FOREIGN KEY ("product_id") REFERENCES "products"("id");