标签: firebird

如何使用关系数据库作为基于文档的数据库?

为了制作一个文档管理系统,我正在查看像MongoDB这样的文档存储,但是由于我对常规数据库(Firebird,Sql Server,Mysql)有更多的经验,我想知道是否有可能将文档存储在关系数据库之上.

关于文档存储的优点,架构较少:

  • 适合存储有关文件的任意元数据的任务
  • 无需升级架构
  • 根据mongodb,BLOB的优秀表现就像视频一样
  • 更易于扩展

但是有一个关系:

  • 参考完整性
  • 更好的工具
  • 更安静的崩溃和腐败
  • SQL

那么,在这种情况下如何处理关系数据库呢?

mysql architecture firebird database-design nosql

1
推荐指数
1
解决办法
1073
查看次数

FireBird还活着吗?

我正在寻找一些嵌入式数据库.SQLite在GUI方面存在一些问题.那么FireBird呢?它的邮件列表和论坛有多活跃?它是否遵循ANSI SQL的所有规则?它适合生产吗?

firebird

1
推荐指数
2
解决办法
1776
查看次数

为什么我的查询返回错误的字符串类型?

根据Firebird官方文档,包含Unicode字符串(SQL Server称为NVARCHAR)的列应声明为VARCHAR(x) CHARACTER SET UNICODE_FSS.所以我这样做了,但是当我用DBExpress查询表时,我得到的结果是一个TStringField,它只是AnsiString,而不是我期待的TWideStringField.

如何让DBX从Unicode字符串列中获取Unicode字符串结果?

delphi firebird dbexpress delphi-2010

1
推荐指数
1
解决办法
1718
查看次数

SQL - 每列的条件

这是一个常见的SQL问题,但是如果你必须知道数据库是Firebird的话.

我有这个表(简化):

user  amount  type
--------------------
john  25      credit
john  20      debit
john  5       debit
john  15      credit
mike  15      credit

我希望使用单个查询得到一个看起来像这样的结果:

user  credit  debit
--------------------
john  40      25
mike  15      NULL
Where credit = SUM(amount) WHERE type=credit
   and debit = SUM(amount) WHERE type=debit
Run Code Online (Sandbox Code Playgroud)

基本上我希望基于字段的SUM(在这种情况下是数量)在结果上有多个字段,但是在不同的条件下(在这种情况下是类型).

在此先感谢您的任何建议.

sql firebird where where-clause firebird2.1

1
推荐指数
1
解决办法
4596
查看次数

C#中的Firebird连接

我有连接问题..

在我的计算机上下载此数据库时,我可以毫无问题地连接到我的数据库:

viewdataConnection.ConnectionString = "User ID=sysdba;Password=masterkey;Database=localhost:F:\\machine.FDB;DataSource=localhost;Charset=NONE;"
Run Code Online (Sandbox Code Playgroud)

一切都很好.

但是当我尝试连接到lan网络中的​​这个基站时,问题就出现了:

viewdataConnection.ConnectionString = "User ID=sysdba;Password=masterkey;Database=10.48.14.51:d:\\backup\\machine.fdb; DataSource=:d:\\backup\\machine.fdb;Charset=NONE;";
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

viewdataConnection.ConnectionString = "User ID=sysdba;Password=masterkey;Database=10.48.14.51:d:\\backup\\maszyna.fdb; DataSource=:10.48.14.51:d:\\backup\\maszyna.fdb;Charset=NONE;";
Run Code Online (Sandbox Code Playgroud)

然后我在我的SQL查询中得到关于无效令牌"秒"的错误,但是当数据库在localhost上时此查询有效..所以可能在我的connectionstring中有错误.

为什么?

c# sql firebird

1
推荐指数
1
解决办法
9034
查看次数

Paradox如何管理空值和空值?

我正在通过Borland数据库引擎(BDE)使用Paradox表.

我无法实现在字符串字段中处理null空字符串值的方式(Paradox数据类型"A").

我的具体问题是如何确定字段值是空还是空字符串.在Database Desktop工具中,它们似乎都是空字符串.

我需要这个,因为我正在将数据(使用Database Desktop以及编程方式)迁移到Firebird数据库,并且看起来像空字符串字段值都被复制到Firebird作为空值 ...甚至属于索引的字段!如何区分真空和空字符串?它取决于Paradox还是BDE?谢谢!

string null firebird paradox bde

