sql - 数据库设计 : Transactional design approach

标签 sql database database-design

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

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

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

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

希望我说得有道理。想法?

最佳答案

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

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

关于sql - 数据库设计 : Transactional design approach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139806/

相关文章:

mysql - MySQL 中 DATE_ADD/INTERVAL 的逆向

.net - 我可以根据手动编辑的 .dbml 重新生成 .designer.cs 吗?

sql - 在数据库中存储文件路径

Mysql 数据库大小增长超过 4 TB? Azure 最多支持 4 个

sql - MySQL COUNT(DISTINCT()) 意外结果

database - 如何保护存储在数据库中的敏感密码

mysql - 将 SUBQUERY UNION SELECT 重写为 JOINS

database - 如何在 Postgresql 中找到包含主键或单个表的特定列的所有数据库表

mysql - WHERE 子句练习中的子查询

sql - 在任何其他 SQL 之前先执行子查询重构