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