相关疑难解决方法(0)

想用一个例子来理解6NF

我刚刚阅读了@ PerformanceDBA的论点:6NF和EAV.我很好奇.我以前一直对6NF持怀疑态度,因为它只是"仅仅"在表格上粘贴了一些时间戳列.

我一直使用数据字典,不需要被说服使用它,或生成SQL代码.所以我希望答案需要一个用于生成代码的字典(或目录).

所以我想知道6NF如何处理一个非常简单的例子.项目,描述和价格表.价格随时间而变化.

那么无论如何,在转换为6NF时,Items表是什么样的?什么是"桌子爆炸?" 发生在这里?

如果该示例不适用于表格这么简单,请随意添加必要的内容以获得重点.

normalization

40
推荐指数
3
解决办法
2万
查看次数

具有多列的单个固定表与灵活的抽象表

我想知道你是否有一个网站上有十几种不同类型的列表(商店,餐馆,俱乐部,酒店,活动)需要不同的字段,是否有一个好处,创建一个表定义如下所示的列
示例:

shop_id | name | X | Y | city | district | area | metro | station | address | phone | email | website | opening_hours
Run Code Online (Sandbox Code Playgroud)

或者更类似于此的抽象方法:

object_id | name        
---------------
1         | Messy Joe's  
2         | Bate's Motel 

type_id | name
---------------
1       | hotel
2       | restaurant


object_id | type_id
---------------
1         | 2
2         | 1

field_id | name           | field_type
---------------
1        | address        | text
2        | opening_hours  | date 
3        | …
Run Code Online (Sandbox Code Playgroud)

mysql sql database database-design data-modeling

27
推荐指数
2
解决办法
1万
查看次数

6NF和历史属性数据

使用符合6NF原则标准化的数据库时,如何存储历史属性数据?

比方说,我们从@PerformanceDBA 获取此示例,但具有以下额外要求:

我们需要存储所有产品的历史数据,我们应该只需输入日期并获取该特定时间产品属性的快照.

更实际的示例:
假设上面示例中的磁盘和CPU是虚拟的,用户可以随意更改磁盘容量.我们如何改变数据库,以便我们可以在过去的任何时间(当然是在创建日期之后)检索给定磁盘的属性,同时保持5NF视图足够快.

我正在考虑的事情

  • 将时间戳列" changedate " 添加到每个属性表(这将导致带有子查询和每个属性表的连接的相当复杂的查询)
  • 为每个属性表创建一个单独的*历史表(可能会产生大量的表,因为我们有大约70个属性分布在20种产品类型中)
  • 另外:为每个属性表添加一个索引的" 当前 "列以加速5NF视图

任何帮助表示赞赏!


编辑:我知道时态数据库的概念,但问题是,对于我正在使用的数据库引擎(postgresql),时间扩展尚未完全实现.关于如何在没有时态数据库的情况下实现这一目

database database-design relational-database database-normalization

6
推荐指数
1
解决办法
1595
查看次数