视频通道的DB设计,注释没有唯一的ID



现在,我在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反映了您的数据模型。

最新更新