请问反范式编程适合用ef nh等orm吗?

kamen 2016-06-11 01:56:17
加精
之前被数据库的范式坑过好多回,这次的新项目我想各个数据表之间不建关系,直接冗余字段,这样的设计适合用orm吗?
...全文
1232 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35376354 2016-06-21
  • 打赏
  • 举报
回复
div.img:hover {
    border: 1px solid #777;
}
bluedoctor 2016-06-16
  • 打赏
  • 举报
回复
楼主这也是一种可行的方式,但跟ORM没有关系的,也即是说,数据库表没有关系,但是实体类可以有关系,这个可能需要你的ORM能够支持。 可以试试SOD框架,它的ORM功能跟数据库的映射是最松散的。
小灰狼 2016-06-14
  • 打赏
  • 举报
回复
引用 27 楼 iFitch 的回复:
[quote=引用 18 楼 hemowolf 的回复:] [quote=引用 2 楼 sp1234 的回复:] 你干脆别建什么“各个数据表”,只建一个数据表呗。如果你建了多个数据表,那么当你的数据模型稍微复杂一点时,一堆的互相不一致的数据层出不穷、指数级快速出现,你如何解释垃圾? 这跟什么 orm 没有多大关系。连数据正确性都不能保证,谈不上技术。
没错没错 数据库范式增加了很多约束,约束是根据业务逻辑制订的,违反约束其本质就是违反业务逻辑 如果只为了开发方便,让程序快点编译通过、测试通过而忽略那些约束,还不如直接跳过软件测试,只要你的程序编译通过就直接交付。以后出了问题怎么办?管它呢,到时再说吧! 一个词评价,驼鸟![/quote] 业务逻辑不能用在程序里边控制?貌似用程序控制更灵活些?我这用惯了范式的人倒觉得反范式的写法更有技术性,需要关注的层面更多。当然应用层的代码量也会大量增加。 [/quote] 业务逻辑在程序里当然可以控制,但是那要经过很多测试,很有可能在测试时会遗漏 这也不是灵活性的问题,无论是在开发阶段还是在正式使用阶段,通过数据库约束给软件产品中的数据关系加上一层保险 我追求的不是项目的技术性,而是尽可能把问题简单化,减少工作量,减少出错的机率 数据库加上约束,虽然在开发阶段让人很烦,但它可以让开发人员及时发现开发中的逻辑错误(因为违反数据库约束其实就是违反业务逻辑);在运行阶段,如果因为测试时遗漏了某个环节而导致程序运行不下去,客户会抱怨软件暂时无法使用,但我认为这至少比客户勉强运行软件后得到一个逻辑错误的结果要好,并且后期为了修复数据库中的逻辑错误,你要作出大量的分析工作,那是相当相当头疼的。
a8332496 2016-06-14
  • 打赏
  • 举报
回复
看局势,而议。。。
kamen 2016-06-14
  • 打赏
  • 举报
回复
引用 18 楼 hemowolf 的回复:
[quote=引用 2 楼 sp1234 的回复:] 你干脆别建什么“各个数据表”,只建一个数据表呗。如果你建了多个数据表,那么当你的数据模型稍微复杂一点时,一堆的互相不一致的数据层出不穷、指数级快速出现,你如何解释垃圾? 这跟什么 orm 没有多大关系。连数据正确性都不能保证,谈不上技术。
没错没错 数据库范式增加了很多约束,约束是根据业务逻辑制订的,违反约束其本质就是违反业务逻辑 如果只为了开发方便,让程序快点编译通过、测试通过而忽略那些约束,还不如直接跳过软件测试,只要你的程序编译通过就直接交付。以后出了问题怎么办?管它呢,到时再说吧! 一个词评价,驼鸟![/quote] 业务逻辑不能用在程序里边控制?貌似用程序控制更灵活些?我这用惯了范式的人倒觉得反范式的写法更有技术性,需要关注的层面更多。当然应用层的代码量也会大量增加。
kamen 2016-06-14
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你干脆别建什么“各个数据表”,只建一个数据表呗。如果你建了多个数据表,那么当你的数据模型稍微复杂一点时,一堆的互相不一致的数据层出不穷、指数级快速出现,你如何解释垃圾? 这跟什么 orm 没有多大关系。连数据正确性都不能保证,谈不上技术。
按你这么说,nosql谈不上技术?nosql貌似提倡冗余的。
正怒月神 版主 2016-06-14
  • 打赏
  • 举报
