PostgreSQL:如何实现最小基数?

2024-01-07

正如这个问题中的回答:PostgreSQL 中的基数 https://stackoverflow.com/questions/3135206/cardinality-in-postgresql,基数是使用强制执行的限制条件 http://www.postgresql.org/docs/9.1/static/ddl-constraints.html.

基数规则定义了允许的关系数量——一对多、多对多等。多对多是使用连接表实现的,一对多是使用外键实现的。

但是如何实现一对一或多(一对一+)关系。这与问:如何在 PostgreSQL 中强制执行最小基数?

一种实际情况是,需要存储个人(例如用户或客户)必须提供的地址(或电话号码)(但可以不止一个)。

Edit:

上述情况是一般问题的一个特例(基数为一)。一般问题是:如何强制任意数的基数?

As 壶回答了 https://stackoverflow.com/questions/9249660/postgresql-how-to-implement-minimum-cardinality/9251536#9251536 a non-null如果最小基数为 1,则可以使用 FOREIGN KEY 引用作为解决方法。它还将提供一个附加功能来在众多功能中选择默认值。

但考虑另一种情况team of Cricket http://en.wikipedia.org/wiki/Cricket和它的players。每支球队必须至少有 11 名球员才能获得团队资格。这里的最小基数是十一 (11)。

类似地,a 之间的关系course and a student在一所学校中,每个学生必须注册至少 5 门课程,并且每门课程必须至少有 10 名学生。


无法使用 CHECK 约束来指定这一点,所以我认为最好的方法是触发器:

http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html
http://www.postgresql.org/docs/9.1/static/plpgsql-trigger.html http://www.postgresql.org/docs/9.1/static/plpgsql-trigger.html

你最终会得到类似的结果(我还没有测试过它或任何东西):

CREATE TRIGGER at_least_one before INSERT, UPDATE, DELETE ON the_one_table  FOR EACH ROW EXECUTE PROCEDURE check_at_least_one();

CREATE OR REPLACE FUNCTION check_at_least_one() RETURNS trigger AS $$
    BEGIN
    nmany := select count(*) from the_many_table where the_many_table.the_one_id=NEW.id;   
    IF nmany > 0 THEN 
        RETURN NEW;
    END IF;
    RETURN NULL;
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL:如何实现最小基数? 的相关文章

