首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库中的共享关系

数据库中的共享关系
EN

Stack Overflow用户
提问于 2013-09-04 18:18:44
回答 2查看 67关注 0票数 0

很抱歉如此的无知……但是我正在尝试建立一个包含五个表的数据库...Truck_fleets,出租车,拖车,轮胎,tyre_pressures。除了“轮胎”需要是“驾驶室”和“拖车”的孩子之外,应该是直截了当的。卡车的驾驶室和拖车都有轮胎!

在设置它时,我在“轮胎”中有两个键,其中只有一个是满意的。也就是说,轮胎不是属于驾驶室的就是属于拖车的。

任何建议或参考,我可以读到这一点,请。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-09-05 18:55:00

尝试两个关系表。一种连接出租车和轮胎,称为cab_tyres;另一种连接拖车和轮胎,称为trailer_tyres。

每个表包含两个id。

代码语言:javascript
运行
复制
cab_tyres: 
 int cab_id   //FK to cab table
 int tyre_id  //FK to tyre table

trailer_tyres: 
 int trailer_id //FK to trailer table
 int tyre_id    //FK to tyre table

简单地说,这里的理论是实体关系本身就是实体,并根据它们相关的事物进行类型化。您通常不会混合类型,因此我们有两个关系表。

如果您希望关联cab和它的尾部,那么这将是另一个关系实体,依此类推。

票数 1
EN

Stack Overflow用户

发布于 2013-09-04 18:46:13

这实际上取决于cabstrailers有多少共同点。一种方法是在您的tyre表中有两个字段的路由,您可能还需要一个检查约束来确保只有一个为null,而这两个字段都不为null,以确保每个轮胎都有一个,并且只有一个父项。

另一种选择是将拖车和卡车存储在一个表中,并有一个Type字段来存储它是卡车还是拖车,那么您的轮胎表只需要一个字段就可以链接到这个主表的ID。您只需确保该表包含您在truck和trailer中拥有的所有列。

另一种选择是使用继承,这类似于单表方法,但如果两种类型之间没有太多重叠的列,或者非共享子类型,这可能是一种更好的方法。因此,您可能会有这样的表:

Vehicle { VehicleID (PK),SharedColumn1,SharedColumn2 }

Truck { VehicleID (PK,FK Vehicle),TruckColumn1,TruckColumn2 }

拖车{ VehicleID (PK,FK Vehicle),TrailerColumn1,TrailerColumn2 }

轮胎{ TyreID (PK),VehicleID (FK Vehicle),TryeColumn1 }

TruckOnlyChild {ID (主键),VehicleID (FK卡车)}

这三种方法各有利弊,你真的需要选择哪种方法对你更有利。对于它的价值,我个人会选择后两个选项中的一个,取决于我的需求。如果属性足够稀疏,我会考虑第二种选择,但使用EAV而不是有许多空列

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18611190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档