数据库 – 在SQL中处理一对一关系的最佳方法是什么?
|
假设我有一些可能是也可能不是或与Bravo或Charlie相关的事情. 这些是一对一的关系:没有阿尔法将涉及到一个以上的布拉沃.没有Bravo将与多个Alpha相关联. 我有几个目标: >一个易于学习的系统 我有三个想法… 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字段强制记录始终属于一个子类型. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
