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

sql模式设计:可变时隙与关联表

  •  0
  • fearless_fool  · 技术社区  · 7 年前

    我正在为尚未指定的sql数据库设计一个模式。请考虑以下几点:

    • 一个网络可能包含许多设备
    • 设备可以连接到零个或一个网络

    我看到了两种看似合理的设计,我想知道每种设计的利弊:

    三表法:

    network
      network_id
    
    device
      device_id
    
    connection
      network_id
      device_id
    

    三表方法的优点是很容易向连接添加状态信息(例如连接时间、端口号等)。缺点是,它表明一个设备可以连接到多个网络(habtm关系),即使一个设备一次只能连接到一个网络。

    两表法:

    network
      network_id
    
    device
      device_id
      network_id (may be null if not connected)
    

    双表方法的优点是它强制执行“连接到零或一”网络语义。缺点是设备本身变得易变,尽管(逻辑上讲)设备并不是通过加入网络而本质上改变的。

    尽管三表方法具有隐含的habtm特性,但我倾向于这样做,并使用更高级别的代码来强制执行“工具只能连接一个网络”规则。

    我的推理通过了吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jon Heggland    7 年前

    宣布 device_id 作为连接表的键。这将限制每个设备最多只能使用一个网络。