加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – 在SQL中处理一对一关系的最佳方法是什么?

发布时间:2020-12-12 06:24:44 所属栏目:MsSql教程 来源:网络整理
导读:假设我有一些可能是也可能不是或与Bravo或Charlie相关的事情. 这些是一对一的关系:没有阿尔法将涉及到一个以上的布拉沃.没有Bravo将与多个Alpha相关联. 我有几个目标: 一个易于学习的系统 保持. 我的数据完整性 数据库. 匹配的模式 现实世界,逻辑组织 我的
假设我有一些可能是也可能不是或与Bravo或Charlie相关的事情.

这些是一对一的关系:没有阿尔法将涉及到一个以上的布拉沃.没有Bravo将与多个Alpha相关联.

我有几个目标:

>一个易于学习的系统
保持.
>我的数据完整性
数据库.
>匹配的模式
现实世界,逻辑组织
我的资料
>我/我的类/对象
编程映射好
数据库表(àla Linq to SQL)
>快速的读写操作
>有效利用空间(几个空字段)

我有三个想法…

PK = primary key  
FK = foreign key  
NU = nullable

一个表与许多nullalbe字段(平面文件)…

Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree
   NU BravoOne
   NU BravoTwo
   NU BravoThree
   NU CharlieOne
   NU CharlieTwo
   NU CharlieThree

许多具有零nullalbe字段的表…

Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree

      Bravos
      --------
FK PK AlphaId
      BravoOne
      BravoTwo
      BravoThree

      Charlies
      --------
FK PK AlphaId
      CharlieOne
      CharlieTwo
      CharlieThree

两者的最佳(或最差):许多表的空值很多

Alphas
      --------
   PK AlphaId
      AlphaOne
      AlphaTwo
      AlphaThree
NU FK BravoId
NU FK CharlieId

      Bravos
      --------
   PK BravoId
      BravoOne
      BravoTwo
      BravoThree

      Charlies
      --------
   PK CharlieId
      CharlieOne
      CharlieTwo
      CharlieThree

如果Alpha必须是Bravo或Charlie,而不是两者?

如果不是只是Bravos和Charlies,Alphas也可以是Deltas,Echos,Foxtrots或Golfs等中的任何一个?

编辑:这是问题的一部分:Which is the best database schema for my navigation?

解决方法

如果您希望每个Alpha只与一个Bravo相关,我将投票使用FK / PK组合的可能性:
Bravos
      --------
FK PK AlphaId
      BravoOne
      BravoTwo
      BravoThree

这样一个只有一个Bravo可能会指向你的Alphas.

如果Bravos和Charlies必须相互排斥,最简单的方法可能会创建一个鉴别器字段:

Alpha
      --------
   PK AlphaId
   PK AlphaType NOT NULL IN ("Bravo","Charlie")
      AlphaOne
      AlphaTwo
      AlphaThree

      Bravos
      --------
FK PK AlphaId
FK PK AlphaType == "Bravo"
      BravoOne
      BravoTwo
      BravoThree

      Charlies
      --------
FK PK AlphaId
FK PK AlphaType == "Charlie"
      CharlieOne
      CharlieTwo
      CharlieThree

这样,AlphaType字段强制记录始终属于一个子类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读