同一实体内的属性与查询/视图之间的关系

时间:2019-01-04 21:41:02

标签: sql postgresql relationship entity-relationship

我们有一个实体users,其属性为idname。如何使用规则“实现”这些用户之间的关系:

  • 用户可以有一个关系ex。 lovermarriedengaged,其中 另一个用户
  • 应该没有重复的内容(Jack AnneAnne Jack
  • 用户无法与自己建立关系
  • 您认为合乎逻辑的任何其他

this is solely made up, just me learning db

所以我制作了这个ER图,蓝线是我设置为唯一/替代键的

enter image description here

DB-Fiddle

  1. 这是正确的方法还是我把所有方法放错了?
  2. 如何解决这种反向唯一性?万一你错过了,我可以放 杰克·安妮(Jack-Anne)恋人,安妮·杰克(Anne-Jack)结婚,甚至杰克·杰克(Jack-Jack)(带身份证)。一世 可以使用CHECK约束不等于1或使用较小的id(其中 不能与uuid一起使用)。但是有更好的方法吗?是这个的答案, 在插入时在前端执行整个逻辑?
  3. 对于视图,我得到了正确的结果,但是可以做到这一点 '更好'?我只想显示users_relationshipusers.namerel_type.type

谢谢,欢迎提出任何建议/建议!

1 个答案:

答案 0 :(得分:1)

  1. 是的,这是个好方法,至少3NF。

  2. 为避免对称重复,请在表users_relationship中添加一个额外的约束,如下所示:

    create table users_relationship (
      column1 definition,
      column2 definition,
      ...
      contraint uq_pair check (users_id < users_2_id)
      ...
    );
    
  3. 是的,看起来不错。