Tag: 数据库设计

类型,属性,实例和值之间的关系

我正在开发一个Java应用程序,它通过Hibernate将数据存储在数据库中。 该应用程序的一个特征是定义类型等模板以供重用。 例如,类型具有属性,您可以创建类型的实例,该实例具有属性的值。 问题是,我不知道如何确保只分配属性定义的属性值。 在我的解决方案中有一个导致问题的冗余,但我不知道如何删除它。 我当前(和有问题的)方法看起来像这样: @Entity class Type { @Id @Generated private Long id; @OneToMany(mappedBy=”type”) private List attributes; //… } @Entity class Attribute { @Id @Generated private Long id; @ManyToOne private Type type; //… } @Entity class Instance { @Id @Generated private Long id; @ManyToOne private Type type; //… } @Entity class AttributeValue { […]

数据库表中的多语言字段

我有一个应用程序需要支持多语言界面,确切地说是五种语言。 对于接口的主要部分,可以使用标准ResourceBundle方法来处理此问题。 但是,数据库包含许多表,其元素包含人类可读的名称,描述,摘要等。需要能够以所有五种语言输入其中的每一个。 虽然我想我可以简单地在每张桌子上都有字段 NameLang1 NameLang2 … 我觉得在编写代表每个表的bean时会导致大量相同的代码。 从纯粹面向对象的角度来看,解决方案很简单。 每个类只有一个Text对象,其中包含每种语言中的相关文本。 这进一步有用,因为只有一种语言是强制性的,其他语言具有回退规则(例如,如果语言4缺少返回语言2,其返回到必须的语言1)。 不幸的是,将其映射回关系数据库,意味着我最终得到了一个表,其中有大约10-12个其他表FK(实际上有些表有多个FK)。 这种方法似乎有效,我已经能够使用Hibernate将数据映射到POJO。 关于你唯一不能做的是从Text对象映射到它的父对象(因为你无法知道你应该链接到哪个表),但几乎没有必要这样做。 所以,总的来说这似乎有效,但让多个表像这样引用一个表只是感觉不对。 有人有更好的主意吗? 如果重要我正在使用MySQL …

org.hibernate.MappingException:实体映射中的重复列

我正在做一个简单的民意调查系统。 我有2张桌子: Person :身份证,姓名,姓氏 Vote :ID,投票(布尔),VoterID(实际上是FK_PersonID ),PersonID(这实际上FK_PersonID )。 我需要能够识别谁投票以及投票的对象 – 使用存储在Person表中的Person来满足这些需求。 表Person包含可以“投票”以及“投票”的人的用户详细信息。 人们可以决定是否要为自己投票。 我在我的domain对象中映射了我的表,如下所示: 人 private Integer ID; private String name; private String surname; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “ID”) public Integer getID() { return ID; } public void setID(Integer ID) { this.ID = ID; } @Column(name = “name”) public String getName() { return […]

我应该使用复合主键吗?

在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 } 。 它似乎也是一个相当有限的function,特别是如果连接表中的数据一直在变化,一旦主键序列回绕到0,您就会发现主键冲突。 那么,回到最初的问题,使用复合主键仍然是可以接受的做法吗? 如果没有,为什么不呢?

Cassandra的IN关系对查询有害吗?

给出CQL中以下select的示例: SELECT * FROM tickets WHERE ID IN (1,2,3,4) 给定ID是一个分区键,使用IN关系比做多个查询更好还是没有区别?