标签: database

将嵌套的sql转换为联接模式

我有一个查询返回正确的数据给我,但作为开发人员而不是DBA我想知道是否有任何理由将其转换为连接而不是嵌套选择,如果是这样,它会是什么样子.

我的代码目前是

select * from adjustments where store_id in (
    select id from stores where original_id = (
        select original_id from stores where name ='abcd'))
Run Code Online (Sandbox Code Playgroud)

任何对更好地使用连接的引用也会受到赞赏.

sql database sql-server join

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

如何在Delphi DBLookupComboBox中选择正确的项目

我有一个连接到数据库查询的DBLookupComboBox.那部分工作正常.当我运行程序时,DBLookupComboBox会填充查询结果.我想在程序首次运行启动新项目操作时看到DBLookupComboBox填充了第一个项目"请选择".(见下图)

在此输入图像描述

此外,如果我正在加载以前保存的已选择索引2"快速消除"的数据库记录,我将如何让DBLookupComboBox显示所选条目?

是的,"请选择"是索引0,它将作为查询的一部分进行检索.

database delphi lookup

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

SQLiteOpenHelper - 在SD卡上创建数据库

在我的测试Android应用程序中,我打算创建和访问数据库文件,它将位于SD卡上.我在一个类的帮助下使用main活动,该类扩展了SQLiteOpenHelper.我想以与以前相同的方式使用它,但我必须以某种方式更改数据库PATH.你知道吗,如何实现它?

谢谢

我当前扩展SQLiteOpenHelper的类的代码:

public class DatabaseDefinition extends SQLiteOpenHelper{
private static final String DATABASE_NAME="test.db";
private static final int DATABASE_VERSION=1;

public DatabaseDefinition(Context context) {
    super(context,DATABASE_NAME,null, DATABASE_VERSION);

}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE "+TABLE_NAME+" ("+ _ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ NAME+" TEXT NOT NULL, " +SURNAME+" TEXT NOT NULL, "+PHONE+" INT NOT NULL);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
    onCreate(db);

}
Run Code Online (Sandbox Code Playgroud)

和我的主要代码:

public class DatabaseExampleActivity extends Activity …
Run Code Online (Sandbox Code Playgroud)

database sqlite android sd-card sqliteopenhelper

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

在rails中记录用户事件

我目前正在尝试为我的rails应用程序的管理部分实现日志.这将允许管理员查看用户执行了什么操作以及何时执行.例如'用户添加了新地址','用户将他们的邮政编码从X更新为Y'.

由于每个动作都可能涉及许多模型,而不仅仅是用户,我创建了一个日志模型,其中包含所有其他系统模型ID,消息和日志代码的字段.

class CreateLogs < ActiveRecord::Migration
  def self.up
    create_table :logs do |t|
      t.integer :user_id
      t.integer :marker_id
      t.integer :administrator_id
      t.integer :group_id
      t.integer :assignment_id
      t.integer :submission_id
      t.integer :code
      t.text :message

      t.timestamps
    end
  end

  def self.down
    drop_table :logs
  end
end
Run Code Online (Sandbox Code Playgroud)

我担心的是,例如,用户可以(让我们说)在他们的帐户中添加一个作业,它会被记录为

Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
Run Code Online (Sandbox Code Playgroud)

(某处代码342对应于'用户创建了一个新地址',因此不需要消息)

显然,在日志视图中,我可以从日志ID /详细信息中提取相关用户和地址信息,但是如果要删除此用户或地址,则所有信息都将不可用,因此回顾日志,条目将是基本没用.

必须有更好的方法或某些东西来帮助记录这样的系统事件并应对潜在的删除.

或者,我可以将整个条目存储为文本消息,但这不是非常糟糕并且不必要地填满数据库吗?

如果其中任何一个不清楚,请告诉我,只需要记录日志应用程序操作/事件之前已经完成!

谢谢,

皮特

database logging activerecord action ruby-on-rails

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

有一个PL/pgSQL免费环境可以为PostgreSQL开发吗?

我想知道在PL/pgSQL中是否有可用的开发环境.