回复
引用 17 楼 daixf_csdn 的回复:
[quote=引用 7 楼 hanjun0612 的回复:] 我个人觉得,既然你不想用 主外键关系,那么为何还要用ef和nh? 至少ef里,没有主外键,貌似Include就无法使用。
include不是ef的全部,而且这东西是笛卡尔积访问,冗余数据量大,占用带宽。如果是internet上那对响应速度的影响是比较大的。 我建议是少用include 我现在用ef,没有用外键,多表关联直接用linq,觉得很灵活很好。[/quote] include只是一个left join。 另外如果需要查询关联实体,不使用主外键,而通过Linq查询起来比较麻烦,感觉匿名对象不方便传递。
  • 打赏
  • 举报
回复
引用 17 楼 daixf_csdn 的回复:
[quote=引用 7 楼 hanjun0612 的回复:] 我个人觉得,既然你不想用 主外键关系,那么为何还要用ef和nh? 至少ef里,没有主外键,貌似Include就无法使用。
include不是ef的全部,而且这东西是笛卡尔积访问,冗余数据量大,占用带宽。如果是internet上那对响应速度的影响是比较大的。 我建议是少用include 我现在用ef,没有用外键,多表关联直接用linq,觉得很灵活很好。[/quote] 你想多了,只有full join才会全关联,大多数时候还是inner join或者out join
  • 打赏
  • 举报
回复
用外键约束,但可以不用它的级联增删改,完全用程序控制。既能利用外键在关联查询时的优势,又灵活 不管是db还是code first这个都不是事儿
  • 打赏
  • 举报
回复
范式没有定义主外键的事! 第一范式:每个字段意义唯一 第二范式:每行都有唯一性标志 第三范围:每个字段不能由自身所在表的其它字段推导出
小灰狼 2016-06-13
  • 打赏
  • 举报
回复
引用 4 楼 daixf_csdn 的回复:
我也不喜欢高范式,我的个人喜好是,不用外键关系,不用触发器。 尤其是外键关系,它给开发中的数据库维护带来不便,性能也是问题。 但对于冗余,我还是觉得应该尽量消除。
在开发阶段,建立足够的数据库约束(不仅仅是外键约束)能够把很多程序中的逻辑处理问题及时地在开发阶段暴露出来,最终减少交付的产品中存在的隐患 如果问题遗留在交付的软件产品中,将来进行维护会更麻烦。如果仅仅是单纯的把软件中的 bug 修复可能会很简单,但是要把之前不合理的数据逻辑纠正过来,这要花的时间、承担的风险会更麻烦。
小灰狼 2016-06-13
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你干脆别建什么“各个数据表”,只建一个数据表呗。如果你建了多个数据表,那么当你的数据模型稍微复杂一点时,一堆的互相不一致的数据层出不穷、指数级快速出现,你如何解释垃圾? 这跟什么 orm 没有多大关系。连数据正确性都不能保证,谈不上技术。
没错没错 数据库范式增加了很多约束,约束是根据业务逻辑制订的,违反约束其本质就是违反业务逻辑 如果只为了开发方便,让程序快点编译通过、测试通过而忽略那些约束,还不如直接跳过软件测试,只要你的程序编译通过就直接交付。以后出了问题怎么办?管它呢,到时再说吧! 一个词评价,驼鸟!
圣殿骑士18 2016-06-13
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
我个人觉得,既然你不想用 主外键关系,那么为何还要用ef和nh? 至少ef里,没有主外键,貌似Include就无法使用。
include不是ef的全部,而且这东西是笛卡尔积访问,冗余数据量大,占用带宽。如果是internet上那对响应速度的影响是比较大的。 我建议是少用include 我现在用ef,没有用外键,多表关联直接用linq,觉得很灵活很好。
  • 打赏
  • 举报
