Possible Duplicate:
Is there ever a time where using a database 1:1 relationship makes sense?

为了简单起见,我将直截了当地问一个问题:在数据库设计中应该避免一对一关系,还是可以接受?

我知道这个"项"的所有属性都可以托管在一个表中,但我觉得当通过ORM将我的数据库设计转换为业务对象时,它会用不必要的属性扰乱实体.

通过UI,希望这将描绘一幅更好的图景,我有一个具有所有必要属性的主窗体.我将有一个按钮,将允许用户点击它,它将带来一个新的表单附加额外的属性.不能有超过1个条目从属于主窗体(实体),即它是0..1结束关系.

任何建议都将不胜感激.

推荐答案

不,1:1的关系完全有意义.

设想一个实体有一个可选的装满属性的桶-您的一些实体具有这些属性,而另一些实体没有这些属性.

您可以将所有这些属性作为列包含到实体表中-但在这种情况下,对于大量条目,许多列最终将为空.

或者:您可以将这些"可选"属性放在一个单独的表中,与基本实体表建立1:1(or rather: 0:1)的关系,并且仅当您的实体确实具有这些属性时,才在其中存储内容.

决定是否将某些属性"外包"到单独的表中的主要标准是:

  • 这涉及到多少属性?如果只有一两个,不要千方百计把它们放在不同的表格里.但是如果你说的是8, 10, 15——那么考虑一下

  • how many of the base entities might have those optional attributes? Again: if 95% of all entities will always have all those attributes anyway, then it doesn't make sense to do this extra step. If only half or less of your entities will have those attributes -> I would definitely consider such a table

Database相关问答推荐

如何正确创建mongo模型和客户端?

在 model.save() 中处理竞争条件

多列上的全文索引如何工作?

在 Oracle 中查找数据库的大小

docker-compose mysql init sql 未执行

阿拉伯字符串上的 WHERE 子句匹配问题

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

内存数据库和磁盘内存数据库的区别

不同的数据库是否使用不同的名称引用?

PostgreSQL - 将每个表转储到不同的文件中

更改列类型而不丢失数据

如何在磁盘上布局 B-Tree 数据?

是什么导致pyodbcunable to connect to data source?

MySQL是否允许使用点创建数据库?

PostgreSQL 唯一索引和字符串大小写

Python中准备好的语句和参数化查询之间的混淆

SQLite3 数据库的最大连接数是多少?

查询以查找列的 nᵗʰ 最大值

在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

如何在数据库中表示树状 struct