我正在制作我的数据库的ERD,并且陷入了一个小困境.
考虑表foo和bar.foo有三列是外键,引用了bar主键.我的问题是:在ERD中我只用这两个表之间的一行表示这个,还是用三行?
我有一个查询,它返回不止一次出现的不同device_type的行数.
SELECT COUNT(*) AS C1,device_type FROM stat
WHERE stat_date = '2012-02-08'
GROUP BY 2 HAVING C1 > 1
ORDER BY 1 DESC
Run Code Online (Sandbox Code Playgroud)
我想将剩余的(HAVING count = 1)行总结为'others'
如何将COUNT(*)和'others'的总和添加为以下查询的第二列?
SELECT COUNT(*) AS C2,device_type FROM stat
WHERE stat_date = '2012-02-08'
GROUP BY 2 HAVING C2 = 1
ORDER BY 1 DESC
Run Code Online (Sandbox Code Playgroud)
DB中的示例数据
device_type
dt1
dt1
dt1
dt2
dt2
dt3
dt4
dt5
Run Code Online (Sandbox Code Playgroud)
预期结果
3 dt1
2 dt2
3 other
Run Code Online (Sandbox Code Playgroud) 在表a上的操作之后,我写了一个触发器来在表b中插入一行.出于某种原因,如果我在插入后添加此触发器然后插入一行,则无效.但是,如果我将触发器添加为"更新后"并更新行,它确实有效.
这是触发器代码.当我用'AFTER INSERT'替换'AFTER UPDATE'并进行插入时,插入新行时没有任何反应.创建触发器时我没有错误,我也没有尝试更新触发器所在的同一个表.任何帮助表示赞赏!谢谢,Jen
drop trigger if exists insertUndecided;
DELIMITER //
CREATE TRIGGER insertUndecided
AFTER UPDATE ON jiraissue
FOR EACH ROW
BEGIN
insert into nodeassociation (SOURCE_NODE_ID, SOURCE_NODE_ENTITY, SINK_NODE_ID, SINK_NODE_ENTITY, ASSOCIATION_TYPE, SEQUENCE)
select
NEW.id as SOURCE_NODE_ID,
'Issue' as SOURCE_NODE_ENTITY,
(select pv.id from projectversion pv
where pv.vname='undecided'
and pv.project=NEW.project ) as SINK_NODE_ID,
'Version' as SINK_NODE_ENTITY,
'IssueFixVersion' as ASSOCIATION_TYPE,
NULL as SEQUENCE
from dual where exists
(select pkey from jiraissue
where id=NEW.id and id not in
(select distinct source_node_id from nodeassociation
where source_node_entity='Issue' …Run Code Online (Sandbox Code Playgroud) 我打算建一个网站贴标签.标签最多可以包含五个标签,例如stackoverflow.com.
谁能告诉StackOverflow的标签系统?具有post和tag的关系数据库系统.
我应该在post表中添加一列还是应该为它创建单独的标记表?标签可以用空格或逗号分隔.
我们需要设计一个系统,允许用户在大文本中搜索不同的关键字,并且将来在一段时间内创建一些关于该关键词在所有文章中频率的基本报告.
我们将有:
为此,我们提出了以下解决方案:
系统将通过关键字搜索SOLR,然后在MySQL中查找结果以检索其他信息.
那么,这会是一个好方法吗?
如果大多数搜索仅针对上个月添加的文章,那么保留两个数据库是一个好主意,一个是上个月为大多数搜索添加的文章,另一个是所有文章?
如果您对如何改进这一点有任何提示/技巧,我们将不胜感激.
提前致谢!
您将如何使用以下代码解决并发问题?在此示例中,我们想知道用户验证失败的原因.问题是这段代码对数据库进行了两次单独的调用,但我们希望整个方法在概念事务中发生.具体来说,我们对隔离感兴趣.在确定身份验证失败的原因之前,我们不希望在执行此方法期间并发写入会影响我们的读取.
我想到了一些解决方案:Thread Locking,TransactionScope和Optimistic Locking.我非常喜欢乐观锁定的想法,因为我认为冲突可能很少见,但是.NET没有内置任何东西,对吧?
此外 - 在这种情况下,这真的是值得关注的吗?什么时候这样的并发问题很重要,什么时候不重要?在实施解决方案时需要考虑什么?性能?锁的持续时间?冲突发生的可能性有多大?
编辑:在回顾Aristos的回答之后,我认为我真正追求的是Authenticate方法的某种" 快照 "隔离级别.
public MembershipStatus Authenticate(string username, string password)
{
MembershipUser user = Membership.GetUser(username);
if (user == null)
{
// user did not exist as of Membership.GetUser
return MembershipStatus.InvalidUsername;
}
if (user.IsLockedOut)
{
// user was locked out as of Membership.GetUser
return MembershipStatus.AccountLockedOut;
}
if (Membership.ValidateUser(username, password))
{
// user was valid as of Membership.ValidateUser
return MembershipStatus.Valid;
}
// user was …Run Code Online (Sandbox Code Playgroud) 是否会增加在我们的应用程序中围绕每个服务方法放置数据库事务的开销?
我们目前只使用DB事务,这是明确/显而易见的必要条件.我最近建议围绕所有服务方法进行交易,但其他一些开发人员提出了一个谨慎的问题:这会增加开销吗?
我的感觉不是 - 自动提交与DB角度的事务相同.但这是准确的吗?
DB:MySQL
对于学校项目,我们必须创建自己的数据库.我决定创建一个数据库来管理我的电子元件库存.作为一项要求,我们需要创建一个ER图,然后从该图中派生出数据库模式.不幸的是,教授认为我创建的图表可以简化,"Part"实体是不必要的.
如果我删除Part实体,那么为了让Circuit实体"使用"任意数量的任何部分,并使每个部分与可能的任何电路相关联,我将不得不从每个组件获得单独的M-to-N关系输入电路.这些关系中的每一个都会生成一个新表.这肯定会超过我们允许的项目的严格最大数量.
如果教授特别提到Part是不必要的,那么必须有一些方法来删除它,导致更简单的ER图和模式 - 但我看不出它是什么.
也许你们可以看到它是什么并给我一个提示?
编辑:丹W有一个很好的建议.我可以通过给每个部件类型(电容器,电阻器等)自己的键来消除该部件.然后在使用部分内部,包括那些组件的外键.我不得不假设表的每个条目只与一个部分相关联,其余部分为空.这是结果模式.这个架构应该运行良好.但是现在我必须弄清楚对ER图的修改到底对应于这个模式.
EDIT2:我得出结论,我正在寻找的关系是n-ary.根据几个来源,要从n-ary转换为模式,您将每个参与实体类型的关系的主键包含为外键.然后添加简单属性.这就是我提出的.
我有一个长格式的纵向数据.我想基于变量列创建一个ID变量,用于标识我的数据的每个观察.我如何在R中做到这一点?
示例:我有这些数据
name year var1 var2
A 1 4 3
A 2 5 1
A 3 4 2
B 1 . .
B 2 4 3
B 3 5 1
Run Code Online (Sandbox Code Playgroud)
我想生成一个名为"id"的新列,每个名称都有一个唯一的编号,例如:
name id year var1 var2
A 1 1 4 3
A 1 2 5 1
A 1 3 4 2
B 2 1 . .
B 2 2 4 3
B 2 3 5 1
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
我有一个1000个客户的列表,我通过asp.net中的datalist控件显示.该列表显示每页一个客户.
我用来绑定数据列表的查询是:
static public DataTable GetAllCustomers()
{
string sql = "Select * from [Customers]";
SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是一旦客户被查看它应该回到列表的底部,这样一旦用户第二次登录,他就不必从一开始就查看同一个客户,所查看的客户应该去在1000个客户列表的底部,例如,如果一旦查看了客户1,则下次客户1应该成为1000个客户而客户2应该成为客户1时,希望它有意义.
任何建议或帮助将不胜感激如何实现此场景以及我必须在db和query中进行哪些更改才能实现此目的.
database ×10
mysql ×3
asp.net ×2
sql ×2
autocommit ×1
c# ×1
concurrency ×1
datalist ×1
er-diagrams ×1
erd ×1
foreign-keys ×1
innodb ×1
r ×1
sql-server ×1
tags ×1
transactions ×1
triggers ×1