Jor*_*gas 13 database architecture sql-server database-design referential-integrity
我正在设计一些将共享2或3个数据库表的应用程序,所有其他表将独立于每个应用程序.共享数据库主要包含用户信息,可能会出现需要共享其他表的情况,但这是我的本能.
我倾向于所有应用程序解决方案的一个数据库,因为我希望具有参照完整性,并且我不必在每个数据库中保持最新的相同信息,但我可能会以100多个表的数据库,其中只有十个表的组将具有相关信息.
每种应用程序方法的数据库可以帮助我保持一切更有条理,但我不知道如何使所有数据库中的相关表保持最新.
所以,基本问题是:你推荐哪两种方法?
谢谢,
豪尔赫·巴尔加斯
编辑1:
当我谈到不能具有引用完整性时,这是因为当这些表位于不同的数据库中时,没有办法在表中使用外键,并且每个应用程序中至少有一个表需要一个外键来共享其中一个表表.
编辑2:
相关问题的链接:
只有第二个人有一个接受的答案.还没有决定做什么.
回答:
我决定使用每个应用程序的数据库,对共享数据库进行跨数据库引用,为每个数据库添加视图,模仿共享数据库中的表,并使用NHibernate作为我的ORM.作为会员系统,我将使用asp.net.
我还将使用触发器和逻辑删除尝试并保持在没有父母的情况下在livin'la vida loca周围飞行的ID的数量最少.保持数据库同步所需的开发工作太多而且收益太少(正如你们所指出的那样).所以,我宁愿通过孤立的记录来战斗.
由于使用ORM和视图是由svinto首先提出的,他得到了正确的答案.
感谢所有人帮助我做出这个艰难的决定.
两种方式看起来都不理想
我认为您应该考虑不在数据库层中为跨应用程序关系进行引用,并在应用程序层中进行引用.这将允许您将每个应用程序拆分为一个数据库.
我正在开发一个拥有100多张桌子的应用程序.我将它们放在一个数据库中,并用前缀分隔 - 每个表都有它所属模块的前缀.然后我在数据库函数之上构建了一个层来使用这个自定义组.我也在构建数据管理员,它利用了这个表组,使编辑数据变得非常容易.
这取决于您使用的数据库和框架,您的选项会有所不同。我建议使用某种 ORM,这样你就不需要那么麻烦。无论如何,您可能可以将每个应用程序放入数据库中自己的架构中,然后通过 schemaname.tablename 引用共享表,或者在每个应用程序架构中创建视图SELECT * FROM schemaname.tablename,然后针对该视图进行编码。