3

我有一个基本但非常重要的事务数据库设计问题。我正在设计一个模拟四个真实世界实体的事务数据库。这些实体中的每一个都有一个 Owner 属性。当用户创建实体时,他们将指定该实体的所有者是谁。然后,此所有者可以在以后更改。虽然理论上每个所有者可能会根据现实世界的场景而有所不同,但我希望少数所有者拥有许多实体的同一个人。

在当前设计中,所有者存储在一个基本的所有者表中,并且 4 个实体中的每一个都连接到同一个所有者表中,所有者 ID 是实体表中的 FK。所有者表是基本的;它是 OwnerID 和 Name,其中 OwnerID 是 PK,而 OwnerID 是每个实体表中的 FK。

我有一种鬼鬼祟祟的感觉,这对于事务数据库来说是错误的方法,我正在采用的方法就像我正在设计一个报告数据库(星型模式),而所有者是这些实体的一个维度。在当前的设计中,看起来实体属于所有者,而不是相反。

另一种方法是,我要么将所有者存储在每个实体表上,要么为每个实体创建所有者特定的表,即表 EntityOne,然后连接到 EntityOneOwner,其中 EntityID 是 EntityOneOwner 表中的 FK。

希望我在这里有意义。想法?

4

1 回答 1

4

实际上,这是 OLTP 数据库的正确方法——听起来像是一个很好的规范化数据库。

报告数据库(例如 OLAP)将被非规范化,所有者名称在不同的表中重复,以便于查询。

于 2012-04-13T11:19:11.643 回答