EDIT1:试图通过重命名表格及其关系来解决问题。EDIT2:请不要查看我在三个数据库表中保存的数据类型。他们是在飞行中组成的。它们不是我的真实世界场景(不,我不能谈论我的真实世界数据......事实上,目前它是 1 个父母和 6 个孩子)。请忽略什么类型的数据,只看需要一些数据的事实。EDIT3:这两个 FK 是 0 或 1 对 1 的关系。不是 0 到很多。不是 1 对 1。我试图避免 0 或 1 对 1 关系与 1 对 1 关系,所以我不需要外部连接,而是有一个内部连接。
问题:我需要知道建议的数据库设计是好/坏/蹩脚/等等。
问题:今天我尝试制作索引视图,但失败了,因为我的表有外连接。叹。所以我想知道我是否可以将其修复为如下设计:
- 三张桌子。
- table_User 在 table_Address 上有一个 FK
- table_User 在 table_Vehicle 上有一个 FK
- ETC..
和表 B 和 C(现在有点像查找表)有..
- Id INT IDENTITY PK
- 说明 NVARCHAR(100) NULLABLE
注意可以为空的?这样,table_User 中的某些内容在 table_Address 中不存在......该字段为空(因为内部连接)。
之前,我做了一个 LEFT OUTER JOIN,所以如果 table_b 中没有数据,我会得到空值是每个字段的结果。
我将在这里抛出一些数据示例......
表_用户
- ID:1,姓名:Fred,地址ID:1(NULL)
- ID: 2, Name: Joe, AddressID: 2 (1 smith street.....)
- ID: 3, Name: Jane, AddressID: 2 (1 smith street.....)
表地址
- ID:1,描述 = NULL
- ID:2,描述 = 1 smith street
等等
所以我终于可以把这一切都放到一个索引视图中。(我的现实生活场景大约有 8 张桌子)。
注意:DB 是 Microsoft Sql Server 2008,但这可能适用于任何 DB。
Q1:这个设计看起来还可以吗?
Q2:所以我在这里做的是对数据进行规范化,对吗?通过保持内部连接在一起。
Q3:最后,如果这是一个好的方法..我是否也可以通过一些唯一的约束或键或索引或什么来确保表中的数据是唯一的(例如街道地址)(我不确定的适当术语)。
谢谢大师!