【发布时间】:2010-09-24 02:47:24
【问题描述】:
EDIT1:试图通过重命名表及其关系来解决问题。 EDIT2:请不要查看我在三个数据库表中保存的数据类型。他们是在飞行中组成的。它们不是我的真实世界场景(不,我不能谈论我的真实世界数据......事实上,目前它是 1 个父母和 6 个孩子)。请忽略什么类型的数据,只看需要一些数据的事实。 EDIT3:这两个 FK 是 0 或 1 对 1 的关系。不是 0 到很多。不是 1 对 1。我试图避免 0 或 1 对 1 关系与 1 对 1 关系,所以我不需要 OUTER JOIN 而是有 INNER JOIN。
问题:我需要知道建议的数据库设计是好/坏/蹩脚/等等。
问题:今天我尝试制作一个索引视图,但失败了,因为我的表有外部连接。叹。所以我想知道我是否可以把它改成如下设计:
- 三个表。
- table_User 在 table_Address 上有一个 FK
- table_User 在 table_Vehicle 上有一个 FK
- 等等..
表 B 和 C(现在有点像查找表)有..
- Id INT IDENTITY PK
- 描述 NVARCHAR(100) NULLABLE
注意到可以为空的了吗?这样,table_User 中的某些内容在 table_Address 中不存在......该字段为空(因为内部连接)。
之前,我做了一个 LEFT OUTER JOIN,所以如果 table_b 中没有数据,我会得到每个字段的结果为空。
我会在这里抛出一些数据示例......
表用户
- ID:1,姓名:Fred,AddressID:1(NULL)
- ID:2,姓名:Joe,AddressID:2(1 smith street.....)
- ID:3,姓名:Jane,AddressID:2(1 smith street.....)
表格地址
- ID:1,描述 = NULL
- ID:2,描述 = 1 smith street
等等
那么我终于可以将这一切放入索引视图中。 (我的现实生活场景大约有 8 张桌子)。
注意:DB 是 Microsoft Sql Server 2008,但这可能适用于任何 DB。
Q1:这个设计看起来还可以吗?
Q2:所以我在这里做的是对数据进行规范化,对吗?通过保持内部连接在一起。
Q3:最后,如果这是一个好的方法.. 我是否也可以通过一些唯一的约束或键或索引或什么来确保表中的数据是唯一的(例如街道地址)(我'我不确定正确的术语)。
感谢大师!
【问题讨论】:
-
应该可以创建一个包含任何类型连接的索引视图。您使用哪个数据库?您可以使用 DDL 以及视图的创建语句和错误消息来扩展您的问题吗?
-
DDL?我的数据库是 MS Sql 2008,它不允许外部连接。最后,我没有提出任何查询或表格......我只是在绘制设计图片并思考架构。
-
正如其他人所说,恐怕问题不是很清楚。用户和地址之间存在什么样的关系 - N:P?为什么您的示例中有一个“虚拟”地址行?也许您可以发布一个示例,说明您希望从视图/查询中得到什么,涵盖所有这些情况。
-
人们通常拥有不止一个地址和不止一辆车。我认为您需要用于用户地址和用户车辆的联结表。
标签: database-design normalization