2013-06-26 50 views
1

我正面临以下数据库设计问题。 我有三个存储资产信息的表格和一个用于退役资产的表格。应该与多个父键关联的外键

车辆

ID. Primary key 
Name. 
Model. 
Manufacture_year. 
Manufacture _name. 
Engine _size. 
Price. 

IT

ID. Primary key 
Name. 
Type. 
Operating_system. 
License_size. 
price. 

家具

ID. Primary key 
Name. 
Type. 
Color. 
price 

retired_asset

Asset_ID. // I need to link this colum to the ID column for either the vehicle, IT or furniture table. 
    Retired_reason. 
    Date 

所以我有以下两个问题: -

  1. 由于每个资产具有不同的列和不同的业务逻辑。那么,我的方法是将每种资产类型存储在单独的表格上是否是正确的方法

  2. 在表,我怎么可以链接foreign_key asset_idID列无论是在汽车,IT或家具表?

在此先感谢您的帮助。

+0

你不能这样做。外键**总是**引用**正好一个**(并且只有一个)表。因此,您需要在'retired_asset'表中的'vehicle_id','furniture_id'和'it_id'外键,并引用相应的表。在'retired_asset'中的任何一行中,只有其中一个可以被填充。 –

+0

向其引入'Asset'表和子类型'Vehicle,Furniture,IT'。将'RetiredAsset'链接到'Asset'。示例http://stackoverflow.com/search?q=user%3A196713+subtype –

回答

2

车辆,IT和家具真的是“资产”类的子类。

方法与共享主键结合使用可能会使您受益匪浅。您可以通过访问标签并单击信息来获取详细信息。

通过这种方式实现的最大好处是外键总是可以引用资产表,但也会借助共享主键的魔力引用其中一个子类表。

这是一个工作设置。在你的情况下,我推荐它。

+0

感谢您的回复,实际上我是关于拥有一般资产类。但我展示的专栏只是他所有专栏的一个样本。并且大多数列并不常见。所以为什么我为每种资产类型创建完全独立的表格。 –

+0

John,将公共列放在资产类表中,并将那些特定于子类的子类放入该子类的表中。关键是所有表格都通用。 – sqlvogel