现在,我在Java中有一个带有2个类的程序:
public class Video {
private String id;
private List<Annotation> annotations;
...
}
和
public class Annotation{
private String id;
...
}
因此,每个视频都可以包含大量注释,并且只能在1个视频中显示注释。它应该是一个(视频) - 对 - (注释)关系,但问题是:注释在所有视频中都没有唯一的ID。这样的东西:
Video id=1:
Annotation id=1;
Annotation id=2;
Video id=2:
Annotation id=1;
Annotation id=2;
我无法更改注释ID的生成,因为我从不同的服务器中将它们放在XML中,它们应该保持不变。
那么,将其存储在SQL中的最佳方法是什么?目前,我可以看到唯一的解决方案是在视频表中将注释作为XML字符串存储。还有一个选择:在注释中创建某种新ID,以限制视频和注释。将通过视频展示漆。
可能是很常见的问题,但是我只是不知道如何搜索类似的问题,因此很高兴听到任何提示。
仅仅因为输入数据中称为" id"的某些东西并不意味着您可以(或应该)将其用作主要键。您可以获得带有所谓的天然键的数据。由于您无法控制它们,并且不想依靠无法控制的东西,因此您应该生成自己的键( surnogate 键)并在数据库中内部使用它们。
所以我会选择类似的东西(假设您使用mysql)
create table videos (
video_id int(10) auto_increment primary key,
external_id int(10) unique key
);
create table video_annotations (
annotation_id int(10) auto_increment primary key,
video_id int(10),
external_id int(10),
constraint video_id_fk foreign key (video_id) references videos(video_id)
);
大概源系统不会为视频提供重复的ID(否则它将分开告诉他们?),并且对视频的唯一密钥约束。External_id反映了您的数据模型。