我想创建一个小型发票应用程序。我的第一步是创建一个包含两个表的数据库,每个客户端可以有多个地址和电话号码。
我认为在这里可以安全地假设我正在处理一种one to many
关系。但是,我应该如何设计表和字段,以便它们可以为每个用户存储多个地址和电话号码?通过倍数,我也意味着不确定,因为我的表中不能只有 x 没有列。随手,这是我的想法:
Clients
- Id
- Notes
CONTACTS
- id
- client_id
- address
- phone number
现在我试图避免像这样的第三个连接表:
Clients_Contacts
- id
- client_id
- contact id
因为我仍然想要一对多,而不是many to many
contacts
和clients
之间的关系。我的想法有什么问题吗?有人可以帮我设计这个数据库,并向我展示查询多个地址的示例查询会是什么样子。
为什么要整理连接表?
我会有
Client
- ID (PK, FK of Contact)
- Notes
Contact
- ID (PK)
- client_id
- address
- phone_number
然后,只需将客户端的 ID 设置为联系信息中的 client_id 值即可。
这样,多个联系人记录可以具有相同的client_id。
你的第一个想法对于你的用例来说看起来不错(一对多)。仅当需要多对多关系时,才需要第三个联接表,而您不想要这种关系。
从特定客户端获取所有地址的示例查询是:
SELECT address FROM Contacts WHERE client_id = 1
您说您想为每个用户存储多个地址和电话号码(= 客户,我假设?您当前的模型已经支持此功能。每个客户端都可以根据需要拥有任意数量的联系人(每个联系人都将client_id设置为客户端的 ID)。只有当您要将单个联系人(地址/电话号码)分配给多个客户时,您才需要第三个表。