Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库模式问题,产品类型_Mysql_Database_Database Design - Fatal编程技术网

Mysql 数据库模式问题,产品类型

Mysql 数据库模式问题,产品类型,mysql,database,database-design,Mysql,Database,Database Design,我的问题是如何为不同类型的产品建模事务 因此有一个事务表: 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(fk)
不同类型的产品有不同的表格。 图书目录:

BookId(pk)
Name
Description
Price
还有一张桌子:

PenId(pk)
Color
Description
Price
还有一张削铅笔的桌子:

SharpenId(pk)
Description
Price

现在我的问题是将交易与不同项目的特定id链接起来。 一种方法是在事务表中包含:

TransactionId(pk)
Amount
Method
AuthorisedBy
ProductType
ProductTypeId(fk)
其中product type指的是表格的标题,例如Books,在这种情况下product id指的是BookId

或者另一种方法是有一个“产品”链接表,该表引用其他表的每个不同id,因此事务表如下所示:

TransactionId(pk)
Amount
Method
AuthorisedBy
ProductID(fk)
ProductId(pk)
PoductType
ProductTypeId(fk)
产品表如下所示:

TransactionId(pk)
Amount
Method
AuthorisedBy
ProductID(fk)
ProductId(pk)
PoductType
ProductTypeId(fk)
但这是一个与事务表完全相同的表。因此,我的问题是如何有效地将不同的产品类型表链接到事务?
请注意,我不是在为学校的削笔服务建模,它们只是示例:P

首先,我不喜欢DB模型。产品定义只需要一个表,该表可以容纳描述每个产品的列: (表)产品:ID-PK、名称、描述、颜色、价格、ProductTypeID-FK

您需要额外的表格来解释产品的类型,例如: (表)ProductTypes:ProductTypeID-PK,ProductTypeName

对于注册事务,您只需要一个表: (表)交易:TransactionID,ProductID-FK,金额,方法,授权人

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

但是我的产品类型彼此非常不同,例如在我的“削笔”表中,因为它是一项服务,所以该表中有许多不同的条目,这些数据将如何存储在您的产品表中,因为它们没有“颜色”或除价格之外的任何其他公共列,description.+1您可以使用1:1关系扩展产品表以添加某些属性;如回答中提到的ProductTypes,或您评论的ProductColor。product表本身可以包含生成发票所需的所有字段,并且发票代码可以不需要处理各种产品类型所需的复杂性。我将对这个答案打勾,因为它回答了我提出的问题,但不幸的是,我的问题需要重新设计并在以后提出。