代码之家  ›  专栏  ›  技术社区  ›  Jonas

我应该如何在数据库和OOP中建模组关系?

  •  2
  • Jonas  · 技术社区  · 14 年前

    Item 我希望在小组里 ItemGroup 项目 如果移动到另一个项目组,出于责任原因,我希望跟踪更改。我需要知道 项目 是在一个 项目组 十月和九月。

    要么我要三张桌子, 项目 GroupRelation 并在地图上留下时间戳 群关系

    Item
    +----+---------+-----+------+
    | id | item_nr | ean | name |
    +----+---------+-----+------+
    
    ItemGroup
    +----+------------+-----+
    | id | group_name | vat |
    +----+------------+-----+
    
    GroupRelation
    +----+---------+----------+-----------+
    | id | item_id | group_id | timestamp |
    +----+---------+----------+-----------+
    

    另一种解决方案是只有两个类 项目 项目组

    Item
    +----+---------+-----+------+----------+-----------+
    | id | item_nr | ean | name | group_id | timestamp |
    +----+---------+-----+------+----------+-----------+
    
    ItemGroup
    +----+------------+-----+-----------+
    | id | group_name | vat | timestamp |
    +----+------------+-----+-----------+
    

    prev_id

    有没有人有类似数据模型的经验,有什么建议?对于这类问题有什么最佳做法吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Oded    14 年前

    我愿意和你一起去 Item , ItemGroup GroupRelation 作为一个良好的规范化设计,重复最少。

    您的审核需求可以用一个额外的表来建模,该表用于您需要审核的每个表(例如: ItemAudit , ItemGroupAudit )其中包含需要审核的字段和时间戳。每次可审核字段更改时,都会填充审核表。

        2
  •  0
  •   Community CDub    8 年前

    根据你的描述,我认为有一个概念 GroupRelationHistory 隐式存在于模型中。我会把它变成一个自己的实体 Item ItemGroup GroupRelation .

    项目 意识到它的重要性 ,意思是 项目 对象具有对的引用 组关系历史记录 对象。基本上 组关系历史记录 群关系

    引入这一概念应该得到实际业务需求的支持。去找你的客户(或某个代表),问问历史是不是一个实体本身的权利,有一些商业价值。如果是,请考虑此方法,并根据业务需要对其进行优化。然后考虑数据库模型,它高度依赖于具体的细化。如果没有,那么我会把历史概念变成一个纯粹的审计特性,比如 Oded 建议。