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