asp.net – 实现数据库对象的版本控制
我很快就会开始研究一个项目(从规范中)让我想起StackOverflow.基本上,它是一个具有用户控制内容的Web应用程序.
让我在脑海里转转的一个功能是版本控制.在StackOverflow上,每个问题和答案都可以有多个修订版.当你只有一种类型的对象(在这种情况下,它的文本)时,这很容易实现. 所以,对于我的简单页面,我已经设置好了. 当我认为某些需要在版本控制下的对象具有关系时,问题就出现了.为了提供一个具体的例子,让我选择一个随机的analagous域: 让我们说我正在实施一个类似Wiki的网站来跟踪书籍/作者信息. 对于用户来说,描述作者的基于文本的“摘要”与该作者和作者之间的链接之间几乎没有区别.他们的作品.因此,我们需要为作者页面,书页以及作者和书籍之间的关联实现“修订”/编辑功能.换句话说,用户应该能够编辑,查看历史记录和回滚作者页面,书页以及两者之间的关联. 当这种关系变成多对多时,这变得更加复杂,多个作者可能被列为对书籍的贡献. 我有很多解决方案,但没有一个像我想的那样干净(并且至少涉及一些重复的代码/冗余数据存储),虽然我确实看到了这里的共性,但我觉得我真的无法提取它,特别是在数据库级别.我不想偏袒给出的答案,所以我不打算立刻给他们. 那么,您将如何在数据库级别设计此系统?我在这里寻找表格规格,并且可能描述了如何使用它们,如果不是立即显而易见的话.对于那些可能相关的答案,我将使用ASP.NET和Linq-to-SQL(我很熟悉LTS中的多对多)或实体框架. 编辑:为了澄清,我理解基本的数据库设计,规范化,多对多映射表等.我正在寻找一个干净的解决方案,以满足这种特定情况. 编辑2:我正在寻找一个可推广的解决方案,因为系统中可能有更多的子对象而不仅仅是书籍.作者可能与其他作者,杂志,事件等等有关.如果我为每个作者单独实施历史记录,我觉得我正在重复很多工作. 解决方法
这是数据仓库中常见的问题.他们使用“缓慢变化的维度”.
但是,如果您要尝试使用“版本化”数据,则必须有一些规则. >您必须记录最初定义的作者 – 书籍关系.这是官方的作者 – 书籍关系.数据仓库人员称之为“无事实的事实表”.这是一对钥匙. 请注意,关系(作者预订)是一个事实,不需要版本.这是事实.它没有“改变”.这是真的,或者它被错误地放在数据库中 – 在这种情况下,必须将其删除.事实不需要版本号. 在更复杂的星型模式中,您的事实有措施.价格,销售量,成本,利润等.这些也记录在事实表中.这些信息可能会随时间而变化.因此,您几乎每个事实都有一个时间维度. 因此,时间是书籍作者事实的一个维度.如果这个事实可以改变,则适用的时间段被记录为事实的一部分. 时间维度与版本号不完全相同.它稍微简单一些.它指出,在某一特定时间点,事实确实如此.如果事实发生变化,您会添加一个具有不同时间戳的新事实. 在特定时间点,您可以找到相关事实和相关维度值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – ASP.NET MVC 3:如何在控制器方法中获取用
- ASP.NET网站中使用Ninject 3进行依赖注入
- asp.net-mvc – 为什么ASP.NET MVC在从IE而不是firefox发布
- asp.net – 当数据绑定控件被绑定两次时,如何避免重复项?
- asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布
- asp.net core webapi 服务端配置跨域的实例
- asp.net-mvc-3 – 如何挂钩错误的jQuery验证不引人注目的MV
- asp.net-mvc-3 – 剃刀视图引擎,如何在html之间写入?
- SQL Server 中 `JSON_MODIFY` 的使用
- asp.net-mvc – 如何为未经过身份验证的用户隐藏我的菜单?