【问题标题】:Class design for relationships关系类设计
【发布时间】:2012-04-02 23:14:21
【问题描述】:

考虑以下表格和 java 类来表达我寻求解决方案的问题 -

具有列 id、name 的 CITY 表。 Java 类 City 具有 id 和 name 属性。

COUNTRY 表具有列 id、name。 Java 类 Country 具有 id 和 name 属性。

USER 表具有列 id、name、city_id、country_id,其中 city_id 是 CITY 表中的 FK,country_id 是 COUNTRY 表中的 FK。 Java 类 User 具有 id、name、cityId 和 countryId 属性。

现在在 UI 上无法为用户记录显示 cityId 和 countryId 而是显示为 Id 的名称对用户来说毫无意义。那么我的用户类设计是否正确?设计应该是什么?它应该是 City 和 Country 对象而不是 cityId 和 countryId 吗?另外我应该如何加载所需的数据?

想象一下对于表具有更多列的复杂系统也是如此。复杂系统的设计规模如何?因为我并不总是需要整个对象,所以大多数时候只有名称就足够了。

【问题讨论】:

    标签: relationship foreign-key-relationship


    【解决方案1】:

    首先,您的设计听起来不正确。一个城市应该属于一个国家,用户不需要直接引用一个国家,因为用户的国家可以通过他们的城市访问。

    但要解决内存使用问题:您有多种选择。通常,如果您查看数字,城市和国家的总数并不多,因此您可以简单地使用指向对象的直接链接。我有应用程序将这些“相关信息”类连续保存在内存中 - 这可以减少读取和写入重要数据(如人)时的流失量。

    或者,您可以使用单独的(只读)位置属性(不可修改或写入磁盘)扩展用户类,该属性在读取时通过将城市和国家名称连接为字符串来填充。然后你读取人物,填充该字段,但不填充城市和乡村对象(或让它们变得懒惰)。这使您无需将所有对象都加载到内存中即可显示数据(但您仍然需要字符串的内存成本)。

    或者,如果您真的很想获得空间,您可以将位置检索作为显示本身的一部分,并且仅检索和显示在显示中可见的人的位置。但这需要做很多工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多