标签: one-to-one

有没有时间使用数据库1:1的关系是有道理的?

我前几天正在考虑规范化,而且我想到了,我想不出一个数据库中应该有1:1关系的时间.

名称:SSN?我将它们放在同一个表PersonID:AddressID?同样,同桌.

我可以提出一个很多或者很多的例子:很多(有适当的中间表),但从不是1:1.

我错过了一些明显的东西吗

sql database-design one-to-one database-normalization

157
推荐指数
14
解决办法
3万
查看次数

检查Django中的OneToOneField是否为None

我有两个这样的模型:

class Type1Profile(models.Model):
    user = models.OneToOneField(User, unique=True)
    ...


class Type2Profile(models.Model):
    user = models.OneToOneField(User, unique=True)
    ...
Run Code Online (Sandbox Code Playgroud)

如果用户具有Type1或Type2配置文件,我需要做一些事情:

if request.user.type1profile != None:
    # do something
elif request.user.type2profile != None:
    # do something else
else:
    # do something else
Run Code Online (Sandbox Code Playgroud)

但是,对于没有type1或type2配置文件的用户,执行这样的代码会产生以下错误:

Type1Profile matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

如何查看用户的个人资料类型?

谢谢

python django-models one-to-one

79
推荐指数
4
解决办法
3万
查看次数

使用Entity Framework Fluent API的一对一可选关系

我们希望使用Entity Framework Code First使用一对一的可选关系.我们有两个实体.

public class PIIUser
{
    public int Id { get; set; }

    public int? LoyaltyUserDetailId { get; set; }
    public LoyaltyUserDetail LoyaltyUserDetail { get; set; }
}

public class LoyaltyUserDetail
{
    public int Id { get; set; }
    public double? AvailablePoints { get; set; }

