不同组和字段的用户的DB结构

时间:2012-10-22 14:09:58

标签: mysql database structure

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

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)

3 个答案:

答案 0 :(得分:1)

不,这不是构建表的唯一方法。如果您正在寻找其他建议。您可以考虑使用“人员”表,“公司”表和“客户”表以及两个名为“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对象,以及不同的人员和公司对象。我在您的示例中看到的问题是您将“id_customer”作为两个不同表中的主键。我会考虑那种糟糕的形式。你如何构建表格取决于你,但我发现它存在问题。

答案 1 :(得分: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

答案 2 :(得分:0)

这很有效。您可能只想在corporate_customers表格中添加unique constraint,如下所示:

  CONSTRAINT uc_corporate_customers UNIQUE (company_name,company_address)

这将确保客户没有重复的compnay_name和company_address。