数据库设计:最佳方法

时间:2013-01-22 09:16:28

标签: database database-design

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

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

5 个答案:

答案 0 :(得分:3)

好的设计将是

  • 客户:客户表 - CustomerId,其他栏目
  • 供应商:供应商表 - SupplierId,其他栏目
  • 电话:电话表 - TelephoneId,其他栏目
  • CustomerTelephones:CustomerId,TelephoneId
  • 供应商电话:SupplierId,TelephoneId

答案 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为CustomersSuppliers,ant TypeId将为resp的ID。