【问题标题】:How to add elements dynamically if they are stored in database [duplicate]如果元素存储在数据库中,如何动态添加元素[重复]
【发布时间】:2012-12-13 06:09:51
【问题描述】:

可能重复:
What are design patterns to support custom fields in an application?

我使用 SQLite 来存储我的数据。我在表中有几列,例如idtitledescriptionnotes。现在我需要扩展我的数据模型并在数据库中保留other 1other 2、...、other N 字段。我希望用户动态添加它们。

我只是不知道如何处理这种情况,因为表中的列数是固定的。这种情况的处理方法是什么?

【问题讨论】:

    标签: java sqlite


    【解决方案1】:

    一种可能的方法是使用属性-值-对模式,您可以在其中拥有具有以下架构的单独表:

    • id(来自您的原始表格)
    • attributeName(可以是您的其他 1、其他 2 等)。
    • 属性值

    您可以通过为您的属性创建单独的表来进一步规范这种方法,例如使用以下架构:

    • 身份证
    • 姓名
    • 数据类型

    那么你原来的表就会变成

    • 身份证
    • attributeId
    • 属性值

    【讨论】:

    • EAV 仅适用于您有大量可能值但实际值很少的情况(例如医生办公室的患者症状),并且这种方法存在明显的缺点。请参阅en.wikipedia.org/wiki/… 了解更多信息。
    • 我同意@Sebastian 的方法,但在最后一个更规范化的情况下,原始实体消失了你没有更多的东西列表,现在你有一个属性列表,我知道有点更复杂但我更喜欢维护原始实体表,添加第二个表 Extended_Properties_List 和一个跨 Entity_id、Property_id 和 value 的关系表。
    【解决方案2】:

    SQLite 支持ALTER TABLE ADD COLUMN 语法。更多信息here

    SQLite 不支持所有DDL 功能。请参阅here 了解 SQL92 规范中不受支持的那些特性。

    【讨论】:

    • 这会导致某些没有附加字段的行出现空列。
    • 您不能按行指定列。如果您想要每行附加值,请查看EAV
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2015-10-16
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多