【发布时间】:2018-11-27 17:47:36
【问题描述】:
但是,我似乎找不到如何将 Post、Story 和 Comment 之间的泛化情况转换为 SQL。我的老师建议使用同一张表,但我认为如果我想添加更多功能,比如故事标签,这会限制我。现在我已经有了两个额外的关系:一个帖子可以有多个子 cmets,一个故事属于一个特定的频道。
我应该听从老师的建议吗?或者我应该使用 3 个类?
【问题讨论】:
但是,我似乎找不到如何将 Post、Story 和 Comment 之间的泛化情况转换为 SQL。我的老师建议使用同一张表,但我认为如果我想添加更多功能,比如故事标签,这会限制我。现在我已经有了两个额外的关系:一个帖子可以有多个子 cmets,一个故事属于一个特定的频道。
我应该听从老师的建议吗?或者我应该使用 3 个类?
【问题讨论】:
由于您的类层次结构只有两个子类,并且只有 3 个附加属性(title、channel 和 post),您应该使用单表继承方法。即使您以后可能会添加更多属性/方法,这也是最佳选择,因为使用多个表实现类层次结构将意味着更大的工作量/开销。
您可以在Representing class hierarchies with SQL database tables 部分(我撰写的关于在 JavaScript 前端 Web 应用程序中处理类层次结构的教程)中阅读有关此选择的更多信息。
【讨论】:
一如既往,视情况而定。拥有一个表的优点是可以在一个简单的查询中访问相关的帖子信息,并且只需查看列内的一个标志,告诉你正在处理什么样的对象。拥有单独的表格是一种更“学术”的解决方法,因为您(如您所见)将对象信息分开。
在这种情况下,我可能会采用单表方法。但是 - YMMV - 你也可以坚持你的 3 表方法。这里可能会有其他意见。等几天再决定:-)
【讨论】: