小编Mik*_*ike的帖子

我应该使用复合主键吗?

在Java的JPA(通过EmbeddedId或IdClass注释)中似乎只有第二类支持复合数据库键.当我读到复合键时,无论语言如何,人们都会不断发现,因为它们是一件坏事.但我不明白为什么.这些天使用复合键仍然可以接受吗?如果没有,为什么不呢?

我找到了一个同意我的人:http: //weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

但另一个不这样做的人:http: //weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html

是仅仅是我,还是人们无法区分复合键的适用与否?当表不表示实体时,即当它表示连接表时,我看到复合主键很有用.

一个简单的例子:

Actor { Id, Name, Email } Movie { Id, Name, Year } Character { Id, Name } Role { Actor, Movie, Character }

这里的Actor,Movie和Character显然受益于Id列作为主键.

但是Role是一个多对多连接表.我认为创建一个id只是为了识别数据库中的一行是没有意义的.对我而言,主键显而易见{ Actor, Movie, Character }.它似乎也是一个相当有限的功能,特别是如果连接表中的数据一直在变化,一旦主键序列回绕到0,您就会发现主键冲突.

那么,回到最初的问题,使用复合主键仍然是可以接受的做法吗?如果没有,为什么不呢?

java sql language-agnostic database-design

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

在RPM依赖项中指定备选方案

我有一个Java应用程序,我打包为RPM.理想情况下,我想将Java指定为依赖项.我需要在Fedora和RHEL环境中安装.问题是RHEL Java被称为'java',而Fedora不提供Oracle/Sun的发行版,而是从Oracle的网站手动下载.根据您选择的包,Oracle的Oracles分发称为"jre"或"jdk".

通常在RPM SPEC文件中我会写:

取决于:java> = 1.6

但是由于RHEL提供'java',并且Fedora通过Sun/Oracle提供'jre'或'jdk'(我不能使用OpenJDK),我有点绑定.到目前为止,文档还没有显示出'java> = 1.6 ||的方法 jre> = 1.6 || jdk> = 1.6'等因为Java包不在我的控制范围内,我不能只改变其中一个来指定'提供:Java'.

目前我只看到两个选择:

  • 忽略Java作为依赖
  • 为Fedora创建一个RPM,一个用于RHEL

我不喜欢这两种选择.有没有其他方法可以实现Java依赖,其中提供者都有不同的名称?

编辑:第三个选项 - 为Fedora创建我自己的Java虚拟包,它依赖于Sun的JDK RPM.

java fedora rpm rhel

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

在许多机器上分配状态

我正在尝试编写一个需要了解集群中其他计算机状态(本地LAN)的工具.这适用于类似于VRRP和corosync/openais 的网络故障转移/高可用性系统,但我希望包含更多信息(例如接近实时的速度/性能特征),以便设备可以做出更明智的选择.这意味着使用比预先确定的基于权重的机制更复杂的协议:通过允许所有群集机器查看彼此的状态,他们可以共同商定哪个最适合作为主设备.

从我的搜索中,我还没有找到任何提供分布式状态机制的(C,C++或JavaME)库.理想情况下,我正在寻找能够定期广播/多播每个机器状态的内容,这样参与的机器就可以建立一个全局状态表,所有人都可以看到主人应该是谁.在这种情况下,状态是任意键/值对.

我宁愿不重新发明任何轮子,所以很想知道这里是否有人能指出我正确的方向?

c c++ linux distributed-computing java-me

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

将对象分配给在同步块外部定义的字段 - 它是否是线程安全的?

这个java代码的线程安全性有什么问题吗?线程1-10通过sample.add()添加数字,而线程11-20调用removeAndDouble()并将结果打印到stdout.我记得在我的脑海里有人说过,以同样的方式在removeAndDouble()中使用它来分配项目可能不是线程安全的.编译器可以优化指令,使它们不按顺序发生.这是这种情况吗?我的removeAndDouble()方法不安全吗?

从这个代码的并发角度来看还有什么问题吗?我试图用java(1.6向上)更好地理解并发性和内存模型.

import java.util.*;
import java.util.concurrent.*;

public class Sample {

    private final List<Integer> list = new ArrayList<Integer>();

    public void add(Integer o) {
        synchronized (list) {
            list.add(o);
            list.notify();
        }
    }

    public void waitUntilEmpty() {
        synchronized (list) {
            while (!list.isEmpty()) {
                try { 
                    list.wait(10000);  
                 } catch (InterruptedException ex) { }
            }
        }
    }

