gpt4 book ai didi

sql - 数据库子类化设计

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:52 24 4
gpt4 key购买 nike

我正在创建数据库项目,有一件事对我来说不太清楚。看看这个: part of database model

现在我不确定制裁剪理模型的最佳方法是什么。 TOOL 和 RESOURCE 除了 ITEM 之外不需要任何其他字段。只有 Recipe 需要新列(用于)。但我必须以某种方式将食谱与工具和资源区分开来。好的,我可以为资源和工具创建 2 个具有不同名称的相同表,一个用于配方,但是我如何处理项目呢?创建是作为 View ?那么它就不会是真正的子类化了。

或者我只是创建类似的东西:使用 (id,name,description) 创建 ITEM 表,然后只使用 (item_id) 创建 RESOURCE 那是外键和相同的工具并添加触发器,当我插入资源时它真的添加到ITEM 然后只是在资源中添加外键?这似乎是最明智的选择,但这可能吗?

最佳答案

这是一个经典的“视情况而定”的答案。答案实际上取决于潜在关系以及一个项目是否可以属于多个类型。

如果存在所有项目都可以在其中的关系,那么单个项目表会更可取,因为您的关系表中可以有一个外键列。如果存在只有特定类型的项目才能拥有的关系,那么你需要使用 Class Table Inheritance ,所以就像你对工具所说的那样,你会有另一个名为 Tools 的表,其中有一个引用 Item 的主键列 ItemID。这样你就可以为 Tools.ItemID 限制关系创建外键到某种类型的元素。如果一个项目可以属于多个类型,那么您几乎肯定应该使用类表继承。

如果不需要限制关系,一个item只能属于一种类型,那么在Items表中有一个ItemType列就可以识别item类型,不需要完全使用表继承。

如果不会有超过一种itemtype可以出现的关系,而会有只能出现一种的关系那么使用3个表可能更简单,维护更少,并使用 View 组合他们,它仍然应该提供所有需要的功能。

综上所述,Inheritance会需要更多的表,更多的管理,但更灵活,所以看情况。

关于sql - 数据库子类化设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com