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