Mark As Completed Discussion

To design the database schema based on the entities and relationships we have identified, we can start by defining the table names and the columns for each table. Let's take a look at an example of how we can design the database schema for our payment app:

TEXT/X-JAVA
1public class DatabaseSchema {
2    // Define the table names
3    private static final String USERS_TABLE = "users";
4    private static final String PAYMENTS_TABLE = "payments";
5    private static final String TRANSACTIONS_TABLE = "transactions";
6    private static final String PRODUCTS_TABLE = "products";
7
8    // Define the columns for each table
9    private static final String USER_ID_COLUMN = "user_id";
10    private static final String NAME_COLUMN = "name";
11    private static final String EMAIL_COLUMN = "email";
12    private static final String PASSWORD_COLUMN = "password";
13
14    private static final String PAYMENT_ID_COLUMN = "payment_id";
15    private static final String AMOUNT_COLUMN = "amount";
16    private static final String DATE_COLUMN = "date";
17    private static final String STATUS_COLUMN = "status";
18
19    private static final String TRANSACTION_ID_COLUMN = "transaction_id";
20    private static final String TYPE_COLUMN = "type";
21    private static final String DESCRIPTION_COLUMN = "description";
22    private static final String TRANSACTION_DATE_COLUMN = "transaction_date";
23
24    private static final String PRODUCT_ID_COLUMN = "product_id";
25    private static final String PRODUCT_NAME_COLUMN = "product_name";
26    private static final String PRICE_COLUMN = "price";
27    private static final String QUANTITY_COLUMN = "quantity";
28
29    // Define the relationships using foreign keys
30    private static final String USER_PAYMENT_FK = "fk_user_payment";
31    private static final String USER_TRANSACTION_FK = "fk_user_transaction";
32    private static final String PAYMENT_TRANSACTION_FK = "fk_payment_transaction";
33    private static final String PAYMENT_PRODUCT_FK = "fk_payment_product";
34
35    // Define the create table statements for each table
36    private static final String CREATE_USERS_TABLE =
37        "CREATE TABLE IF NOT EXISTS " + USERS_TABLE + " ("
38        + USER_ID_COLUMN + " INT PRIMARY KEY AUTO_INCREMENT, "
39        + NAME_COLUMN + " VARCHAR(100) NOT NULL, "
40        + EMAIL_COLUMN + " VARCHAR(100) NOT NULL, "
41        + PASSWORD_COLUMN + " VARCHAR(100) NOT NULL)";
42
43    private static final String CREATE_PAYMENTS_TABLE =
44        "CREATE TABLE IF NOT EXISTS " + PAYMENTS_TABLE + " ("
45        + PAYMENT_ID_COLUMN + " INT PRIMARY KEY AUTO_INCREMENT, "
46        + USER_ID_COLUMN + " INT NOT NULL, "
47        + AMOUNT_COLUMN + " DECIMAL(10,2) NOT NULL, "
48        + DATE_COLUMN + " DATE NOT NULL, "
49        + STATUS_COLUMN + " VARCHAR(20) NOT NULL, "
50        + FOREIGN KEY ("
51        + USER_ID_COLUMN + ") REFERENCES "
52        + USERS_TABLE + "(" + USER_ID_COLUMN + "), "
53        + "FOREIGN KEY ("
54        + PAYMENT_ID_COLUMN + ") REFERENCES "
55        + TRANSACTIONS_TABLE + "(" + TRANSACTION_ID_COLUMN + "), "
56        + "FOREIGN KEY ("
57        + PAYMENT_ID_COLUMN + ") REFERENCES "
58        + PRODUCTS_TABLE + "(" + PRODUCT_ID_COLUMN + "))";
59
60    private static final String CREATE_TRANSACTIONS_TABLE =
61        "CREATE TABLE IF NOT EXISTS " + TRANSACTIONS_TABLE + " ("
62        + TRANSACTION_ID_COLUMN + " INT PRIMARY KEY AUTO_INCREMENT, "
63        + USER_ID_COLUMN + " INT NOT NULL, "
64        + TYPE_COLUMN + " VARCHAR(50) NOT NULL, "
65        + DESCRIPTION_COLUMN + " VARCHAR(200) NOT NULL, "
66        + TRANSACTION_DATE_COLUMN + " DATE NOT NULL, "
67        + "FOREIGN KEY ("
68        + USER_ID_COLUMN + ") REFERENCES "
69        + USERS_TABLE + "(" + USER_ID_COLUMN + "))";
70
71    private static final String CREATE_PRODUCTS_TABLE =
72        "CREATE TABLE IF NOT EXISTS " + PRODUCTS_TABLE + " ("
73        + PRODUCT_ID_COLUMN + " INT PRIMARY KEY AUTO_INCREMENT, "
74        + PRODUCT_NAME_COLUMN + " VARCHAR(100) NOT NULL, "
75        + PRICE_COLUMN + " DECIMAL(10,2) NOT NULL, "
76        + QUANTITY_COLUMN + " INT NOT NULL)";
77
78    public static void main(String[] args) {
79        // Execute the create table statements
80        executeCreateTableStatement(CREATE_USERS_TABLE);
81        executeCreateTableStatement(CREATE_PAYMENTS_TABLE);
82        executeCreateTableStatement(CREATE_TRANSACTIONS_TABLE);
83        executeCreateTableStatement(CREATE_PRODUCTS_TABLE);
84
85        System.out.println("Tables created successfully!");
86    }
87
88    private static void executeCreateTableStatement(String createTableStatement) {
89        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/payment_app", "username", "password");
90             Statement statement = connection.createStatement()) {
91
92            statement.execute(createTableStatement);
93
94        } catch (SQLException e) {
95            e.printStackTrace();
96        }
97    }
98}
JAVA
OUTPUT
:001 > Cmd/Ctrl-Enter to run, Cmd/Ctrl-/ to comment