1
推荐指数
1
解决办法
2333
查看次数

使用gbak和fix_fss_data恢复FireBird 2.5数据库返回格式错误的字符串

我有一个旧的数据库,我想将其转换为FireBird 2.5.在包含blob文本字段的表上恢复数据时出现问题,其中包含众所周知的问题"gbak:错误:格式错误的字符串gbak:检测到无效数据"

执行的步骤:

1)gfix -user SYSDBA -password masterkey f:\ dbb.db -shut -force 0
2)gfix -v -full -user SYSDBA -password masterkey f:\ dbb.db
3)gbak -v -t -g -ig -user SYSDBA -YF:\ backup.log -password"masterkey"f:\ dbb.db F:\ dbb1.db
4)gbak -r -v -o -p 16384 -YF:\ log.txt -user SYSDBA -密码masterkey"f:\ dbb1.db""f:\new.db"-fix_fss_data win1251 -rep

用win1252,utf8或unicode_fss替换字符集并不能解决问题.

我还尝试使用InterBase Data Pump 3.4版来迁移数据.

步骤:1)备份metatable
2)在新数据库上恢复metatable
3)使用InterBase Data Pump迁移数据

遇到错误"格式错误的字符串".

发生错误的所有表都有一个类型为"BLOB SUB_TYPE 1 SEGMENT SIZE 80"的字段

我怀疑在开始时数据库有字符集WIN1252.之后有人将charset更改为UTF8并更改了charset的所有字段定义,并从WIN1252更改为UTF8.否则我不明白为什么我会遇到这些格式错误的字符串错误.另外,我知道FireBird 2.0到FireBird 2.5迁移这个问题很常见.

有没有人知道如何解决这个问题?

firebird firebird2.5

1
推荐指数
1
解决办法
1万
查看次数

Firebird在单位数GB范围内是否存在可扩展性问题?

我正在与另一位开发人员建立一个项目,这是一位非常有经验和能力的编码员,他的技能和能力都没有问题.最近我给他发了一个我做过的一些工作的演示,他似乎有点惊讶我选择了一个Firebird数据库.谈话是这样的:

他:你为什么选择火鸟?SQLite会更快.

我:SQLite只是嵌入式的,它不能很好地扩展.此外,它缺少很多功能,包括存储过程支持.

他:当数据库大小超出可用RAM量时,Firebird也存在可伸缩性问题.

我:你是什么意思?

他(从他的电子邮件中直接引用):大规模减速.显然当索引+数据不适合RAM(物理RAM,而不是虚拟RAM)时,它会进入各种类型的"慢速模式",我们已经能够通过增加FireBird conf的内存使用值来在一定程度上缓解它但是,如果由于某种原因它无法获取内存(与MSSQL或MySQL fi相反,FireBird不会在启动时保留物理RAM,只是逐步),则存在突然"内存不足"失败的风险.即使在24 GB的机器上,在8 GB以上的情况下,无论内存如何,减速似乎都会保持不变.所以我们逐步将它们迁移到Oracle/MSSQL.

正如我所说,这是一个非常聪明,有能力的开发人员.但另一方面,我们有Firebird网站声称人们正在将其用于生产超过11 TB的数据库,如果他说的是真的,这对于所有意图和目的来说都是不可能的.

所以我不得不怀疑,这个问题确实存在于Firebird中,还是他忽略了某些东西,也许是他不知道的一些配置选项?是否有人熟悉他所描述的问题?

firebird

1
推荐指数
1
解决办法
435
查看次数

使用IN选择特定记录

我需要选择ID = 10,23,30的记录,所以我写了这个SQL

Select * from mytable where position(id in '10,23,30') > 0 
Run Code Online (Sandbox Code Playgroud)

但问题是我得到额外的记录ID = 1和2任何想法如何只选择我需要的?

sql firebird

1
推荐指数
1
解决办法
67
查看次数

在重复键上给出无效标记

我想更新name_codeemployee_migration用数字来自cdclient从表clientref.

 INSERT INTO employee_migration (name_code)
      Select cl.cdclient 
        From clientref cl 
  Inner Join employee_migration em  
          ON cl.client like upper(em.name)
          ON DUPLICATE KEY UPDATE name_code VALUES (cl.cdclient)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:令牌无效.

Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
ON.
Run Code Online (Sandbox Code Playgroud)

sql firebird

1
推荐指数
1
解决办法
100
查看次数