Tag: 数据库设计

Spring Boot:如何使用多个模式并动态选择在运行时为每个请求使用哪个模式

前提:我选择这样做是因为我最终可能会有几千个模式,每个模式都有(其中包括)1个表和几百万个条目。 另一种方法是在一个模式中拥有一个表,其中包含几十亿个条目。 详细阐述这个问题的最好方法是提供一个简单的例子。 考虑以下: User.java @Entity(name = “user”) public class User { @Id @GeneratedValue @Column(name = “id”) private Long id; @Column(name = “username”) private String username; // getters and setters… } UserDao.java @Repository public interface UserDao extends CrudRepository {} UserService.java public interface UserService { User getUser(Long id); } UserServiceBean.java @Transactional @Service public class UserServiceBean implements […]

Hibernate中基本类型的ArrayList

我有一个关于整数的ArrayList或一般的原始类型的问题。 假设我正在设计一个POS程序,每个产品可能有几个价格。 假设我可以用int表示价格值,而在Product类中我有字段ArrayList prices 。 使用Hibernate进行映射的最佳方法是什么? 我可以将它映射到product_prices表,其中包含一个包含价格值的字段和一个引用相关产品的外键字段,但这似乎有点过分。 另一方面,我可以在String连接所有价格并将其存储在products表中的字段中,例如,用分号分隔价格。 这样我就可以保存一个表和一个未来的select ,但它似乎并不是OO。 这里最好做什么?

约会和订单项

我正在构建一个管理应用程序来帮助管理我的移动汽车细节公司(并希望其他人)。 我正在努力弄清楚如何建模一些数据。 这个问题与我发布的上一个问题有关,但我已经复制了以下相关信息: 数据库设计 – 谷歌应用程序引擎 在这个应用程序中,有“约会”和“行项目”的概念。 预约是指员工需要提供服务的地点和时间。 订单项是服务,费用或折扣及其相关信息。 可能进入约会的订单项示例: 名称:价格:佣金:时间估计详细资料,常规尺寸:160 75 3.5小时$ 10全部详情优惠券:-10 0 0小时Premium详情:220 110 4.5小时派生总数(不是专项):$ 370 $ 185 8.0小时 在我之前的此应用程序实现中,行项目由一个约会包含。 这在大多数时候都很好,但有时会引起问题。 一个例子是如果一个约会因为下雨而中途中断,技术人员必须在第二天回来并完成。 这种情况需要对同一个订单项进行两次约会。 在这种情况下,我只是通过将第二个约会上的“行项目”设置为“完成”这样的内容来稍微捏造数据,然后成本为0美元。 在下一个版本中,我正在考虑启用行项目与多个约会匹配,表格结构如下所示: Appointment start_time etc… Line_Item appointment_Key_List name price etc… 这种结构的一个普遍问题是它很复杂,我甚至不确定它是否适合将一个订单项与多个约会相匹配。 如果行项目只能作为一个约会的一部分,那么我实际上只需在每个约会中放置一个行项目列表,当我得到约会时,我已经获得了行项目。 一个更具体的问题是我正在使用谷歌应用引擎,如果我想查询一组约会及其相关的订单项,我必须首先查询约会集,然后再对该行进行第二次查询使用IN运算符测试任何Line_Item的约会密钥是否属于从上一个查询返回的约会密钥集的项目。 如果我有超过30个密钥要求我对查询进行分片,则第二个查询将失败。 我可以对数据进行非规范化以避免这种复杂而广泛的读取查询,并且我可能不得不在某种程度上反规范化,但我宁愿在适当的地方避免复杂性。 我的问题是这种情况通常是如何建模的? 是否适合将订单项与多个约会配对,或者将每个约会的订单项拆分为单独的约会是正常的,例如“2天工作的上半部分”和“2天工作的下半部分” “。 类似的成功应用如何做到这一点? 在这种情况下有哪些经验法则? 哪些实施变得不那么成问题? 谢谢!

JPA:外键注释

我有两个数据库实体: Forum和Topic 。 Topic已经protected long forumId数据成员,这当然表明了Topic论坛。 我的问题是这个数据成员使用的注释是什么?

Hibernate的每子类表inheritance策略的效率

我正在考虑Hibernate管理的类层次结构的表布局,当然每个子类技术的表格在一般意义上都是最合适的。 但是,通过逻辑思考我对其性能有一些担忧,特别是随着子类数量的增加。 为了给出一个非常简短(和经典)的例子,假设您有以下类: public abstract class Animal { int pkey; String name; } public class Dog extends Animal { long numSlippersChewed; // int is not large enough… } public class Cat extends Animal { short miceCaught; // … but here int is far bigger than required 🙂 } (我正在消除getter和setter以及Hibernate映射等,只是假设它们是基本明显的情况)。 这些实体的数据库表是有意义的,你得到了很好的非规范化等等。 但是,Hibernate为了掏出一只动物做了什么查询呢? 我可以想到至少有两种可能发生这种情况的情况: 一些其他实体具有一对一(或一对多)映射,例如Human类的pet字段。 这将存储pkey,因此当Hibernate获取Human对象时,它也需要获取相应的Animal对象。 当给出动物的密钥时,Hibernate将使用什么查询(/ […]

实现twitter和facebook就像hashtags一样

这可能看起来很愚蠢..而且没有研究的问题,但相信我不是。 我做了一些研究。 其中一个将是以下链接: http : //www.quora.com/Twitter-1/How-does-Twitter-implement-hashtags 此外,我不是在寻找一个完整的解决方案..我会努力工作,但我只需要一些指导,只想知道我应该采用哪种方式? 我想实现twitter,现在甚至像我的应用程序的hash标签一样。所以用户可以添加带有主题标签的消息,而其他人可以搜索它们…就像趋势和相关内容一样。 我们在存储技术堆栈中使用Mysql,mongo和elasticsearch。 任何想法我怎么能开始实现这个? 我需要另一个存储空间吗? 一种方法是我可以将我的hastags存储在db中,然后在Elasticsearch中对它们进行文本搜索。 在这个领域有更多经验的人可以在这里提出什么建议?

为每个INSERT增加表ID的值

我正在使用PostgreSQL设置所有表格。 我目前有一个名为comments的表,其中一个名为comment_id的主键是一个长度为4的VARCHAR 。 我有一个表单设置插入一个新的注释到数据库但我很困惑,我将如何从我之前的值获取我的Java servlet ++的comment_id。 例如0001到0002。

实体字段和数据库表列的命名约定的最佳实践

我正在使用hibernate来创建实体和数据库表,我对命名约定感到困惑: 让我们举一个例子: 我们有一个部门实体如下: public class Department { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = “department_id”, unique = true, nullable = false) @Basic(fetch = FetchType.EAGER) private long id; @NotBlank(message = “{name.required}”) @Size(max = 25, message = “{long.value}”) @Column(name = “department_name”, length = 25, nullable = false) private String name; @Column(name = “department_admin_id”, nullable = true) private Integer […]

Hibernate:复合PK与Surrogate PK的观点

据我了解,每当我在JPA / Hibernate实体内的Long字段上使用@Id和@GeneratedValue时,我实际上使用的是代理键,我认为这是一种非常好的方法来定义主键,考虑到我不是 – 使用复合主键的良好体验,其中: 有超过1个业务价值列组合成为独特的PK 复合pk值在表详细信息中重复 无法改变复合PK内部的业务价值 我知道hibernate可以支持这两种类型的PK,但我不知道我之前与经验丰富的同事聊天,他们说复合PK在执行复杂的SQL查询和存储过程进程时更容易处理。 他们继续说,当使用代理键时,在加入时会使事情变得复杂,并且在使用代理键时不可能做某些事情时有几种情况。 虽然我很抱歉我不能解释这里的细节,因为当他们解释时我还不够清楚。 也许下次我会提供更多细节。 我目前正在尝试做一个项目,并希望尝试代理键,因为它不会在表之间重复,我们可以更改业务列值。 而当需要一些商业价值组合的独特性时,我可以使用类似的东西: @Table(name=”MY_TABLE”, uniqueConstraints={ @UniqueConstraint(columnNames={“FIRST_NAME”, “LAST_NAME”}) // name + lastName combination must be unique 但由于之前关于复合键的讨论,我仍然存在疑问。 你能分享一下这方面的经验吗? 谢谢 !

Hibernate中的三元(和n-ary)关系

问1)我们如何使用Hibernate建模三元关系? 例如,我们如何使用Hibernate(或JPA)对这里呈现的三元关系进行建模? 注意 :我知道JPA 2添加了一些用于使用地图构建三元关系的构造。 但是,这个问题假设JPA 1或Hibernate 3.3.x并且我不喜欢使用map来对此进行建模。 ER模型http://sofzh.miximages.com/java/image043.gif 替代三元关系的ER模型http://sofzh.miximages.com/java/image045.gif 理想情况下,我更喜欢我的模型: class SaleAssistant { Long id; //… } class Customer { Long id; //… } class Product { Long id; //… } class Sale { SalesAssistant soldBy; Customer buyer; Product product; //… } 问1.1) 我们如何对这种变化进行建模,其中每个Sale项目可能包含许多产品? class SaleAssistant { Long id; //… } class Customer { […]