【问题标题】:Probably database relationship cycle大概是数据库关系循环
【发布时间】:2013-07-18 04:55:09
【问题描述】:

我的问题与循环关系有关,我需要解决数据库模式以进行最佳实践,它将用于跟踪车辆系统

我的问题描述:

  1. 一条路线可以包含一个或多个栅栏,一个栅栏可以包含一个或多个路线
  2. 路线分配了一些车辆(考虑车辆可能是部分或其他路线)
  3. 当包含围栏的路线分配了车辆时,我需要控制车辆何时通过围栏;那么我需要存储是否会在每辆车上设置围栏以比较车辆何时进入围栏

我已经通过这些方式解决了这个问题,但我不确定这是一个好的做法,如果不是,哪个是解决这个问题的最佳做法?

【问题讨论】:

    标签: database database-design relational-database database-schema


    【解决方案1】:

    1 - 一条路线可以包含一个或多个栅栏,一个栅栏可以包含一个或多个路线

        Route --< RouteFenceRelationship >-- Fence
    
        "RouteFenceRelationship"
        PK RouteFenceRelationshipId
        FK RouteId
        FK FenceId
    

    多对多关系不能很好地工作,我强烈建议使用关系表来定义哪些路由包含哪些栅栏。

    2 - 路线分配了一些车辆(考虑车辆可能是部分或其他路线)

        Vehicle --< VehicleRouteRelationship >-- Route
    
        "VehicleRouteRelationship"
        PK VehicleRoutRelationshipId
        FK VehicleId
        FK RouteId
    

    这里还是一样,关系表可以避免多对多关系带来的问题。

    3 - 当包含围栏的路线分配了车辆时,我需要控制车辆何时通过围栏;那么我需要存储是否会在每辆车上设置围栏以比较车辆何时进入围栏

        Fence --< FenceVehiclePassEvent >-- Vehicle
    
        "FenceVehiclePassEvent"
        PK FenceVehiclePassEventId
        FK FenceId
        FK VehicleId
        Timestamp
    

    我没有真正理解您的第三点,但是您可以在此表中添加一个条目,其中包含车辆、围栏和经过的时间。这就是你要找的东西吗?

    【讨论】:

    • 谢谢,首先,你对ManyToMany使用关系表是对的,但我想确定我的逻辑想法是好的,正如你解释的那样,但是,这个方案是一个好的做法?
    • 嗯,好的,我现在明白你的意思了。你让我的头在如何设计这个问题上挣扎,这样它就不是循环的。我不认为 this 实例应该给出任何问题,因为它们并不是所有的“有”关系;车辆与围栏的关系更像是一个事件。真正的答案是,我真的不知道这是否是最佳实践,但更常见的是,如果它合乎逻辑,那就没关系。也许其他人可以对这种情况有所了解
    • 如果 Route、Fence 和 Vehicle 在您的模型中是可共享的“实体”,那么您不能使用不同的设计。唯一的另一种方法是非规范化表,这对于表的可扩展性和一致性来说是个坏主意。
    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多