随机推荐

  • 在 IMAP 中创建文件夹不起作用

    我正在努力在 IMAP 中创建一个文件夹 我正在使用 gmail 到目前为止 这是我尝试过的 public boolean createFolder String folderName throws MessagingException s
  • 声明式与编程式 GraphQL

    我正在将 GraphQL 用于新的全栈项目 并且我已经研究了许多概念并开始了我的第一个项目 我的问题与使用声明式与编程式 GraphQL 架构定义有关 基本上我能看到的都在GraphQL 官方网站 http graphql org 使用声明
  • 使用 Interface Builder 检测 UIView 上的触摸

    如何检测触摸UIviewController for a UIView仅使用代码 没有 Interface Builder 我找到了 TouchBegan 方法 但它从未被调用过 我没有初始化有关此方法的任何其他内容 void touche
  • 是否可以在不登录的情况下冒充用户?

    是否可以在不提供用户名 密码的情况下模拟用户 基本上 我想得到CSIDL LOCAL APPDATA对于使用以下命令的用户 不是当前用户 ShGetFolderPath 功能 我目前拥有的只是该用户的 SID 您可以通过调用 ZwCreat
  • Nodejs - HTTP 范围支持/部分文件下载

    我正在创建一个音乐网络应用程序 用于流式传输我存储在 MongoDB GridFS 中的 MP3 我的问题 如何添加 http 范围支持 以便我可以开始流式传输音频文件 1 2 而无需等待缓冲区 我知道GridFS支持读取X字节 X字节 所
  • 为什么选择 UnityEvent 而不是本机 C# 事件?

    我的意思是 UnityEvents 比原生 C 事件慢 并且它们仍然存储对接收器的强引用 因此 我发现使用 UnityEvents 而不是原生 C 事件的唯一有效原因是它们与编辑器的集成 我是否忽略了什么 我是否忽略了什么 不 你没有忽视任
  • Java - 将二进制解析为长整数[重复]

    这个问题在这里已经有答案了 我有一个数字的二进制表示形式 想将其转换为 long 我有 Java 8 public class TestLongs public static void main String args String a L
  • Android WebView 下载不工作

    我创建了一个包含 html 表单页面的 Web 视图 在提交表单 使用 post 方法 时 它应该下载该文件 我已经实施了webview download listener这样我就可以处理下载了 Override public void o
  • 如何手动创建 UISplitView?

    我有一个应用程序将导航到 UISplitView 完全在另一个视图内 如下所示 void switchToMyDayView NSLog Show My Day Screen if self myDayController view sup
  • Dart 中用于获取数据类型大小的函数/运算符

    我想知道 Dart 中分配给不同数据类型的内存量 但我找不到函数 运算符 例如sizeofC 中的运算符来执行此操作 我已经提到了dart core为此目的图书馆 但仍然找不到任何合适的方法 那么 是否有其他方法可以获取数据类型的大小 或者
  • 使用 SymPy 求解方程组

    我正在尝试使用 SymPy 0 7 1 求解一组方程 from sympy import equations Eq S vf S vi a t Eq S d S vi t 1 2 a t 2 Eq S a S 10 Eq S d S 60
  • BASH 在变量非文件中提取字符串后的值[重复]

    这个问题在这里已经有答案了 我发现了一个无法解决的奇怪问题 我需要提取变量中的一些值 这些值位于字符串后面 本例中变量的名称是 DSLSTATE 这是其中值的示例 NewEnable 1 NewStatus Up NewDataPath F
  • 使用 matplotlib 在 qiskit 中可视化电路

    我正在学习如何使用 qiskit 并且正在使用 jupyter 笔记本 但是每次我尝试使用属性绘制来可视化电路时 我都会收到此错误 import qiskit from qiskit import from qiskit import IB
  • 如何在 Linux、Mac 和 Windows 上从 Java 启动 .NET 应用程序?

    我想从 Java 环境的上下文中启动 NET 应用程序 与 Mono 兼容 我的猜测是 我必须以某种方式确定是否安装了 mono 找到位置并使用 NET 应用程序路径作为参数启动它 但什么是可靠的方法呢 或者 还有更好的方法 也许我应该澄清
  • 按HOME后重新启动应用程序时如何返回到最新启动的活动? [复制]

    这个问题在这里已经有答案了 熟悉的场景 我有一个Main启动的活动Game按下按钮时的活动 如果用户按 HOME 然后再次启动我的应用程序 则应显示GameActivity 这是他最后一次使用该应用程序时所做的事情 然而 相反发生的事情是他
  • 为什么 div 会有这样的行为?

    有时我的 div 会出现这个问题 无法按预期运行 我想要的是让它们按照我的理解 流动 布局 但它们不是 我只是想知道为什么不 我已经使用 firebug 来检查 css 似乎没有任何不符合规范的内容 但它们并没有一个接一个地流动 我提供了两
  • 在领域驱动设计中,您可以在 UI 中使用领域实体吗?

    在许多领先的 DDD 项目中 尤其是 MVC 风格 我看到 UI 使用镜像域实体的显示对象 而不是直接使用这些域对象 这种风格显然是为了解耦和分离关注点 我个人更喜欢这种风格 但我不确定这是否是 DDD 的严格原则 或者这是否只是不同开发人
  • 我需要做直方图拉伸

    我有一个 BitmapFrames 数组 需要进行直方图拉伸 我知道这与直方图均衡不同 最终结果是什么 有点 问题是我完全不知道得到直方图后该怎么做 到目前为止 我的代码为直方图创建了一个数组 因此我知道每个值有多少个像素 但在那之后我不知
  • 让semantic_errors呈现准确的错误消息

    我有一个模型Camping which has many Images 露营至少需要一张图片 class Camping lt ActiveRecord Base attr accessible images attributes has
  • PostgreSQL:如何实现最小基数?

    正如这个问题中的回答 PostgreSQL 中的基数 https stackoverflow com questions 3135206 cardinality in postgresql 基数是使用强制执行的限制条件 http www p