在我公司中,我们处于强大的软件维护之下,我们正在重写一些旧的应用程序。现在,由于某种不相关的原因(部分是由于该维护),我们需要两个不同的应用程序来使用相同的firebird数据库:
一个会写,另一个会读。
如果相关,两个应用都将位于同一台计算机(服务器)上
有可能吗?我知道这是一个糟糕的体系结构,但是我们正在对其进行更改,有一段时间我非常需要此功能。现在我开始工作了,但是写入数据库(重复记录)存在一些问题
更新1。
感谢大家的回答。现在,经过一些测试,我得出了结论,那根本不是两个应用程序的问题。我整夜都在使用写作应用程序(阅读应用程序已关闭),但仍有一些重复的记录:
现在,在程序的先前版本(以及数据库的先前版本)中,该问题不存在。我自己通过在DateTime列中添加索引来更新数据库:
CREATE DESC INDEX IndexName ON TableName(DateTimeColumnName)
我添加了一个创建类似索引的过程。导致这些错误条目的索引可能是问题吗?还是不需要做任何事情,我必须在编写应用程序的某处寻找错误?
答案 0 :(得分:2)
假设您正在使用Firebird服务器(而不是Firebird Embedded 1 ),则与多个应用程序共享数据库没有问题。但是,您的数据库需要正确设计,并且您的应用程序必须正确管理其事务等。
为多个应用程序使用单个数据库本身并不是一个糟糕的体系结构 2 ,但是您必须有意识地设计数据库和应用程序以实现共享使用。
您的评论是“写入数据库存在某些问题(重复的记录)” ,听起来像是数据库的设计(例如约束)和/或您的应用程序使用数据库(例如事务隔离级别,生成标识符的方法等)不足。
例如,如果您的应用程序使用诸如select max(id) + 1 from sometable
之类的标识符来生成标识符,那肯定是错误的方式(如果单个应用程序可以同时生成记录,则对单个应用程序的访问甚至是错误的)。您应该使用序列(最好是触发器)来生成ID。