EDIT1:试图通过重命名表格及其关系来清除问题.编辑2:请不要查看我在三个数据库表中保存的数据类型.它们是在飞行中组成的.它们不是我真实世界的场景(不,我不能谈论我的真实世界数据......实际上它是1个父母和6个孩子,目前).请忽略哪种类型的数据,只看一些数据是必需的.EDIT3:两个FK是0或1比1的关系.不是0到很多.不是1比1.我试图避免0或1比1关系到1比1的关系,所以我不需要有OUTER JOINS但是有一个INNER JOIN.
问题:我需要知道建议的数据库设计是好还是坏/跛足等.
问题:今天我尝试制作索引视图,但失败了因为我的表有外连接.叹.所以我想知道我是否可以将其重新设置为以下设计:
三张桌子.
table_User在table_Address上有一个FK
table_User在table_Vehicle上有一个FK
等等..
和表B和C(现在像查找表一样)有...
Id INT IDENTITY PK
描述NVARCHAR(100)NULLABLE
注意到可空的?这样,table_Address中的某些内容在table_Address中不存在...该字段为null(因为内部连接).
之前,我做了一个LEFT OUTER JOIN,所以如果table_b中没有数据,我将得到空值是每个字段的结果.
我会在这里抛出一些数据示例......
Table_User
ID:1,名称:Fred,AddressID:1(NULL)
ID:2,姓名:Joe,地址ID:2(史密斯街1号.....)
ID:3,姓名:Jane,地址ID:2(史密斯街1号.....)
Table_Address
ID:1,描述= NULL
ID:2,描述= 1史密斯街
等等
那么我最终可以把这一切都放到一个索引视图中.(我的现实生活场景有大约8个表).
注意:DB是Microsoft Sql Server 2008,但这可能适用于任何数据库.
Q1:那个设计看起来好吗?
Q2:所以我在这里做的是我正在对数据进行规范化,对吗?通过保持内部连接在一起.
Q3:最后,如果这是一个好的方式..我还可以确保表中的数据是唯一的(例如街道地址)有一些独特的约束或键或索引或什么(我不确定适当的术语).
谢谢大师!
我发现你的问题令人困惑,但也许我可以帮助一点.
首先,表没有连接,查询有.您不创建具有到另一个表的连接的表.只有两个表可能相关,您可以使用连接查询这些表.
我建议你阅读有关db规范化的内容.维基百科有一篇很棒的文章:http://en.wikipedia.org/wiki/Database_normalization
关于你目前的情况,我不确定你想做什么.如果该地址在不同的行中重复,那么拥有地址的ID似乎没问题.但是,需要几个"地址表"似乎很奇怪.设计时要记住的最重要的事情是: - 在每个表中都有一个正确的主键,这样你就可以正确地连接表. - 除非你有充分的理由,否则不要重复数据.但我再次推荐上一篇文章.
希望有所帮助!:)