Mysql 不同组和字段用户的数据库结构

Mysql 不同组和字段用户的数据库结构,mysql,database,structure,Mysql,Database,Structure,有两种类型的客户,即个人客户和公司客户。 例如,他们有相同的字段(电子邮件、密码),但公司客户有唯一的字段(公司名称、公司电话、地址)。 数据库的结构还可能是什么 mysql> desc `customers`; +-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra |

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

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)

你可以更具体地说明你想要完成什么。当然,数据库结构没有问题,但是您没有指定任何内容

如果您试图从两个表中检查哪个id匹配,并选择
公司名称、公司地址
,下面是我所说的方法,但您可以更具体地说明您想要什么

SELECT corporate_customers.company_name ,corporate_customers.company_address FROM corporate_customers WHERE corporate_customers.id_customer = customers.id_customer

这很有效。除此之外,您可能需要在
corporate_customers
表中添加
唯一约束
,如下所示:

  CONSTRAINT uc_corporate_customers UNIQUE (company_name,company_address)

这将确保客户没有重复的公司名称和公司地址。

不,这不是构建表的唯一方法。如果您正在寻找其他建议。你可以考虑一个“人”表,一个“公司”表,一个“客户”表和两个多对多表,称为“PuffixCube”和“PosiySuffCube”。
该示例为您提供了不同的Customer对象,以及不同的person和company对象。我在您的示例中看到的问题是,在两个不同的表中,您将“id_customer”作为主键。我会认为这是坏的形式。如何构建表取决于您,但我认为这有一个问题。

不确定您所说的“可用于下一个db结构”是什么意思。我的意思是,这是解决此问题的唯一方法吗?我在id上有主键_customer@uint
作为主键,它总是(必须)唯一的
。上述限制将阻止两个公司客户拥有相同的公司名称和地址。但两个不同的客户如何拥有两个相同的公司名称和地址?@uint如果您/用户尝试/尝试插入此类数据会怎么样?我只是想分享我对你的结构的反馈。创建数据结构是为了满足需要,并尽可能保护数据。如果您是说,公司客户将具有唯一的
公司名称、公司地址..
,则应添加一个唯一的约束,以便您不能插入具有重复详细信息的记录。但您不是在说为什么这是一个不好的表单?这对我来说会很有趣,因为我在不同的情况下使用相同的结构。如果你问我,它只是让人困惑。当某人需要按id_customer查找客户时,他们如何知道要查看哪个表?该ID可能存在于客户中,也可能存在于公司客户中。或者,想象一下这个“约翰·多伊”的id_顾客:1。然后,“百事公司”id_客户:1。当id_customer:X可以代表两条记录中的一条时,您会失去一点完整性。谢谢您的评论,我会注意到这一点
"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