    public int PIIUserId { get; set; }
    public PIIUser PIIUser { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

PIIUser可能有LoyaltyUserDetailLoyaltyUserDetail必须有PIIUser.我们尝试了这些流畅的方法技巧.

modelBuilder.Entity<PIIUser>()
            .HasOptional(t => t.LoyaltyUserDetail)
            .WithOptionalPrincipal(t => t.PIIUser)
            .WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

这种方法没有 …

c# entity-framework one-to-one ef-code-first ef-fluent-api

75
推荐指数
2
解决办法
8万
查看次数

具有共享ID的JPA @OneToOne - 我可以做得更好吗?

我正在使用现有的架构,我宁愿不改变.架构具有表Person和VitalStats,其中人具有主键和VitalStats使用相同的字段作为其两个主密钥及其外键的人,这意味着它的值是对应的PK的值之间的一对一的关系人

这些记录由外部进程创建,我的JPA代码永远不需要更新VitalStats.对于我的对象模型,我希望我的Person类包含一个VitalStats成员,但是:

当我尝试

@Entity
public class Person{
    private long id;
    @Id
    public long getId(){ return id; }

    private VitalStats vs;
    @OneToOne(mappedBy = “person”)
    public VitalStats getVs() { return vs; }
}

@Entity
    public class VitalStats{
     private Person person;
    @OneToOne
    public Person getPerson() { return person; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,即VitalStats没有@Id,这对@Entity不起作用.

如果我试试

@Id @OneToOne
public Person getPerson() { return person; }
Run Code Online (Sandbox Code Playgroud)

解决@Id问题,但要求Person可序列化.我们会回过头来看看.

我可以做VitalStats @Embeddable并通过@ElementCollection连接到人,但那就必须作为一个集合来进行访问,尽管我知道,只有一个元素.可行,但既有点烦人又有点混乱.

那么是什么阻止我只是说Person实现了Serializable?没什么,真的,除了我喜欢我的代码中的所有东西都存在,并且我看不到任何逻辑,这使得我的代码可读性降低.

与此同时,我刚刚用一个很长的人替换了VitalStats中的Person字段并制作了VitalStats的@Id,所以现在@OneToOne正常工作.

所有这些解决方案似乎什么(我)像一个简单的问题是有点笨重,所以我不知道是否我缺少什么,或者是否有人可以至少向我解释为什么人必须是序列化.

TIA

java jpa one-to-one

63
推荐指数
2
解决办法
4万
查看次数

Django Admin:OneToOne关系作为内联?

我正在为一个satchmo应用程序组建管理员.Satchmo使用OneToOne关系来扩展基本Product模型,我想在一个页面上编辑它.

OneToOne关系可以作为内联吗?如果没有,最好的方法是将几个字段添加到我的管理员的给定页面,最终将保存到OneToOne关系中?

例如:

class Product(models.Model):
    name = models.CharField(max_length=100)
    ...

class MyProduct(models.Model):
    product = models.OneToOne(Product)
    ...
Run Code Online (Sandbox Code Playgroud)

我为我的管理员尝试了这个但它不起作用,似乎期待一个外键:

class ProductInline(admin.StackedInline):
    model = Product
    fields = ('name',)

class MyProductAdmin(admin.ModelAdmin):
    inlines = (AlbumProductInline,)

admin.site.register(MyProduct, MyProductAdmin)
Run Code Online (Sandbox Code Playgroud)

这引发了这个错误: <class 'satchmo.product.models.Product'> has no ForeignKey to <class 'my_app.models.MyProduct'>

这是自定义表单的唯一方法吗?

编辑:刚尝试以下代码直接添加字段...也不起作用:

class AlbumAdmin(admin.ModelAdmin):
    fields = ('product__name',)
Run Code Online (Sandbox Code Playgroud)

python django inline one-to-one django-admin

61
推荐指数
3
解决办法
3万
查看次数

Hibernate:一对一延迟加载,可选= false

我遇到的问题是一对一的延迟加载在休眠中不起作用.我已经解决了,但仍然没有正确理解会发生什么.

我的代码(延迟加载在这里不起作用,当我拉人 - 地址也被提取):

@Entity
public class Person{

  @Id
  @SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
  @Column(name = "id")
  private long personID;

  @OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
  private Adress address;
  //.. getters, setters
}

@Entity
public class Address {

  @Id
  @Column(name="id", unique=true, nullable=false)
  @GeneratedValue(generator="gen")
  @GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
  private long personID;

  @PrimaryKeyJoinColumn
  @OneToOne
  private FileInfo person;
}
Run Code Online (Sandbox Code Playgroud)

但是:如果我添加optional=falseOneToOne关系,延迟加载工作正常!

@OneToOne(mappedBy="person", cascade=CascadeType.ALL, …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa lazy-loading one-to-one

58
推荐指数
2
解决办法
5万
查看次数

MySQL - 一对一的关系?

现在我知道有一对一关系的答案,但他们都没有回答我的问题,所以请在下来之前阅读这个:)

我试图在MySQL数据库中实现一对一的关系.例如,假设我有"用户"表和"帐户表".我想确定用户只能拥有一个帐户.并且每个用户只能有一个帐户.

我找到了两个解决方案,但不知道该使用什么,还有其他选择.

第一解决方案

DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARSET = utf8 COLLATE = utf8_general_ci;
USE test;

CREATE TABLE users(
    id INT NOT NULL AUTO_INCREMENT,
    user_name VARCHAR(45) NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

CREATE TABLE accounts(
    id INT NOT NULL AUTO_INCREMENT,
    account_name VARCHAR(45) NOT NULL,
    user_id INT UNIQUE,
    PRIMARY KEY(id),
    FOREIGN KEY(user_id) REFERENCES users(id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Run Code Online (Sandbox Code Playgroud)

在此示例中,我在指向用户主键的帐户中定义外键.然后我将外键设为UNIQUE,因此帐户中不能有两个相同的用户.要连接表,我会使用此查询:

SELECT * FROM users JOIN accounts ON users.id …
Run Code Online (Sandbox Code Playgroud)

mysql sql database database-design one-to-one

54
推荐指数
2
解决办法
4万
查看次数

什么是Django中的OneToOne,ManyToMany和ForeignKey字段之间的区别?

我在Django模型中解决关系时遇到了一些困难.

有人可以解释OneToOne,ManyToMany和ForeignKey之间的区别吗?

python django many-to-many one-to-one foreign-key-relationship

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

如何在SQL Server中创建真正的一对一关系

我想在SQL Server 2008 R2中创建一对一的关系.

我有两个表tableAtableB,我设置tableB的主键的外键引用其中tableA的首要.但是当我首先使用Entity Framework数据库时,模型是1到0..1.

任何人都知道如何在数据库中创建真正的1对1关系?

提前致谢!

sql sql-server entity-framework one-to-one

40
推荐指数
5
解决办法
12万
查看次数

django OneToOne反向访问

我有这些简单的课程

Class A(models.Model):
    ...

Class Meta(models.Model):
    a = models.OnetoOneField(A, primary_key=True)
    width = models.IntegerField(default=100)
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

a = A()
meta = Meta()
a.save()
meta.a = a
meta.save()
print a.meta.width
Run Code Online (Sandbox Code Playgroud)

我明白了

'A' object has no attribute 'meta'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我使用OneToOne错了吗?如果是这样,我怎么能得到正确的印刷声明?

谢谢

database django one-to-one

37
推荐指数
1
解决办法
2万
查看次数