我不是DBA,我不知道什么是最好的解决方案。我有两张桌子,
Custumers Table
CustomerId (primary key, identity)
...
和
Suppliers Table
SupplierId (primary key, identity)
...
我希望存储多个电话号码和多封电子邮件。我想创建另外两个表,电子邮件和电话,并使用那些与我的客户和供应商联系,如
Telephones Table
Id
UserId (reference to SuppliersId or CustomerId)
Value
...
但是,如果我作为客户和供应商的钥匙使用身份我肯定会遇到问题。我想做一些像
这样的事情Telephones Table
Id
SuppliersId
CustumersId
Value
...
但我不知道这是不是一个好设计。有什么建议? 谢谢
答案 0 :(得分:3)
好的设计将是
答案 1 :(得分:3)
一个想法:
Entity (ID (PK), {common fields})
Customer (ID (PK), EntityID (FK), {other fields})
Supplier (ID (PK), EntityID (FK), {other fields})
Telephone (ID (PK), EntityID (FK), Value)
这还有减少客户和供应商之间重复的额外优势。
答案 2 :(得分:0)
我建议您为表分配一个ID,然后添加一个与SupplierID和CustomerID具有相同数据类型的引用字段
答案 3 :(得分:0)
其他答案是不错的初学者解决方案,但它们都有相同的基本缺陷,即客户或供应商是关系,而不是他们自己的独特实体。客户不是一个人,而是一个人与一个人之间的关系。
事实上,一个人可以同时或随着时间的推移成为员工,客户,供应商。
客户或供应商也可以是一家企业,其中涉及许多人。
这是正确答案:
PARTY
id
type {individual, organization, automated_agent}
org_name null
first_name null
last_name null
PARTY_RELATIONSHIP
from_party_id FK PARTY
type {supplier_of, customer_of, ...}
to_party_id FK PARTY
from_date
to_date null
Usage:
Insert into party (id, type, org_name) values (1, 'organization', 'Raw Steel Co');
Insert into party (id, type, f_name, last_name) values (2, 'individual', 'Davide', 'X');
-- Raw Steel Co is both a customer of and supplier to you:
Insert into party_relationship values (1, 'supplier_of', 2, getdate(), null);
Insert into party_relationship values (1, 'customer_of', 2, getdate(), null);
现在,有些人因为空值而不喜欢单表继承,但是更容易使用它。如果你很挑剔,请使用类表继承。
'type'列应该是键入表的外键。
答案 4 :(得分:-1)
你可以这样做
Customers: Table of customers - CustomerId, Other columns
Suppliers: Table of suppliers - SupplierId, Other columns
Telephones: Table of telephones - TelephoneId,TypeId,TypeName, other columns
其中TypeName为Customers
或Suppliers
,ant TypeId
将为resp的ID。