加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

创建PostgreSQL表关系 – 问题与关系 – 一对一

发布时间:2020-12-13 16:20:39 所属栏目:百科 来源:网络整理
导读:所以我应该完全按照ERD描述的方式创建这种模式关系.在这里,我只显示我遇到问题的表格: 所以我想尝试一对一,但出于某种原因,无论我改变什么,我都会在有外键的任何表上获得一对多. 这是我对这两个表的sql. CREATE TABLE lab4.factory( factory_id INTEGER UNI
所以我应该完全按照ERD描述的方式创建这种模式关系.在这里,我只显示我遇到问题的表格:

所以我想尝试一对一,但出于某种原因,无论我改变什么,我都会在有外键的任何表上获得一对多.

这是我对这两个表的sql.

CREATE TABLE lab4.factory(

            factory_id      INTEGER         UNIQUE,address         VARCHAR(100)    NOT NULL,PRIMARY KEY ( factory_id )

        );

        CREATE TABLE lab4.employee(

            employee_id     INTEGER         UNIQUE,employee_name   VARCHAR(100)    NOT NULL,factory_id      INTEGER         REFERENCES      lab4.factory(factory_id),PRIMARY KEY ( employee_id )

        );

在这里我得到了同样的东西.我不是一对一的关系,而是一对一的关系. Invoiceline是一个弱势实体.

这是我的第二张图片的代码.

CREATE TABLE lab4.product(

            product_id      INTEGER     PRIMARY KEY,product_name    INTEGER     NOT NULL

        );


        CREATE TABLE lab4.invoiceLine(

            line_number     INTEGER     NOT NULL,quantity        INTEGER     NOT NULL,curr_price      INTEGER     NOT NULL,inv_no          INTEGER     REFERENCES      invoice,product_id      INTEGER     REFERENCES      lab4.product(product_id),PRIMARY KEY ( inv_no,line_number )

        );

我将不胜感激任何帮助.谢谢.

一对一没有很好地表示为标准SQL中的第一类关系类型.就像使用连接器表和两个一对多关系实现的多对多一样,SQL中没有真正的“一对一”.

有几种选择:

>创建普通外键约束(“一对多”样式),然后在引用FK列上添加UNIQUE约束.这意味着引用列中不得出现多于一个引用值,使其成为一对一可选项.这是一种相当简单且非常宽容的方法,效果很好.>使用可以模拟1:m的普通FK关系,并让您的应用确保它在实践中只有1:1.我不建议这样做,添加FK唯一索引只有很小的写入性能下降,它有助于确保数据有效性,查找应用程序错误,并避免混淆其他需要稍后修改架构的人.>创建互惠外键 – 仅当数据库支持可延迟外键约束时才可能.这对代码来说有点复杂,但允许您实现一对一的强制关系.每个实体在唯一列中具有对其他PK的外键引用.其中一个或两个约束必须是DEFERRABLE并且是INITIALLY DEFERRED或与SET CONSTRAINTS调用一起使用,因为您必须推迟其中一个约束检查以设置循环依赖关系.这是一种相当先进的技术,绝大多数应用程序都不需要这种技术.>如果您的数据库支持,则使用预提交触发器,这样您就可以验证插入实体A时是否也插入了一个实体B,反之亦然,并相应地检查更新和删除.这可能很慢并且通常是不必要的,而且许多数据库系统不支持预提交触发器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读