home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / jbuilder / TRIAL / JBUILDER / JVISBRKR.Z / db.sql < prev    next >
Encoding:
Text File  |  1998-05-08  |  11.4 KB  |  502 lines

  1. /*******************************************************************************/
  2. /* The script contains the DDL to create the database and the tables. */
  3. /*******************************************************************************/
  4.  
  5. /* Insert the path to the cliffhanger.gdb file below */
  6.  
  7. CREATE DATABASE "cliffhanger.gdb"
  8.    USER "SYSDBA"
  9.    PASSWORD "masterkey"
  10.    PAGE_SIZE 1024;
  11.  
  12.  
  13.  
  14. CREATE TABLE CUSTOMER (
  15.    ID                INTEGER NOT NULL,
  16.    FIRSTNAME         VARCHAR(25),
  17.    MI                CHAR(1),
  18.    LASTNAME          VARCHAR(40),
  19.    PHONE             VARCHAR(15),
  20.    FAX               VARCHAR(15),
  21.    EMAIL             VARCHAR(128),
  22.    ADDR1             VARCHAR(30),
  23.    ADDR2             VARCHAR(30),
  24.    CITY              VARCHAR(30),
  25.    STATE             VARCHAR(15),
  26.    POSTALCODE        VARCHAR(12),
  27.    COUNTRY           VARCHAR(20),
  28.    SHIPNAME          VARCHAR(60),
  29.    SHIPADDR1         VARCHAR(30),
  30.    SHIPADDR2         VARCHAR(30),
  31.    SHIPCITY          VARCHAR(30),
  32.    SHIPSTATE         VARCHAR(15),
  33.    SHIPPOSTALCODE    VARCHAR(12),
  34.    SHIPCOUNTRY       VARCHAR(20),
  35.  
  36.    CONSTRAINT PK_CUSTOMER PRIMARY KEY (ID)
  37. );
  38. COMMIT;
  39.  
  40.  
  41.  
  42. CREATE TABLE L_PAYMETHOD (
  43.    PAYMETHOD   VARCHAR(20) NOT NULL,
  44.  
  45.    CONSTRAINT PK_PAYMETHOD PRIMARY KEY (PAYMETHOD)
  46. );
  47. COMMIT;
  48.  
  49.  
  50.  
  51. CREATE TABLE L_PRODUCTCATEGORY (
  52.    CATEGORY    VARCHAR(25) NOT NULL,
  53.  
  54.    CONSTRAINT PK_CONPRODCAT PRIMARY KEY (CATEGORY)
  55. );
  56. COMMIT;
  57.  
  58.  
  59.  
  60. CREATE TABLE L_SHIPMETHOD (
  61.    SHIPMETHOD  VARCHAR(10) NOT NULL,
  62.  
  63.    CONSTRAINT PK_SHIPMETHOD PRIMARY KEY (SHIPMETHOD)
  64. );
  65. COMMIT;
  66.  
  67.  
  68.  
  69. CREATE TABLE L_STATUS (
  70.    STATUS   VARCHAR(15) NOT NULL,
  71.  
  72.    CONSTRAINT PK_STATUS PRIMARY KEY (STATUS)
  73. );
  74. COMMIT;
  75.  
  76.  
  77. CREATE TABLE ORDERITEM (
  78.    ORDERID     INTEGER NOT NULL,
  79.    PRODUCTID   INTEGER NOT NULL,
  80.    QTY         INTEGER,
  81.    SALEPRICE   DOUBLE PRECISION,
  82.  
  83.    CONSTRAINT PK_ORDERITEM PRIMARY KEY (ORDERID, PRODUCTID)
  84. );
  85. COMMIT;
  86.  
  87.  
  88.  
  89. CREATE TABLE Orders (
  90.    ID                INTEGER NOT NULL,
  91.    CUSTOMERID        INTEGER NOT NULL,
  92.    ORDERDATE         DATE,
  93.    STATUS            VARCHAR(15),
  94.    SHIPDATE          DATE,
  95.    ORDERTRACKNUM     VARCHAR(20),
  96.    CUSTOMERPONUM     VARCHAR(10),
  97.    PAYMETHOD         VARCHAR(20),
  98.    CREDITCARDNUM     VARCHAR(16),
  99.    WIREPAYMENTINSTR  VARCHAR(255),
  100.    SHIPMETHOD        VARCHAR(10),
  101.    AMTPAID           DOUBLE PRECISION ,
  102.    SHIPNAME          VARCHAR(60),
  103.    SHIPADDR1         VARCHAR(30),
  104.    SHIPADDR2         VARCHAR(30),
  105.    SHIPCITY          VARCHAR(30),
  106.    SHIPSTATE         VARCHAR(15),
  107.    SHIPPOSTALCODE    VARCHAR(12),
  108.    SHIPCOUNTRY       VARCHAR(20),
  109.    BILLADDR1         VARCHAR(30),
  110.    BILLADDR2         VARCHAR(30),
  111.    BILLCITY          VARCHAR(30),
  112.    BILLSTATE         VARCHAR(15),
  113.    BILLPOSTALCODE    VARCHAR(12),
  114.    BILLCOUNTRY       VARCHAR(20),
  115.  
  116.    CONSTRAINT PK_ORDER PRIMARY KEY (ID)
  117. );
  118. COMMIT;
  119.  
  120.  
  121.  
  122. CREATE TABLE PRODUCT (
  123.    ID                INTEGER NOT NULL,
  124.    ISACTIVE          SMALLINT,
  125.    NAME              VARCHAR(255),
  126.    CATEGORY          VARCHAR(25),
  127.    BASEPRICE         DOUBLE PRECISION,
  128.    DISCOUNTPCT       DOUBLE PRECISION,
  129.    STOCKQTY          INTEGER,
  130.    MINREORDERQTY     INTEGER,
  131.  
  132.    CONSTRAINT PK_PRODUCT PRIMARY KEY (ID)
  133. );
  134. COMMIT;
  135.  
  136.  
  137.  
  138. CREATE TABLE ACCOUNT (
  139.    ID             INTEGER NOT NULL,
  140.    CREDITCARDNUMBER  CHAR(16),
  141.    STATUS         CHAR(10),
  142.    LIMIT         DOUBLE PRECISION,
  143.    BALANCE         DOUBLE PRECISION,
  144.    DOB             DATE,
  145.    IDENTIFICATION    VARCHAR(30),
  146.    EXPIRATIONDATE    DATE,
  147.  
  148.    CONSTRAINT PK_ACCOUNT PRIMARY KEY (ID)
  149. );
  150. COMMIT;
  151.  
  152.  
  153.  
  154. CREATE TABLE ACCOUNTSTATUS (
  155.    STATUS         CHAR(20) NOT NULL,
  156.    DESCRIPTION         VARCHAR(60),
  157.  
  158.    CONSTRAINT PK_ACCOUNTST PRIMARY KEY (STATUS)
  159. );
  160. COMMIT;
  161.  
  162.  
  163.  
  164. CREATE TABLE CARDNUMBER (
  165.    CARDNUMBER    INTEGER NOT NULL,
  166.  
  167.    CONSTRAINT PK_CARDNUMBER PRIMARY KEY (CARDNUMBER)
  168. );
  169. COMMIT;
  170.  
  171.  
  172.  
  173. ALTER TABLE Orders      ADD CONSTRAINT FK1_ORDER     FOREIGN  KEY (CUSTOMERID)  REFERENCES CUSTOMER(ID);
  174. ALTER TABLE ORDERITEM   ADD CONSTRAINT FK1_ORDERITEM FOREIGN  KEY (ORDERID)     REFERENCES Orders(ID);
  175. ALTER TABLE ORDERITEM   ADD CONSTRAINT FK2_ORDERITEM FOREIGN  KEY (PRODUCTID)   REFERENCES PRODUCT(ID);
  176. COMMIT;
  177.  
  178.  
  179.  
  180. /*******************************************************************************/
  181. /* Exceptions. */
  182. /*******************************************************************************/
  183. CREATE EXCEPTION EOrderWithNoCust         "An order cannot be posted without a valid customer.";
  184. CREATE EXCEPTION EOrderItemWithNoOrder    "An order item cannot be posted without a valid order.";
  185. CREATE EXCEPTION EOrderItemWithNoProduct  "An order item cannot be posted without a valid product.";
  186. CREATE EXCEPTION EDelCustWithOrders       "This customer has existing orders and can not be deleted.";
  187. CREATE EXCEPTION EDelOrderWithOrderItems  "This order has existing order items and can not be deleted.";
  188. COMMIT;
  189.  
  190.  
  191.  
  192.  
  193. /*******************************************************************************/
  194. /* Stored Procedures. Since these stored procs may be called by triggers, they
  195.    must be defined before the trigger. */
  196. /*******************************************************************************/
  197. SET TERM !!;
  198. CREATE PROCEDURE spCheckOrderItemOrderID
  199.    (
  200.    nNewOrderID integer
  201.    )
  202.    AS
  203.    DECLARE VARIABLE nOrderCount integer;
  204.    BEGIN
  205.  
  206.    /* An order item must have a valid order associated with it. */
  207.  
  208.    /* Note that this business rule is also implemented simply by the 'not null' in the
  209.       OrderItem.OrderID filed definition in conjunction with the foreign key
  210.       constraint already existing. However, by checking it in the trigger, we
  211.       can deliver a more meaningful error message back to the user. */
  212.  
  213.    IF ( :nNewOrderID IS NULL ) THEN
  214.       BEGIN
  215.       EXCEPTION EOrderItemWithNoOrder;
  216.       END
  217.    ELSE
  218.       BEGIN
  219.       SELECT count(*) FROM Orders o
  220.          WHERE o.ID = :nNewOrderID
  221.          INTO :nOrderCount;
  222.  
  223.       IF ( :nOrderCount = 0 ) THEN
  224.          BEGIN
  225.          EXCEPTION EOrderItemWithNoOrder;
  226.          END
  227.       END
  228.  
  229. END !!
  230. SET TERM ; !!
  231. COMMIT;
  232.  
  233.  
  234.  
  235. SET TERM !!;
  236. CREATE PROCEDURE spCheckOrderItemProductID
  237.    (
  238.    nNewProductID integer
  239.    )
  240.    AS
  241.    DECLARE VARIABLE nProductCount integer;
  242.    BEGIN
  243.  
  244.    /* An order item must have a valid product associated with it. */
  245.  
  246.    /* Note that this business rule is also implemented simply by the 'not null' in the
  247.       OrderItem.ProductID filed definition in conjunction with the foreign key
  248.       constraint already existing. However, by checking it in the trigger, we
  249.       can deliver a more meaningful error message back to the user. */
  250.  
  251.    IF ( :nNewProductID IS NULL ) THEN
  252.       BEGIN
  253.       EXCEPTION EOrderItemWithNoProduct;
  254.       END
  255.    ELSE
  256.       BEGIN
  257.       SELECT count(*) FROM Product p
  258.          WHERE p.ID = :nNewProductID
  259.          INTO :nProductCount;
  260.  
  261.       IF ( :nProductCount = 0 ) THEN
  262.          BEGIN
  263.          EXCEPTION EOrderItemWithNoProduct;
  264.          END
  265.       END
  266.  
  267. END !!
  268. SET TERM ; !!
  269. COMMIT;
  270.  
  271.  
  272.  
  273.  
  274. SET TERM !!;
  275. CREATE PROCEDURE spCheckOrderCustID
  276.    (
  277.    nNewCustID integer
  278.    )
  279.    AS
  280.    DECLARE VARIABLE nCustmrCount integer;
  281.    BEGIN
  282.  
  283.    /* An order must have a valid customer associated with it. */
  284.  
  285.    /* Note that this business rule is also implemented simply by the 'not null' in the
  286.       order.CustomerID filed definition in conjunction with the foreign key
  287.       constraint already existing. However, by checking it in the trigger, we
  288.       can deliver a more meaningful error message back to the user. */
  289.  
  290.    IF ( :nNewCustID IS NULL ) THEN
  291.       BEGIN
  292.       EXCEPTION EOrderWithNoCust;
  293.       END
  294.    ELSE
  295.       BEGIN
  296.       SELECT count(*) FROM Customer c
  297.          WHERE c.ID = :nNewCustID
  298.          INTO :nCustmrCount;
  299.  
  300.       IF ( :nCustmrCount = 0 ) THEN
  301.          BEGIN
  302.          EXCEPTION EOrderWithNoCust;
  303.          END
  304.       END
  305.  
  306. END !!
  307. SET TERM ; !!
  308. COMMIT;
  309.  
  310.  
  311.  
  312. /*******************************************************************************/
  313. /* Triggers. */
  314. /*******************************************************************************/
  315.  
  316. /* PRODUCT Table */
  317.  
  318. CREATE GENERATOR genProductID;
  319. SET GENERATOR genProductID TO 0;
  320.  
  321. SET TERM !!;
  322. CREATE TRIGGER trgProductBeforeInsert
  323.    FOR Product
  324.    BEFORE INSERT
  325.    POSITION 5
  326.    AS
  327.    BEGIN
  328.  
  329.    IF ( New.ID is null ) THEN
  330.       BEGIN
  331.       New.ID = Gen_ID(genProductID , 1);
  332.       END
  333.  
  334. END !!
  335. SET TERM ; !!
  336. COMMIT;
  337.  
  338.  
  339.  
  340. /* ORDERS Table */
  341.  
  342. CREATE GENERATOR genOrderID;
  343. SET GENERATOR genOrderID TO 0;
  344.  
  345. SET TERM !!;
  346. CREATE TRIGGER trgOrderBeforeInsert
  347.    FOR Orders
  348.    BEFORE INSERT
  349.    POSITION 5
  350.    AS
  351.    BEGIN
  352.  
  353.    IF ( New.ID is null ) THEN
  354.       BEGIN
  355.       New.ID = Gen_ID(genOrderID , 1);
  356.       END
  357.  
  358.    /* An order item must have a valid customer associated with it. */
  359.    EXECUTE PROCEDURE spCheckOrderCustID(New.CustomerID);
  360.  
  361. END !!
  362. SET TERM ; !!
  363. COMMIT;
  364.  
  365. /* Stored Procedure to generate and return a new Order ID 
  366.    This is used by the client to get the Order ID when inserting a 
  367.    new order, so that the client can populate the OrderID field
  368.    of OrderItem records for the new order. 
  369. */
  370. SET TERM !!;
  371. CREATE PROCEDURE spNextOrderID
  372. RETURNS (NEXTID INTEGER)
  373.    AS
  374.    BEGIN
  375.  
  376.    NEXTID = Gen_ID(genOrderID , 1);
  377.    SUSPEND;
  378.  
  379. END !!
  380. SET TERM ; !!
  381. COMMIT;
  382.  
  383.  
  384.  
  385. SET TERM !!;
  386. CREATE TRIGGER trgOrderItemsBeforeInsert
  387.    FOR OrderItem
  388.    BEFORE INSERT
  389.    POSITION 0
  390.    AS
  391.    BEGIN
  392.  
  393.    /* An order item must have a valid order associated with it. */
  394.    EXECUTE PROCEDURE spCheckOrderItemOrderID(New.OrderID);
  395.  
  396.    /* An order item must have a valid product associated with it. */
  397.    EXECUTE PROCEDURE spCheckOrderItemProductID(New.ProductID);
  398.  
  399. END !!
  400. SET TERM ; !!
  401. COMMIT;
  402.  
  403.  
  404.  
  405. SET TERM !!;
  406. CREATE TRIGGER trgOrderBeforeDelete
  407.    FOR Orders
  408.    BEFORE DELETE
  409.    POSITION 0
  410.    AS
  411.    DECLARE VARIABLE nOrderItemCount integer;
  412.    BEGIN
  413.  
  414.    /* Orders cannot be deleted if they have order items. */
  415.    SELECT count(*) FROM OrderItem oi
  416.       WHERE oi.OrderID = Old.ID
  417.       INTO :nOrderItemCount;
  418.  
  419.    IF ( :nOrderItemCount != 0 ) THEN
  420.       BEGIN
  421.       EXCEPTION EDelOrderWithOrderItems;
  422.       END
  423.  
  424. END !!
  425. SET TERM ; !!
  426. COMMIT;
  427.  
  428.  
  429.  
  430. /* CUSTOMER Table */
  431.  
  432. CREATE GENERATOR genCustomerID;
  433. SET GENERATOR genCustomerID TO 0;
  434.  
  435. SET TERM !!;
  436. CREATE TRIGGER trgCustomerBeforeInsert
  437.    FOR Customer
  438.    BEFORE INSERT
  439.    POSITION 5
  440.    AS
  441.    BEGIN
  442.  
  443.    IF ( New.ID is null ) THEN
  444.       BEGIN
  445.       New.ID = Gen_ID(genCustomerID , 1);
  446.       END
  447.  
  448. END !!
  449. SET TERM ; !!
  450. COMMIT;
  451.  
  452.  
  453.  
  454. /* Stored Procedure to generate and return a new Customer ID 
  455.    This is used by the client to get the Customer ID when inserting a 
  456.    new customer, so that the client can populate the CustomerID field
  457.    of Customer records for the new customer. 
  458. */
  459. SET TERM !!;
  460. CREATE PROCEDURE spNextCustomerID
  461. RETURNS (NEXTID INTEGER)
  462.    AS
  463.    BEGIN
  464.  
  465.    NEXTID = Gen_ID(genCustomerID , 1);
  466.    SUSPEND;
  467.  
  468. END !!
  469. SET TERM ; !!
  470. COMMIT;
  471.  
  472.  
  473.  
  474. SET TERM !!;
  475. CREATE TRIGGER trgCustBeforeDelete
  476.    FOR Customer
  477.    BEFORE DELETE
  478.    POSITION 0
  479.    AS
  480.    DECLARE VARIABLE nOrderCount integer;
  481.    BEGIN
  482.  
  483.    /* Customers cannot be deleted if they have orders. */
  484.    SELECT count(*) FROM Orders o
  485.       WHERE o.CustomerID = Old.ID
  486.       INTO :nOrderCount;
  487.  
  488.    IF ( :nOrderCount != 0 ) THEN
  489.       BEGIN
  490.       EXCEPTION EDelCustWithOrders;
  491.       END
  492.  
  493. END !!
  494. SET TERM ; !!
  495. COMMIT;
  496.  
  497.  
  498. /* Grant permissions for this database */
  499.  
  500.  
  501.  
  502. EXIT;