数据库 – 在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字段强制记录始终属于一个子类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql cast,convert,QUOTENAME,exec 函数学习记录
- SSIS遍历记录发送邮件
- sql-server-2012 – 什么时候使用SQL Server Developer Edi
- sqlserver连接服务器读取Oracle数据,sqlserver读取oracle的
- sqlserver2005发布与订阅配置步骤
- SqlServer 总体分析死锁进程
- SQLServer2008基本数据库操作
- Timeout expired. The timeout period elapsed prior to co
- 如何从SQL Server中的EAV表创建JSON
- SQLServer 2008数据库查看死锁、堵塞的SQL语句