栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

关系数据库中类似面向对象的结构

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关系数据库中类似面向对象的结构

这是我大约十年前提出的解决方案。使用该设计的系统仍在运行,因此与我的大多数代码相比,它可以很好地生存。;)今天,我可能会使用Scott提到的ORM软件包之一,但是直接使用SQL确实没有大问题。

  1. 将所有继承关系建模为表之间的联接。系统中的每个表都将包含特定类的属性。

  2. 使用合成对象ID(oid)作为所有对象的主键。序列生成器或自动增量列对于生成oid值是必需的。

  3. 所有继承的类必须使用与其父类相同的oid类型。使用级联删除将oid定义为外键。父表获取自动增量oid列,子表获取普通oid列。

  4. 有关最终类的查询在相应的表上进行。您可以将所有父类表加入查询中,也可以延迟加载所需的属性。如果您的继承层次结构很深并且您有很多类,那么ORM包可以真正简化您的代码。我的系统有少于50个类,最大继承深度为3。

  5. 跨子类的查询(即,对父类的查询)可以按实例延迟加载子属性,也可以对与基类连接的每个子类重复查询。根据父类查询延迟加载子属性需要您知道对象的类型。父类中可能已经有足够的信息,但是如果没有,则需要添加类型信息。同样,这是ORM软件包可以提供帮助的地方。

没有成员属性的虚拟类可以在表结构中跳过,但是您将无法基于这些类进行查询。

这就是“向我展示与类型工作者的所有交流”的样子。

select * from comm c, worker w where c.actor=w.oid;

如果您有通信的子类,并且要立即加载所有子类属性(也许您的系统不允许部分构造),则最简单的解决方案是急于加入所有可能的类。

select * from comm c, worker w, missive m where c.actor=w.oid and c.oid=m.oid;select * from comm c, worker w, shoutout s where c.actor=w.oid and c.oid=s.oid;

最后一件事。确保您具有良好的数据库和正确的索引。如果您的数据库无法优化这些联接,则性能可能是一个严重的问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号