标签: natural-key

Hibernate中的自然标识符是什么?

在阅读Hibernate文档时,我不断看到对自然标识符概念的引用.

这是否仅仅意味着实体所具有的id由于其所拥有的数据的性质?

例如,用户的姓名+密码+年龄+某些东西被用作复合识别符?

java orm hibernate jpa natural-key

19
推荐指数
4
解决办法
1万
查看次数

关系数据库设计问题 - 代理键还是自然键?

哪一个是最佳实践,为什么

a)类型表,代理/人工密钥

外键是user.typetype.id: 替代文字

b)类型表,自然键

外键是user.typetype.typeName: 替代文字

sql database-design data-modeling surrogate-key natural-key

13
推荐指数
2
解决办法
2983
查看次数

是否可以在Django中使用GenericForeignKey的自然键?

我有以下内容:

target_content_type = models.ForeignKey(ContentType, related_name='target_content_type')
target_object_id = models.PositiveIntegerField()
target = generic.GenericForeignKey('target_content_type', 'target_object_id')
Run Code Online (Sandbox Code Playgroud)

我想dumpdata --natural为这种关系发出一个自然的关键.这可能吗?如果没有,是否有一种替代策略不会将我绑定到目标的主键?

django natural-key generic-foreign-key

8
推荐指数
1
解决办法
1058
查看次数

用户的唯一标识符

如果我有一百个用户的表通常我会设置一个自动增量userID列作为主键.但是,如果突然我们有一百万用户或500万用户那么这变得非常困难,因为我希望开始变得更加分散,在这种情况下,自动增量主键将是无用的,因为每个节点将创建相同的主键.

解决方案是使用自然主键吗?我真的很难想到这群用户的自然主键.问题是他们都是年轻人,所以他们没有国家保险号码或我能想到的任何其他唯一标识符.我可以创建一个多列主键,但仍有机会,但重复次数发生微不足道.

有谁知道解决方案?

谢谢

sql primary-key natural-key

7
推荐指数
2
解决办法
270
查看次数

自动生成自然键

我正在研究一种方法来序列化数据库A中的部分数据并在数据库B中对其进行反序列化(在不同安装之间进行一种保存/恢复)并且我已经看过Django 自然键以避免由于重复ID导致的问题.

唯一的问题是我应该为我的所有模型添加自定义管理器和新方法.有没有办法让Django通过查看unique=Trueunique_togheter字段自动生成自然键?

django django-models natural-key

7
推荐指数
1
解决办法
879
查看次数

get_by_natural_key和natural_key之间的区别

据我所知,模型管理器的get_by_natural_key用于反序列化,而natural_key用于序列化.这是真的 ?如果不是,有什么区别?

而且,我们是否需要始终提供 - 自然 - 外国和 - 自然 - 主键?有没有办法强制通过自然键序列化/反序列化?

django django-models natural-key python-2.7

6
推荐指数
1
解决办法
3497
查看次数

Django:通用外键dumpdata:无法解析依赖项

我使用通用外键将不同的配置文件与我Users继承的模型相关联auth.User.dumpdata虽然通过了--natural选项,但我无法做到.它说,

错误:无法解析序列化应用程序列表中myproject.AdminProfile,myproject.TeacherProfile,myproject.Users的依赖项.

根据文档,据说我们需要实现natural_key方法来获取和闪存涉及通用关系的灯具.我怎么能用这里展示的模型做到这一点?

class Users(User):
    location = models.TextField('Location', blank=True)
    created_by = models.ForeignKey('self', null=True, blank=True, related_name='created_by_user')

    # Generic foreign key setup to hold the extra attributes
    profile_contenttype = models.ForeignKey(ContentType, null=True, blank=True)
    profile_object_id = models.PositiveIntegerField('Extra ID', null=True, blank=True)
    profile_object = generic.GenericForeignKey('profile_contenttype', 'profile_object_id')


class AdminProfile(models.Model):
    organization = models.CharField('Organization', max_length=100)

    # profile reverse relation to get the user
    users_link = generic.GenericRelation('Users', content_type_field='profile_contenttype',
                                         object_id_field='profile_object_id')

class TeacherProfile(models.Model):
    designation = models.CharField('Designation', max_length=100)

    # profile reverse …
Run Code Online (Sandbox Code Playgroud)

generics django foreign-key-relationship natural-key dumpdata

5
推荐指数
1
解决办法
1619
查看次数

模型管理员可以访问其模型的Meta属性(`Meta.unique_together`)吗?

这是我对广义自然键模型管理器的尝试.它就像文档,除了它尝试(不成功)从Meta.unique_together属性确定自然键字段名称.

class NaturalKeyModelManager(Manager):

    def get_by_natural_key(self, *args):
        field_dict = {}
        for i, k in enumerate(self.model.Meta.unique_together[0]):
            field_dict[k] = args[i]
        return self.get(**field_dict)
Run Code Online (Sandbox Code Playgroud)

如果我在for循环之前插入调试打印,如下所示:

print dir(self.model.Meta)
Run Code Online (Sandbox Code Playgroud)

它根本没有列出unqiue_together属性:

['__doc__', '__module__', 'abstract']
Run Code Online (Sandbox Code Playgroud)

"抽象"有点让我担心,但另一个调试打印显示我尝试使用自然键管理的模型不是抽象的:

>>> print self.model.Meta.abstract
False
Run Code Online (Sandbox Code Playgroud)

我混合了很多抽象基类.这可能是问题吗?

class MixedModel(NamedModel, TimeStampedModel, VersionedModel, Model):
    objects = NaturalKeyModelManager()

    class Meta:
        unique_together = (('name', 'version',),)
Run Code Online (Sandbox Code Playgroud)

为了完整性,这里是mixins之一:

class TimeStampedModel(Model):
    created = DateTimeField(_("Created"),     auto_now_add=True, null=True, editable=False)
    updated = DateTimeField(_("Updated"),     auto_now=True,     null=True, editable=True)

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

硬编码模型管理器工作得很好:

class MixedModelManager(Manager):
    def get_by_natural_key(self, name, version):
        return self.get(name=name, version=version)
Run Code Online (Sandbox Code Playgroud)

django metaclass django-models natural-key

5
推荐指数
1
解决办法
5501
查看次数

使用Hibernate的@NaturalId查找对象的优点

使用Hibernate的@NaturalId查找对象有什么好处吗?

我担心Hibernate使用@NaturalId执行两个查询以获取对象这一事实.第一个查询只是为了获取id和第二个查询来加载真实对象.

java orm caching hibernate natural-key

5
推荐指数
1
解决办法
1823
查看次数

当"父"表具有复合PK时,如何在JPA中建模一对一关系?

虽然有很多关于如何建模的信息,在JPA(2)中,一对一的关系 具有自然键实体,我还没有找到一个明确/简单的答案如何建模我们有两者的情况,即父表具有自然键的一对一关系.很明显,我可能错过了这样一个教程; 如果是这样的话,指点一个也可能就是答案.

而且,就像JPA和我这样的新手一样多次,当一个人需要比最基本的模型更多的时候,人们很快就会碰壁.

因此,考虑以下DB模型:

在此输入图像描述

相应的JPA注释对象模型是什么?(因为我不想影响答案,所以我不遗余力地帮助你们了...)

也欢迎性能建议(例如"一对多可以更快地执行"等)!

谢谢,

java hibernate jpa one-to-one natural-key

4
推荐指数
1
解决办法
2216
查看次数