【发布时间】:2010-05-13 19:14:37
【问题描述】:
考虑一个由 100 多个表组成的数据库(MSSQL 2005),这些表在一定程度上定义了主键。表之间存在“关系”,但是这些不是通过外键约束强制执行的。
考虑以下我正在处理的典型表格类型的简化示例。 User 与 City 和 Province 表之间有明确的关系。但是,它们的关键问题是表中的数据类型和命名约定不一致。
User:
UserRowId [int] PK
Name [varchar(50)]
CityId [smallint]
ProvinceRowId [bigint]
City:
CityRowId [bigint] PK
CityDescription [varchar(100)]
Province:
ProvinceId [int] PK
ProvinceDesc [varchar(50)]
我正在考虑重写使用此数据源的应用程序(在 ASP.net MVC 中),因为它在设计中与 MVC 店面的设计相似。。但是,我正在经历概念验证阶段,这是我遇到的绊脚石之一。
就可以轻松使用的 ORM 选择而言,我有哪些选择,为什么?
我什至应该考虑 ORM 吗? (我问这个的原因是大多数解释和教程都适用于设计相对干净的现有数据库,或者与我相比是新创建的数据库。因此,我很难找到解决这个问题的方法)
存在大量现有 SQL 查询,数据映射器(例如 IBatis.net)是否更合适,因为我们可以轻松修改它们以使其工作并重用已经进行的投资?
我在 SO 上找到了this question,这表明可以使用 ORM - 但是我觉得这是一个映射问题?
注意:目前,对象模型没有明确定义,因为它不存在。现有系统几乎用 SQL 完成了几乎所有的事情,或者由过于复杂和大量的查询组成以完成功能。我几乎是一个菜鸟,并且在 ORM 和 MVC 方面的经验为零 - 所以这是一个很棒的学习曲线。
【问题讨论】:
-
回顾性 ORM 应用程序......这是一场噩梦。祝你好运:P
-
@Aiden - 你有什么经验可以分享吗?
-
让你的 FK 直截了当,这将使你的数据库更好,你的问题没有实际意义。
-
@Otávio,我希望就这么简单。另一个主要问题是,在这个 Dbs 生命过程中,人们决定删除东西而不是干净。因此,大多数表中都有悬空元组,没有对应关系。这可以被识别和清理,但它将是一个 PITA。
-
附带说明 - 我们刚刚遇到了一个生产问题,由于缺少 pk 和 fk 约束,因此可以擦除一天的数据(是的,这是人为错误,而且是一个非常大的错误) .我们以为我们已经确定了我们的部署流程,但我们错了!
标签: nhibernate database-design orm datamapper