0

私は2つのテーブルを持っています: tblCustomer, tblProduct:

tblCustomer:
    Id: Integer, auto-increament
    Name: Varchar(30)
    ....

tblProduct
    Id: Integer, auto-increament
    Name: Varchar(50)
    customerId: Integer
    ....

および 2 つのクラス: CustomerProduct:

public class Product
{
    private int id;
    private int name;
    /* Other stuffs */
}

public class Customer 
{
    private int id;
    private String name;
    private String phoneNumber;

    /* get-set and others stuffs */

    public static boolean add(Customer cus) {
        /* This is for insert a customer to tblCustomer */
    }

    public boolean addProduct(Product pd) {
        /* This is for insert a product to tblProduct with current customer Id */
    }
}

顧客がアカウントを登録すると、次のように呼び出されます。

Customer cus = new Customer(/* ... */);
Customer.add(cus);

顧客が製品を購入するとき:

Product pd = new Product(/* ... */);
currentCustomer.addProduct(pd);

しかし、私の先生は、テーブルCustomer.addProduct上で動作するため、OOAD (および OOP でさえ) では正しくないと言っていましたが、そうですか? tblProductこの場合の良い設計は何ですか?

** 更新: ** 製品はまだ事前に定義されていません。顧客が製品を購入すると、ストアが作成して顧客に配送するため、同じ製品が 2 つ発生することはまれtblCustomerProductです。必要ですか?

4

4 に答える 4

2

あなたの先生はおそらく、「CustomerProduct」のような名前の 3 番目のテーブルが必要だということでしょう。このテーブルには、顧客と顧客が購入した製品との間のリンクが含まれています。

tblCustomerProduct:
    Id: Integer, auto-increament
    CustomerId: Varchar(30)
    ProductId: Varchar(30)

したがって、顧客が製品を購入すると、このデータをテーブル CustomerProduct に追加します。これにより、冗長なデータが削除され、削除が非常に簡単になります

于 2013-05-03T09:56:27.353 に答える