2009-10-14 38 views
0

我的问题是如何为不同类型的产品建模交易。DB架构问题,产品类型

所以就有了交易表:

TransactionId(pk) 
Amount 
Method 
AuthorisedBy(fk) 

而且有不同类型的产品不同的表。 书籍表:

BookId(pk) 
Name 
Description 
Price 

并有笔表:

PenId(pk) 
Color 
Description 
Price 

而对于铅笔锐化服务表:

SharpenId(pk) 
Description 
Price 

现在我的问题是连接与交易不同项目的特定ID。 一种方法是让在交易表:

TransactionId(pk) 
Amount 
Method 
AuthorisedBy 
ProductType 
ProductTypeId(fk) 

当产品类型将涉及到表中,如书籍和产品ID将引用BOOKID在这种情况下的称号。

或另一种方法是有引用到每个不同的ID其他表的“产品”的连接表,所以事务表是这样的:

TransactionId(pk) 
Amount 
Method 
AuthorisedBy 
ProductID(fk) 

和产品表将看起来像这样:

ProductId(pk) 
PoductType 
ProductTypeId(fk) 

但是,然后这是一个表是完全相同的交易表。所以我的问题是如何有效地将不同的产品类型表链接到事务? 请注意我不是一个学校铅笔锐化服务的建模,他们只是例子:P

回答

2

首先,我不喜欢DB模型。您只需要一张用于产品定义的表格,该表格可以包含描述每种产品的列: (表格)产品:ID - PK,名称,描述,颜色,价格,产品类型ID - FK

您需要额外的表格来说明类型的产品,它的品类让的说: (表)ProductTypes:ProductTypeID - PK,ProductTypeName

而对于交易登记,你将只需要一个表: (表)的交易:TransactionID的,产品ID - FK,金额,方法,授权通过

我认为这个模式可以让您解决您的问题。 快乐编码。

+0

但是我的产品类型彼此差别很大,例如在我的'铅笔锐化'表中,因为它是一项服务,在这张表中有很多不同的条目,以及该数据如何存储在您的产品中表,因为他们没有'颜色',或除了价格,描述之外的其他任何共同的列。 – theraven 2009-10-14 10:15:26

+0

+1您可以用1:1关系扩展产品表以添加某些属性;如本答案中提到的ProductTypes或ProductColor以供评论。产品表本身可以包含生成发票所需的所有字段,并且开具发票代码可以避免处理各种产品类型所需的复杂性。 – Andomar 2009-10-14 12:32:47

+0

我打算给这个答案一个答案,因为它回答了我问的问题,但不幸的是我的问题需要改进,稍后再问。 – theraven 2009-10-15 06:24:13