wiki:DDL FINAL

Version 1 (modified by 213231, 3 weeks ago) ( diff )

--

CREATE TABLE customer (
  CustomerID integer PRIMARY KEY,
  CustomerName varchar(100),
  CustomerSurName varchar(100),
  Email varchar(100),
  Address varchar(255),
  CustomerContact varchar(20),
  Password varchar(255) NOT NULL
);

CREATE TABLE employee (
  EmployeeID integer PRIMARY KEY,
  EmployeeName varchar(100),
  EmployeeSurName varchar(100),
  Position varchar(100),
  Department varchar(100),
  Email varchar(100),
  Password varchar(100)
);

CREATE TABLE product (
  ProductID integer PRIMARY KEY,
  Model varchar(100),
  Price numeric(10,2),
  LicensePlate varchar(50),
  Status varchar(15) NOT NULL,
  CONSTRAINT product_status_check CHECK (Status IN ('available','sold','rented','maintenance'))
);

-- Потоа откако ќе се креираат табелите горе, продолжи со оние што реферираат од нив:
CREATE TABLE procurement (
  TransactionID integer PRIMARY KEY,
  EmployeeID integer,
  CustomerID integer,
  ProductID integer,
  ProcurementDate date,
  Quantity integer,
  Status varchar(10) DEFAULT 'Pending',
  Notified boolean DEFAULT FALSE,
  GroupID varchar(255),
  CONSTRAINT procurement_employee_fk FOREIGN KEY (EmployeeID) REFERENCES employee(EmployeeID),
  CONSTRAINT procurement_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
  CONSTRAINT procurement_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
);

CREATE TABLE maintenance (
  MainID integer PRIMARY KEY,
  EmployeeID integer,
  ProductID integer,
  MainDate date,
  Description text,
  Cost numeric(10,2),
  Status varchar(10) DEFAULT 'Pending',
  StartTime timestamp DEFAULT CURRENT_TIMESTAMP,
  EndTime timestamp,
  CONSTRAINT maintenance_status_check CHECK (Status IN ('Pending','Completed')),
  CONSTRAINT maintenance_employee_fk FOREIGN KEY (EmployeeID) REFERENCES employee(EmployeeID),
  CONSTRAINT maintenance_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
);

CREATE TABLE trailer (
  ProductID integer PRIMARY KEY,
  Capacity numeric(10,2),
  CONSTRAINT trailer_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
);

CREATE TABLE truck (
  ProductID integer PRIMARY KEY,
  HP integer,
  CONSTRAINT truck_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
);

CREATE TABLE views (
  CustomerID integer NOT NULL,
  ProductID integer NOT NULL,
  PRIMARY KEY (CustomerID, ProductID),
  CONSTRAINT views_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
  CONSTRAINT views_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID)
);

CREATE TABLE wallet (
  WalletID serial PRIMARY KEY,
  CustomerID integer NOT NULL,
  Balance numeric(10,2) NOT NULL DEFAULT 0.00,
  CardNumber varchar(16),
  ExpiryDate date,
  CVV varchar(4),
  CardHolderName varchar(100),
  CONSTRAINT wallet_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID)
);

CREATE TABLE customerfeedback (
  FeedbackID integer PRIMARY KEY,
  CustomerID integer,
  ProductID integer,
  Rating integer CHECK (Rating BETWEEN 1 AND 5),
  Comment text,
  FeedbackDate date,
  TransactionID integer,
  CONSTRAINT feedback_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
  CONSTRAINT feedback_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID),
  CONSTRAINT feedback_transaction_fk FOREIGN KEY (TransactionID) REFERENCES procurement(TransactionID)
);

CREATE TABLE procurement_request (
  RequestID serial PRIMARY KEY,
  CustomerID integer NOT NULL,
  ProductID integer NOT NULL,
  Quantity integer DEFAULT 1,
  RequestedAt timestamp DEFAULT CURRENT_TIMESTAMP,
  Status varchar(10) DEFAULT 'Pending',
  PaymentMethod varchar(20),
  PaymentStatus varchar(10) DEFAULT 'Reserved',
  MonthlyPay numeric(10,2),
  TotalPrice numeric(10,2),
  Duration integer,
  CardID integer,
  TransactionType varchar(10) DEFAULT 'Buy',
  GroupID varchar(36),
  CONSTRAINT procurement_request_customer_fk FOREIGN KEY (CustomerID) REFERENCES customer(CustomerID),
  CONSTRAINT procurement_request_product_fk FOREIGN KEY (ProductID) REFERENCES product(ProductID),
  CONSTRAINT procurement_request_status_check CHECK (Status IN ('Pending','Approved','Rejected')),
  CONSTRAINT procurement_request_paymentstatus_check CHECK (PaymentStatus IN ('Reserved','Charged','Refunded')),
  CONSTRAINT procurement_request_transactiontype_check CHECK (TransactionType IN ('Buy','Rent'))
);

CREATE TABLE t_type (
  TransactionID integer PRIMARY KEY,
  Type varchar(10) NOT NULL,
  Duration integer,
  MonthlyPay numeric(10,2),
  TotalPrice numeric(10,2),
  CONSTRAINT t_type_type_check CHECK (Type IN ('Rent','Buy')),
  CONSTRAINT t_type_transaction_fk FOREIGN KEY (TransactionID) REFERENCES procurement(TransactionID)
);

Note: See TracWiki for help on using the wiki.