    public void waitUntilNotEmpty() {
        synchronized (list) {
            while (list.isEmpty()) {
                try { 
                    list.wait(10000);  
                 } catch (InterruptedException ex) { }
            }
        }
    }

    public Integer removeAndDouble() {
        // item declared …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading thread-safety

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

确定同步范围?

为了提高我对并发问题的理解,我正在研究以下场景(编辑:我已经将示例从List更改为Runtime,这更接近我正在尝试的内容):

public class Example {
    private final Object lock = new Object();
    private final Runtime runtime = Runtime.getRuntime();
    public void add(Object o) { 
        synchronized (lock) { runtime.exec(program + " -add "+o); } 
    }
    public Object[] getAll() { 
        synchronized (lock) { return runtime.exec(program + " -list "); }
    }
    public void remove(Object o) { 
        synchronized (lock) { runtime.exec(program + " -remove "+o); } 
    }
}
Run Code Online (Sandbox Code Playgroud)

就目前而言,每个方法在独立使用时都是线程安全的.现在,我想弄清楚的是如何处理调用类希望调用的位置:

for (Object o : example.getAll()) {
    // problems if multiple threads perform this …
Run Code Online (Sandbox Code Playgroud)

java theory concurrency multithreading

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

为什么UUID标准很复杂,我应该遵循它们吗?

RFC 4122非常详细地定义了UUID.目前定义了5种变体,所有变量都是128位,但在如何导出位方面有所不同.

为什么要关心遵守特定的变体; 一旦创建了ID,使用UUID的人必须知道它是如何构建的?

特别是,如果我要使用Variant 4(完全随机),遵循RFC似乎是浪费,它将随机位从128减少到122(变量为4b位,保留2位).我不是更好不遵循RFC并使用所有128位随机性?

database standards uuid guid

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

简单的SQL,无需使用子查询即可返回计数

我试图通过单个SQL语句获得注册课程的学生数量,但不使用子查询.到目前为止,我只能弄清楚如何使用子查询来做到这一点.还有另外一种方法吗?

请考虑以下数据库设置:

create table student (id integer not null primary key);
create table course_enrolment (student integer not null references student, course integer not null);
insert into student values (1);
insert into student values (2);
insert into student values (3);
insert into course_enrolment values (2,20);
insert into course_enrolment values (2,30);
insert into course_enrolment values (3,10);

我想得到参加课程的学生人数.在这种情况下,它是2.

我可以使用子查询轻松实现这一点:

SELECT COUNT(*)FROM(从COURSE_ENROLMENT选择DISTINCT学生)作为数据;

我想在不使用子查询的情况下获取计数.

我正在使用Postgresql 8.3但我正在寻找与供应商无关的解决方案.

sql postgresql

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

如何使用Raphael和jQuery检测IE上的点击或鼠标按下

可能重复:
Raphaeljs和Internet Explorer,单击元素时出现问题

当鼠标点击Raphael JS生成的一些文本时,我正试图找到触发事件的方法.在Firefox中,点击事件完美地运行,在IE 7和8中(我没有测试过早期版本)既没有点击也没有mousedown工作.单击适用于其他raphael对象,例如示例中的矩形.

如何在以下演示中给出的文本上触发事件:

<html>
    <head>
        <script type="text/javascript" src="http://github.com/DmitryBaranovskiy/raphael/blob/master/raphael-min.js?raw=true"></script>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    </head>
    <body>

    <div id="graph"></div>

    <script language="javascript">
        function setupImage() {
            var canvas = Raphael(graph, 200, 200);

            var alpha = canvas.text(100, 10, "Two Words");
            alpha.attr("font-size", "20px");

            var beta = canvas.rect(50, 50, 50, 50);
            beta.attr("fill", "#3333cc");

            canvas.safari();

            var textClickEvent = function(event) {
                alert("text clicked");
            };

            var boxClickEvent = function(event) {
                alert("box clicked");
            }; 

            $(alpha.node).click(textClickEvent);
            $(beta.node).click(boxClickEvent);
        }

        $(window).load(setupImage);
    </script>

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的直觉是我可能不得不尝试操纵DOM来包装文本,例如,A元素并在其上绑定.这似乎不是最干净的解决方案,所以我在这里询问是否有人有另一种方法.

javascript jquery internet-explorer javascript-events raphael

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