我正在构建一个数据库系统,并且我的一个表的设计有问题.
在该系统中,有一个用户表,一个对象表,一个项表和一个成本表.
成本表中的唯一记录由用户,对象,项目和年份确定.但是,如果项目不同,则可能有多个记录具有相同的年份.
层次结构为user-> object-> item-> year,每个项目有多个唯一年份,每个对象有多个唯一项目,每个用户有多个唯一对象,多个唯一用户.
设计成本表的最佳方法是什么?
我想将userid,objectid和itemid包含为外键,然后使用由userid,objecid,itemid和costyear组成的复合键.我听说复合键是糟糕的设计,但我不确定如何构建它以摆脱使用复合键.你可以告诉我的数据库建设技巧有点生疏.
谢谢!
PS如果重要,这是一个interbase数据库.
作品
select payeeid, EXTRACT(WEEKDAY FROM checkdate) as DOW,
(bankcleared - checkdate) as DateDiff
from Master
where (bankcleared is not null)
order by payeeid, DOW, DateDiff
Run Code Online (Sandbox Code Playgroud)
添加DateDiff到Where- 不起作用
select payeeid, EXTRACT(WEEKDAY FROM checkdate) as DOW,
(bankcleared - checkdate) as DateDiff
from Master
where (bankcleared is not null) AND (DateDiff >= 1)
order by payeeid, DOW, DateDiff
Run Code Online (Sandbox Code Playgroud) 如果我在Visual Studio 2012中运行该应用程序,它就像一个魅力,但当我尝试在bin文件夹中运行.exe文件时,我收到此错误:
System.IO.FileLoadException: Could not load file or assembly 'Borland.Data.DbxCommonDriver, Version=16.0.0.0, Culture=neutral, PublicKeyToken=a91a7c5705831a4f' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Borland.Data.DbxCommonDriver, Version=16.0.0.0, Culture=neutral, PublicKeyToken=a91a7c5705831a4f'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName …Run Code Online (Sandbox Code Playgroud) 假设,我有一个存储过程,它接受一个参数 - id,并返回一些与此 id 相对应的数据。如果我想检索所有这些数据,比如在 SELECT 查询中使用通配符怎么办?这该怎么做?
SQL专家为您提供简单的SQL.
我有两个字段(AccountNo,CheckNo).可以有多个具有相同值的checkno.它将拥有相同的AccountNo.我希望mytable显示AccountNo和CheckNo的列表,以及它存在多少次的计数.
Select Distinct AccountNo, CheckNo, Count(Distinct AccountNo, CheckNo) as Total
from MyTable
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下语法制作只包含不同值的表的副本:
SELECT DISTINCT *
INTO :TAB_DISTINCT
FROM TAB_MAIN
Run Code Online (Sandbox Code Playgroud)
但是IB并不喜欢INTO系列(用该系列评论建立一个好的计划)无效的令牌.动态SQL错误.SQL错误代码= -104.令牌未知 - 第2行,char -1.INTO.
我已尝试使用和不使用冒号,也有没有空的预先存在的TAB_DISTINCT并设置了字段.但没有雪茄.
任何人都有任何线索我在这里做的笨蛋语法错误?非常感谢,Brian
我有由Firebird 1.0创建的gdb文件(25GB另一个~38 GB).在打开一些表时,它们显示错误[运行Firebird服务器1.0(停止Interbase 7.5)] - >无效请求BLR在偏移951处是什么意思?
另外我想将它转换为Interbase 7.5它有ODS版本.10(通过gstat -h).
有任何想法吗 ??
如果Interbase和Firebird都安装在同一工作站上,是否存在任何冲突?有没有人有任何提示或最佳做法?
我试图通过BDE在运行时连接到Interbase DB.我试图在一个无形的项目(但不是一个控制台应用程序)中这样做.别名是已知的.我从注册表中检索别名.示例:MyAlias.
//create alias params list
AParams:= TStringList.Create;
//create a session to get alias parameters
ASession:= TSession.Create(nil);
ASession.SessionName := 'MainSession';
try
ASession.GetAliasParams(tmpAlias, AParams);
finally
ASession.Free;
end;
//connect to database
dbMain:= TDatabase.Create(nil);
with dbMain do
begin
//AliasName:= 'MyAlias';
DatabaseName:= 'test';
LoginPrompt:= False;
Params.Assign(AParams);
try
Connected:=True;
if Connected then ShowMessage('Connected!') else ShowMessage('Failed to Connect!');
finally
Free;
end; //try
end;//with
//free alias params list
AParams.Free;
Run Code Online (Sandbox Code Playgroud)
无论如何,它看起来不像Session.GetParams实际获得密码.我如何获得密码?如果我知道别名,有没有办法从BDE获取所有连接信息并建立连接?如果客户端将来更改用户名和密码,我宁愿不对其进行硬编码.
我有这个SQL.我不确定它是我需要的,但它确实选择了我需要的所有记录.我现在只需要压缩它们并计算唯一日期的计数和金额.
select m.account_tag, m.cmcl_forecast_cleared, m.check_amount,
a.acct_id, a.acct_no, a.bank_id,
b.bank_id, b.name
from ap_master m
join accounts a on a.acct_id=m.account_tag
join banks b on b.bank_id=a.bank_id
where m.cmcl_bank_cleared is null
order by m.account_tag, m.cmcl_forecast_cleared
Run Code Online (Sandbox Code Playgroud)
我只想显示四列Account,Date,Count和sum
该帐户将是a.acct_no.
日期将是该帐户
的所有唯一m.cmcl_forecast_cleared日期计数将是这些唯一日期的检查(记录)
的总数(cmcl_forecast_cleared)总和将是该唯一日期的总check_amount(cmcl_forecast_cleared)
我希望这是可以理解的.我不确定我是否需要任何分组
我想做一个查询插入:
插入A_TABLE(BLOB_FIELD)值(MY_BLOB_VAL)
但我在exphi中只有字符串值,例如:
procedure INSERT_BLOB_QUERY
var
query:String;
my_blob_val:String;
begin
my_blob_val := 'a blob string to be inserted';
query := 'INSERT INTO A_TABLE (BLOB_FIELD) VALUES(' + my_blob_val + ')';
// to execute a query....
end;
Run Code Online (Sandbox Code Playgroud)
出现的问题是字符串到blob的转换.
那么如何在interbase blob字段中插入一个字符串?
我正在尝试为Interbase编写一个SQL语句.
这个SQL怎么了?
md_master(trm)=主表cd_Med(cdt)=详细信息表
SELECT trm.seq_no, trm.recipient_id, trm.payee_fullname, trm.payee_address1, trm.payee_address2, trm.payee_address3, trm.payee_address_city, trm.payee_address_state, trm.recip_zip, trm.recip_zip_4, trm.recip_zip_4_2, trm.check_no, trm.check_date, trm.check_amount,
cdt.com_ss_source_sys, cdt.cd_pay_date, cdt.com_set_amount,
bnk.name, bnk.address, bnk.transit_routing,
act.acct_no
FROM md_master trm, cd_med cdt, accounts act, banks bnk
join cd_med on cdt.master_id = trm.id
join accounts on act.acct_id = trm.account_tag
join banks on bnk.bank_id = act.bank_id
ORDER BY cdt.master_id
Run Code Online (Sandbox Code Playgroud)
我没有收到错误,计算机只是不停地嘎吱嘎吱地挂起来.