在Notepad ++中编写代码,替换函数并运行它会使进程变慢.我现在正在使用pgAdmin(仅用于替换和运行程序),但这不是我想要的.

我知道这里有一个类似的问题,但这并不重复.开发的所有工具都是付费的,我想知道是否有一个免费的.

database ide postgresql environment plpgsql

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

分布式主键 - UUID,简单自动增量或自定义顺序值?

我知道之前已经问过这类问题,但我找不到一个比较我想到的选项.所以我打算在这里发帖,如果有重复,请发帖链接.

这已经结束了一个相当长的帖子,如果你有时间请阅读它,因为问题在最后

编辑2:我已经接受了答案,因为我认为这将是目前最好的解决方案.但是我想我还想回答另外两个问题来回答关于连接数字的问题.它们可以在这里找到:结合两个整数来创建一个唯一的数字C#中的Concatenate整数.如果我打算尝试对数字进行编码(如下所示,如51122222),我认为这会很有用.虽然在c#中使用像String.Format这样的东西对我的小应用程序来说足够快.

我目前正在尝试找到一种方法来设置使用相同数据库模式的分布式应用程序,并且可以与一个主数据库同步,其他所有数据库也同步.

我目前计划的程序将作为一个相当简单的程序来跟踪信息.第一个版本可能包含两个表:Items和ItemHistory.这是可能字段的示例:

项目
ItemID(PK)?
Name String
Content String

ItemHistory
ItemHistoryID(PK)?
ItemID(FK)?
EventName String
CreatedOn DateTime

我已经列出了字段名称和类型,这个问题是关于PK类型的用途,因此它们缺失.

第一个版本将是一个标准的桌面应用程序,我目前正在计划使用带有WPF前端的C#和用于数据库的SQLite.最后我还想创建一个在我的Android手机上运行的版本.这是分布式部件的用武之地.我并不总是有信号,因此需要应用程序脱机运行并允许再次联机时同步.

以下是我到目前为止关于如何处理ID的想法:

  1. 对ID使用UUID,因此不存在合并冲突
  2. 使用自动增量字段并在某个增量中为每个版本的应用程序设置起始编号,例如1表示第一个app,10000表示秒,20000表示第三个等
  3. 使用带偏移值的自动增量字段以避免冲突而数字之间没有大的间隙(mysql具有auto_increment_increment和auto_increment_offset)
  4. 生成我自己的ID,为每个数据库编码一个ID,这样它们就可以拥有自己的自动增量值而不会引起冲突.我发现其他人也有同样的想法:建议ID列使用哪种数据类型?

虽然选项1可行,我过去曾使用它,但我想看看其他选项可能避免UUID问题.我希望有一个解决方案,在调试时更容易阅读并且可以排序.

选项2可行,但它确实限制了记录数量.我知道在我的小应用程序中它几乎不会超过那么多,但我想尝试看看是否有一个解决方案不需要这样的限制.选项3通过使用交替数字来避免限制,但我认为您需要知道要使用多少数据库,否则您可能会填写所有数字.在DB1上使用1的开头和1的增量,在DB2上使用2的开头和2的增量将使用每个数字.您可以使用50作为增量,但之后您只有另一个限制,但现在它可以使用它的应用程序数量.我再次知道它的限制在我的情况下不会受到影响,但在一个突然变得非常受欢迎的应用程序中可能是一个问题.

选项4似乎可以为我解决问题,但我不确定它是否会在实践中起作用.我的一个想法是允许在每个应用程序上设置前缀,然后可以使用自动递增值.例如PC1,PC2用于PC上的记录,也可能是PHONE1,PHONE2等来自Android的记录.这可以工作但是在字符串中使用数字会导致1,1,1,100的排序问题显示在彼此旁边,即使用较少的前导零,然后再次返回到有限数量的记录.

我想知道是否可以使用数字作为DB ID和自动增量.例如,PC = 1,PHONE = 2.那么我们的PC有11,12,13等,第11条记录可能有111条,PHONE则有304条记录为2304条.但我不知道如何做到这一点,或者是否可以轻松完成并且不会导致产生值的额外开销.

