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



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

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)

不,这不是构建桌子的唯一方法。如果您正在寻找其他建议。您可能会考虑一个"人"表,一个"公司"表,"客户"表,还有两个称为" Person_customer"one_answers" 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

该示例为您提供了一个独特的客户对象,以及不同的人和公司对象。我在您的示例中看到的问题是,您将" ID_customer"作为两个不同表中的主要键。我会认为这种不好的形式。您如何构建桌子取决于您,但我看到了一个问题。

您可能会更具体地在要完成的工作上。当然,数据库结构没有问题,但是您没有指定任何内容。

如果您想做一些事情,例如检查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

这有效。另外,您可能想在corporate_customers表中执行的唯一一件事是添加unique constraint如下:

  CONSTRAINT uc_corporate_customers UNIQUE (company_name,company_address)

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

最新更新