0

客户分为两种,个人客户和企业客户。例如,它们具有相同的字段(电子邮件、密码),但企业客户具有唯一的字段(公司名称、公司电话、地址)。还有什么可能是数据库的结构?

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”的多对多表。

"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 对象,以及不同的 person 和 company 对象。我在您的示例中看到的问题是您将“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 回答