我刚刚阅读了@ PerformanceDBA的论点:6NF和EAV.我很好奇.我以前一直对6NF持怀疑态度,因为它只是"仅仅"在表格上粘贴了一些时间戳列.
我一直使用数据字典,不需要被说服使用它,或生成SQL代码.所以我希望答案需要一个用于生成代码的字典(或目录).
所以我想知道6NF如何处理一个非常简单的例子.项目,描述和价格表.价格随时间而变化.
那么无论如何,在转换为6NF时,Items表是什么样的?什么是"桌子爆炸?" 发生在这里?
如果该示例不适用于表格这么简单,请随意添加必要的内容以获得重点.
我想知道你是否有一个网站上有十几种不同类型的列表(商店,餐馆,俱乐部,酒店,活动)需要不同的字段,是否有一个好处,创建一个表定义如下所示的列
示例:
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) 使用符合6NF原则标准化的数据库时,如何存储历史属性数据?
比方说,我们从@PerformanceDBA 获取此示例,但具有以下额外要求:
我们需要存储所有产品的历史数据,我们应该只需输入日期并获取该特定时间产品属性的快照.
更实际的示例:
假设上面示例中的磁盘和CPU是虚拟的,用户可以随意更改磁盘容量.我们如何改变数据库,以便我们可以在过去的任何时间(当然是在创建日期之后)检索给定磁盘的属性,同时保持5NF视图足够快.
我正在考虑的事情
任何帮助表示赞赏!
编辑:我知道时态数据库的概念,但问题是,对于我正在使用的数据库引擎(postgresql),时间扩展尚未完全实现.关于如何在没有时态数据库的情况下实现这一目
database database-design relational-database database-normalization