在工作中他们使用了类似的编号系统,他们使用类似于51122222的东西.5将引用应用程序的实例,然后是2位数年份,最后是自动递增数字.我还没有得到一个明确的答案,如果我们在一年内超过99999条记录会发生什么.我认为他们可能已经认为它不会发生并且很高兴他们已经计算了风险.

最后一个问题,有没有办法为分布式应用程序创建一个主键系统,允许排序而不强制限制(除了数据类型本身的大小,例如最大整数)?

编辑:这是我打算写的应用程序的更多信息.我想创建一些东西,让我可以存储我可能获得的任何类型的信息,系统将包括标记条目的能力,以便我可以搜索主题.到目前为止,我看到的信息类型可能是关于书籍,DVD,网站等的建议.或者也许是我居住地方的当地提示.一个总体思路是停止将这些信息分散在不同格式的多台计算机/笔记本电脑/手机上.

database distributed database-agnostic

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

哪些字符不能用于SQLite数据库中的值?

我正在制作Android应用程序而且我使用了SQLite数据库.但我发现如果你输入单引号(')等字符(也用作主键),数据将无法正确保存/检索.

这是我的问题还是真的?如果真的有更多这样的人物?

谢谢.

@bdares和@mu感谢您的提示,但是请您告诉我如何在SQLite中使用占位符和/或预处理语句?

我之前总是使用直接字符串连接,但现在看来这是一个不好的做法,我想使用预处理语句和/或占位符.

sql database sqlite android character

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

.Net C#如何连接外部SQL Server数据库?OleDb还是其他?

嗨,我想知道如何连接到C#,.NET中的外部SQL Server数据库?

例如,如果我有参数:

SQL信息

  • Url到数据库(也在整个浏览器中):Sqlweb.companyname.com
  • 数据库用户名:username
  • 服务器:Dcms-xxx
  • Databasename:databaseName
  • Databasepassword:密码

我知道如何连接到内部: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.AppDomain.CurrentDomain.BaseDirectory + "..\\Files\\MapPlaces\\Database.mdb;";

但外部怎么样?

我试过了 :

 string nowConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Sqlweb.companyname.com;Initial Catalog = databaseName; User Id = Username; Password = Password;";

System.Data.OleDb.OleDbConnection dbcon = new System.Data.OleDb.OleDbConnection(nowConString);

string sql = "SELECT * FROM XXXTable";

dbcon.Open();

System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, dbcon);

System.Data.OleDb.OleDbDataReader reader;

reader = cmd.ExecuteReader();

ScriptStuff.Append("Reader created!<br/>");

while (reader.Read())
{
    string companyName = reader.GetValue(1).ToString();

    ScriptStuff.Append(companyName+"<br/>");

}
Run Code Online (Sandbox Code Playgroud)

不工作 !谢谢您的帮助 !

编辑评论:

是的,这是我的错误,谢谢.由于第一个是访问,而第二个是SQL Server.它是SQL Server 2005.但我是.net的新手以及所有......我已经找到了第一个和第二个connectionstring.com但我无法找到或理解如何使用它... …

.net c# sql database oledb

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

每个数据库表的常见审核列是什么?

我打算将'status','date_created','date_updated'包含在数据库中的每个表中.'status'用于软删除行.

然后,我发现很少有人也为每个表添加'user_created','user_updated'列.

如果我也添加这些列,那么每个表至少有5列.这会是太多的开销吗?

你觉得拥有这五个专栏是个好主意吗?

另外,'user_created'中的'user'是否意味着数据库用户?或应用程序用户?

database timestamp web

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

在Delphi中,我应该在循环中使用多个数据库插入还是使用存储过程?

我正在寻找处理这种情况的最佳方法.我想在数据库表中存储一个摊销计划.每行包含日期,当前余额,付款,市政,利息和新余额.对于典型的30年抵押贷款,这将是360行或数据库插入.

我应该使用Delphi在循环内进行计算并为每个结果执行插入操作,还是应该在存储过程中执行这些计算?

这将是单个用户,本地计算机,桌面应用程序.

database delphi loops stored-procedures

5
推荐指数
2
解决办法
685
查看次数