【问题标题】:How can I set up a database schema where there are two concurrent many-many relationships?如何设置有两个并发多对多关系的数据库模式?
【发布时间】:2012-03-26 09:09:54
【问题描述】:

我需要一个表格来保存停机时间,基本上停机时间事件包含以下信息:
EVENT_ID、START_TIME、END_TIME、服务、原因

主要问题是我不知道如何设置它,因为我不想最终陷入这样的混乱:

ID  |  EVENT_ID  |  START_TIME  |  END_TIME  | SERVICES  |  CAUSES
01          455       12:00          12:30      FINANCE     NETWORK
02          455       12:00          12:30      ADVANCE     NETWORK
...
13          455       12:00          12:30      REFRESH     DATABASE

基本上...对于一次中断,我会在表中包含许多条目,因为如果有多个服务/原因,该表实际上会保存所有组合。

有没有更有效的组织方式?

【问题讨论】:

    标签: sql database oracle schema denormalization


    【解决方案1】:

    是的 - 稍微标准化:

    EVENT
    ------
    event_id
    start_tm
    end_tm
    description
    
    EVENT_SERVICE
    -------------
    event_id
    service_id
    employee_id 
    start_tm
    end_tm
    (other info as needed)
    
    SERVICE
    ---------
    service_id
    description
    
    CAUSE
    -------
    cause_id
    description
    
    EVENT_CAUSE
    -----------
    event_id
    cause_id
    

    编辑以使用单独的 SERVICE 表反映 ypercubes 评论

    【讨论】:

    • 是不是缺少SERVICE 表?
    • 嗯,但它们是如何联系在一起的?例如,主 EVENT 表如何链接到服务和原因列表? EVENT_CAUSE 表也会非常重复,因为它会列出单个事件 ID 的多个原因?
    • @ypercube - 是的,如果服务是可重复的......那么模式将与事件相同(如您所知)
    • @antonpug 主事件获得一个唯一的 event_id 作为主键,然后在 EVENT_SERVICE 中,您将该 event_id 称为外键 - 允许在每个事件上执行许多服务。类似原因。
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多