回复
不知道,我个人习惯是建立关系,符合三范式。 我们现在的项目,数据库不建立关系,使用真删除,结果导致数据删除之后影响到其他表的数据(程序没做处理),几乎每张表之间都有大量相同字段,修改字段的时候漏掉修改一个就不知道到底那个是正确的。(大部分原因是开发人员水平问题)
Poopaye 2016-06-12
  • 打赏
  • 举报
回复
决定这个不是通常看2点么? 1、你是不是处女座 2、你有多少钱
月影 2016-06-12
  • 打赏
  • 举报
回复
如果冗余太多,当你做更新的时候,你就崩溃了。
showjim 2016-06-12
  • 打赏
  • 举报
回复
范式是单纯的基于关系数据库来考虑问题的,它的出发点是让数据库解决所有问题。 ORM是基于对象模型来考虑问题的,它的出发点应该是让程序解决所有问题。 当然两者之间可能存在中间态,我觉得它们都是两头不讨好,比较痛苦。 对于基于缓存的ORM而言,数据是否冗余要看具体的缓存策略与查询需求。
  • 打赏
  • 举报
回复
范式就是必要时遵守,看情况打破 而且orm才不管你有没有遵守范式呢 现在的数据库被越来越多的人认为就该做数据库存储,其它业务逻辑啥的在数据库中应尽可能的少,存储过程可以的话尽可能的少,触发器直接就干掉,游标不许用
正怒月神 版主 2016-06-12
  • 打赏
  • 举报
回复
我个人觉得,既然你不想用 主外键关系,那么为何还要用ef和nh? 至少ef里,没有主外键,貌似Include就无法使用。
xuzuning 2016-06-12
  • 打赏
  • 举报
回复
ORM 最适合用于单表操作这种傻傻的事情 关联操作这种需要智慧的事情,ORM 做不好
加载更多回复(6)
适合人群: 1、具有一定Python语言基础,有一定的web前端基础,想要深入学习Python Web框架的朋友; 2、学习完“跟着王进老师学开发Python篇”“跟着王进老师学Web前端开发”的朋友; 3、有Django基础,但是想学习企业级项目实战的朋友; 4、喜欢 Django 框架并想深入研究的朋友; 5、有一定的数据库基础   课程目标:本系列课程是从零基础开始并深入讲解Django,最终学会使用Django框架开发企业级的项目。课程知识点全网最详细,项目实战贴近企业需求。本系列课程除了非常详细的讲解Django框架本身的知识点以外,还讲解了web开发中所需要用到的技术,学完本系列课程后,您将独立做出一个具有后台管理系统,并且前端非常优美实用的网站。   课程内容:在人工智能大行其道的时代,许多开发者对Python这门编程语言都比较熟悉。但是如何用它实现一个企业级别的项目,可能许多朋友还存在一些困惑。联科教育“跟着王进老师学Python”系列课程是专门针对想要从事Python Web开发的朋友而准备的,并且按照企业需求的标准定制的学习路线。学习路线中包含Python基础和进阶、Web前端、MySQL数据库、Flask和Django框架以及N多个企业真实项目。在学习完本系列中所有的课程后,从前端页面的实现,到后台代码的编写,再到数据库的管理,一人可以搞定一个公司网站的事情,掌握实现全栈开发,让你升职加薪不是梦! 本季课程介绍了Django中ORM模型,使用ORM模型的优势;Django中ORM模型常用的字段,ORM实现数据查询;Django后台管理等。所有应用均通过案例“在线图书商城”完成讲解和演示,完整项目,贯穿全部知识点,边学边练,帮助大家快速掌握知识,了解企业要求。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