database - 召集所有数据库/ORM/数据访问层专家

标签 database tsql database-design orm data-access-layer

我有一个小数据库挑战要问你。希望您能提供帮助。

问题:

我需要一个允许我“处理”主键/复合键更改的解决方案。经过 “处理”,我的意思是我应该仍然能够在很少或没有代码更改的情况下执行 CRUD 操作。从应用程序/数据库的角度来看,它需要有最少的麻烦。

我被允许在阳光下使用几乎任何东西,除了以下 2 个限制: 1)需要使用SQL Server 2)不允许使用动态SQL查询

我最初的头脑 Storm /可能的解决方案?

a) 它能以某种方式在存储过程级别解决吗?

b) 可以通过适配器模式/反射/数据库模式询问巧妙地使用 DTO 来解决这个问题吗?

c) 某种奇特的 LINQ/反射技巧?

d) NHibernate 能以某种方式解决这个问题吗?

我有一点时间压力(我必须在本周末之前想出解决方案),因此我们将不胜感激。所以,就在这里。如果你认为你可能有一个解决方案但不想使用任何脑细胞,这里有一个激励(希望它会起作用)......如果你的解决方案为我解决了问题并且我最终使用它,你将获得完全许可您选择的任何 Microsoft 软件的商业(非盗版:P)版本,例如。 Windows 7、SQL Server、Office 2007 等。如果奖励不起作用,我希望你能帮助我吗? :-) 这里有点绝望:-)

非常感谢。

最佳答案

假设您有一 strip 有生成的主键的记录 - 这只是该记录的一个不可变标识符。最终用户永远不需要看到它,但它允许您可靠地识别记录并因此指定对其的更改。

其他列或列组合是用户认为的主键,但实际上并不是“主键”,它们只是(可能是唯一的)可更改的数据片段。

所以 GivenName/FamilyName - 可能是索引的好字段,但显然是可变的。

社会安全号码(或某些类似的唯一号码)- 听起来像是一个很棒的主键。嗯,但假设以某种方式错误的进入系统,你如何修复它。如果它只是一个具有唯一索引的列,问题出在哪里?

真正的主键是我们用来连接其他表的东西。

用户——用户的订单

由系统生成的主键链接,而不是他可变的类似 SSN 的东西。

关于database - 召集所有数据库/ORM/数据访问层专家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1392915/

相关文章:

sql - 为什么这个事务不回滚?

mysql - 哪个查询更好更高效 - mysql

php - 数据库设计一对一关系

mysql - 在 mySql 中也有 group_concat 的计算字段上排序

php - MariaDB/MySQL : combine rows if fields are NULL

php - 使用 MySQL 数据填充 div,将行与编号 ID 匹配

sql-server - 在触发器中使用来自其他表的值

sql-server - 在触发器中使用插入和删除的表

database-design - 如何将信用卡数据保存在数据库中?

php - 如何在 linux 机器上使用独立数据库?