0

顧客には、個人顧客と法人顧客の 2 種類があります。たとえば、同じフィールド (電子メール、パスワード) がありますが、法人顧客には固有のフィールド (会社名、会社の電話番号、住所) があります。データベースの構造は他に何がありますか?

mysql> desc `customers`;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id_customer | int(11)     | NO   | PRI | NULL    | auto_increment |
| email       | varchar(32) | NO   |     | NULL    |                |
| password    | int(16)     | NO   |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> desc `corporate_customers`;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| id_customer     | int(11)     | NO   | PRI | NULL    |       |
| company_name    | varchar(32) | NO   |     | NULL    |       |
| company_address | text        | NO   |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
4

3 に答える 3

1

いいえ、テーブルを構築する唯一の方法ではありません。他の提案を探している場合。「person」テーブル、「company」テーブル、「customer」テーブル、および「person_customer」と「company_customer」と呼ばれる 2 つの多対多テーブルを考えることができます。

"PERSON"
  person_ID, PK
  email
  password
"Company"
  company_id, PK
  company_name
  company_address
"Customer"
  id_customer, PK
"person_customer"
  person_ID, FK
  id_customer, FK
"company_customer"
  company_id, FK
  id_customer, FK

この例では、別個の Customer オブジェクトと、別個の個人および会社オブジェクトが得られます。あなたの例で見られる問題は、2 つの異なるテーブルに主キーとして「id_customer」があることです。私はそれを悪い形だと考えます。テーブルをどのように構築するかはあなた次第ですが、それには問題があります。

于 2012-10-22T14:45:41.087 に答える
0

達成しようとしていることをより具体的にすることができます。もちろん、データベース構造に問題はありませんが、何も指定しません。

2 つのテーブルからどの ID が一致するかを確認してここで選択するようなことをしようとしている場合は、次のようcompany_name , company_addressにします。

SELECT corporate_customers.company_name ,corporate_customers.company_address FROM corporate_customers WHERE corporate_customers.id_customer = customers.id_customer
于 2012-10-22T14:31:53.717 に答える
0

これは機能します。corporate_customersあなたがテーブルでやりたいと思うかもしれない唯一のことはunique constraint、以下のように追加することです:

  CONSTRAINT uc_corporate_customers UNIQUE (company_name,company_address)

これにより、顧客の compnay_name と company_address が重複しないようになります。

于 2012-10-22T14:33:52.467 に答える