zope/zodb应用程序的内部引用。

gocept.reference的Python项目详细描述


简介

这个包提供了一个参考实现。

此实现的特定属性是:

  • 用于内部引用
  • 提供完整性强制
  • 部分在relational 外键之后建模

内容

  • 参考集合
  • 管理整套设备
  • 管理集合的单个项目
  • 验证引用存在性
  • 参考资料
  • 参考资料集
  • zope.schema字段
  • 更改
  • 动机

    在开发应用程序时,我们经常发现需要引用对象 存储为应用程序数据的。这些对象的示例包括 集中管理的"主数据"。

    对这些对象的引用通常是我们 开发时,它们的行为应该像普通的python对象引用一样 在我们的应用程序的控制下。

    在zope和zodb的世界中,有不同的方法可以实现这一点。这个 不同的方法有不同的语义和副作用。我们的目标是 统一内在参照对象的方式,并提供 根据需要在不同的语义之间切换,而不重写应用程序代码 并且不需要迁移持久数据结构(至少从 应用程序的观点)。

    模型比较

    我们的目标是确定 现有方法。我们包括三种来自世界各地 python/zope/zodb以及规范化的标准关系方法 表,

    我们使用四个标准来描述每个解决方案:

    < DL>
    参考数据
    存储哪些数据来描述引用?
    引用语义
    引用有什么含义?它的意义如何改变?
    完整性
    如果涉及 引用更改或被删除?
    设置/查找
    应用程序开发人员需要做什么来设置引用或 查找引用的对象?
    <表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> < COL/> <广告> 属性 python引用 弱引用 按键参考 关系数据库 < /广告> <正文> 参考数据 OID OID 特定于应用程序的键 特定于应用程序(主键+表名) 引用语义 指的是 python对象 指的是 python对象 指的是 与保存的密钥关联 在查找时。 引用关联的对象(行) 在查找时使用主键。 完整性 但是,该引用仍然有效, 目标对象可能已丢失其 应用程序的含义。 引用可能已过时 并将引用对象保留在 无效状态。 引用可能变成 陈旧. 取决于外键的使用 以及约束的数据库实现。 通常可以强制保持有效。 设置/查找 正常的python属性访问。 使用weakref包装存储和 _调用查找。可能使用属性 为方便起见。 取决于实施情况。 可能为了方便而使用属性。 显式存储主键。 使用join查找。 < > <表>

    观察结果

    • 关系:每个对象(行)都有一个确定一级 密钥,

      zodb(像文件系统)可以有多个指向对象的硬链接。 当删除到对象的最后一个硬链接时,将删除对象。这个 无法使用硬链接引用对象,因为 对象删除将不会被注意到,对象将继续存在。 zodb本身没有对象所在的规范位置的概念。 已定义。

    • 关系:当引用一个对象时,我们可以通过声明 外键。这与存储的数据正交。

    • 关系:作为应用程序级别的键,用于标识目标 对于引用,应用程序可以选择删除行并重新添加行 以后使用相同的主键。如果强制执行完整性,则需要 在数据库级别支持暂时忽略损坏的外键。

    • 普通的python引用自然地嵌入到应用程序中。 属性允许隐藏查找和存储的实现 参考资料。

    参考实施的结论和要求
    • 允许配置外键约束 交易)。此配置必须可以随时更改 提供自动迁移路径。
    • 使用应用程序级键引用对象。
    • 使用规范位置和主键存储对象并确定 是否删除了对象。
    • 在修改对象的键时区分两个用例:
      1. 应用程序引用正确的对象,但具有错误的键(如 密钥本身可能对应用程序有意义)。在这种情况下 必须更新对象才能接收新的、正确的密钥和引用 必须更新以引用此新密钥。
      2. 应用程序使用正确的键引用了错误的对象。在这 case键引用的对象必须替换为不同的 对象:

    实施说明
    • 规范位置由位置/包含决定。的主键 引用是被引用对象的位置。
    • 通过监视控制事件来实施约束。
    • 更新/更改密钥含义的不同方法由 枚举所有键并在 引用对象而不是位置。更改的两个用例 其含义由:
      1. 将新路径与现有引用ID关联
      2. 将新引用ID与现有路径关联

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java在TextView中对齐部分文本   带有iText和eTPKCS11的java PKCS#11签名。dll&SunPKCS11提供程序   java Intellij Idea找不到jar   java Chrome/Firefox和Jetty HTTPS   java我无法打包找不到的JavaFX应用程序模块   多线程Java:排序从异步任务检索的结果   java客户端/服务器socket不能与外部连接一起工作   java如何在单击“下一步”按钮时获取其他详细信息?   java组织。springframework。网状物客户RestTemplate应声明为@Bean,而plain@Autowired抛出错误   java如何绘制javax。摆动将ImageIcon转换为JavaFX。fxml呈现用户界面?   使用for循环的Java跟踪   java如何编码字符串以显示彩色文本(基于字符串中的前缀)   Java保存/打开文件对象   基于java复选框的搜索:使用尽可能多的“”动态生成准备好的语句作为选中复选框的计数   java为什么crawler4j随机挂起?