1
5
在父表中,对(id、版本)创建唯一约束。将version列添加到子表中,并使用检查约束确保它始终为0。使用FK约束将(parentid,version)映射到父表。 |
2
2
或者,您可以为具有历史价值的数据维护个人历史记录表。通过这种方式,您可以保持您的人员和狗表整洁,参考资料简单,但也可以访问历史上有趣的信息。 |
3
1
好的,首先你需要规范化你的表。谷歌“数据库规范化”,你会得到大量的阅读资料。人员表尤其需要注意。 第二件事是,当您创建外键引用时,99.999%的时间您希望引用ID(数字)值。也就是说,[DOGS].[owner]应该是对[PERSONS].[id]的引用。 编辑:添加示例模式(请原谅松散的语法)。我假设每只狗只有一个主人。这是 实现个人历史的方法。所有列都不是空的。
最新版本的数据将直接存储在Persons表中,较旧的数据存储在PersonHistory表中。 |
4
0
我将使用和关联表将多个版本链接到一个pk。 |
5
0
我参与的一个项目解决了一个类似的问题。这是一个生物记录数据库,随着新的研究提高了对分类学的理解,物种名称可以随着时间的推移而改变。
|
6
0
珀森斯
PersonVersionInfo
UID(标识人员+版本的唯一标识符),
狗
多吉德,
带狗的人
编辑:你必须加入PersonWithDogs,PersonVersionInfo,Dogs才能获得完整的图片(从今天开始)。这种结构将帮助你把狗和主人联系起来(有一个特定的版本)。
您的场景(可以更改的内容/限制等)将有助于更好地设计模式。 |
7
0
解决方案1 在PERSONS表中,我们只保留名称(唯一标识符)和指向的链接 现在的 个人资料:
我们创建一个新表PERSONS_DATA,其中包含该人员的所有数据历史记录:
优点:对于每只狗,至少有一个PERSONS\u数据行包含其所有者的数据(这就是我想要的) 缺点:如果你想更改某人的数据,你必须:
|
8
0
解决方案2
我们创建一个新表PERSONS_DATA,其中包含该人员的所有数据历史记录:
优势:
缺点:要检索当前人员的数据,我必须:
|
Davtho1983 · 在Django中查看ForiegnKey数据 6 年前 |
N_M · 主键和外键约束在配置单元中如何工作? 6 年前 |
Melolailo · 将约束与外键一起使用 6 年前 |
Alfred Balle · Postgresql,对唯一约束的引用 6 年前 |
yodabar Arkana · 更新|删除外键时的PgSQL默认操作 6 年前 |
Seba · 如何检查外键以限制软删除? 6 年前 |
dryhay · MySQL“多对多”关系错误 6 年前 |