我有一个小数据库挑战要问你。希望您能提供帮助。
问题:
我需要一个允许我“处理”主键/复合键更改的解决方案。经过 “处理”,我的意思是我应该仍然能够在很少或没有代码更改的情况下执行 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/