我是一名涉足数据库世界的开发人员,请多多包涵。
我正在为各种类型的合同创建一个包含单独表格的合同数据库。
我有 5 个表,但想在它们之间共享一个共同的“身份”字段,这样无论类型如何,任何给定合同都会有一个唯一的合同#。
推荐的方法是什么?不会使简单的 crud 交易过于复杂的东西?
我的应用程序将使用 Sql Server 2008 R2 服务器。应用程序本身是 Silverlight 4,使用 WCF Ria 服务进行 CRUD 事务。
模式想法会很棒,类似想法和技术的教程会更好。
谢谢你看罗伯特
在 SQL Server 支持序列(下一版本“Denali”)之前,您必须有一个公用表。
但是,如果我理解你的话,我认为你正在查看子类型/超类型模式。一个序列会很好,但是如果你设计使用,比如说,对象角色建模,那么你会生成这个模式/模式
基本上,您有一个通用的“合同”表:
笔记:
ContractID
赋予独特的价值ContractType
定义你的“各种类型”。让我们选择汤姆、迪克和哈利作为类型ContractID, ContractType
(这是“超级密钥”)InsertedDateTime
,CounterParty
等是公共属性然后你有每个合同类型的特定属性的子表
ContractID, ContractType, TomAttrib1, TomAttrib2, ..., TomAttribn
ContractID, ContractType, DickAttrib1, DickAttrib2
ContractID, ContractType, HarryAttrib1, HarryAttrib2, HarryAttrib3
笔记:
ContractID, ContractType
既是PK又是FK。ContractType
具有 CHECK 约束以限制为 Tom 或 Dick 或 Harry这样做需要有一个单独的表,您可以在其中插入新行并从中获取值,或者您编写自己的序列过程,直到您可以升级到开箱即用的支持此功能的 SQL Server“Denali”。
我更喜欢存储某个范围的最后一个唯一标识符的单独表:
事务回滚后,身份不会恢复其值。Oracle 中的相同情况(我所知道的序列)和 SQL Server“Denali”中的序列相同(我认为)。