1

我不是 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
...

但我不知道是不是一个好的设计。有什么建议吗?谢谢

4

5 回答 5

3

一个好的设计应该是

  • 客户:客户表 - CustomerId、其他列
  • 供应商:供应商表 - SupplierId,其他列
  • 电话:电话表 - TelephoneId,其他列
  • 客户电话:客户 ID、电话 ID
  • 供应商电话:供应商 ID、电话 ID
于 2013-01-22T09:20:49.490 回答
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)

这还具有减少客户和供应商之间重复的额外优势。

于 2013-01-22T09:22:44.260 回答
0

我的建议是您为表分配一个 ID,然后添加一个与 SupplierID 和 CustomerID 具有相同数据类型的引用字段

于 2013-01-22T09:21:16.787 回答
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);

现在,有些人因为空值而不喜欢单表继承,但该死的,它更容易使用。如果您很挑剔,请使用类表继承。

“类型”列应该是类型表的外键。

于 2013-01-22T18:50:58.463 回答
-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 将是Customersor Suppliers, antTypeId将是相应的 id。

于 2013-01-22T09:25:35.863 回答