设置
所以这里有一个场景,一旦你决定使用 STI(单表继承),我发现它很常见。
您有一些具有各种子类型的基本类型。
在数据库中有两种主要的建模方法:
虽然 STI 有几个问题,但我确实喜欢它如何设法减少您必须进行的连接数量,以及 Rails 等框架中的一些支持,但我遇到了如何关联的问题特定于子类的表。
例如:
使用 CTI,这些关系是微不足道的 - 只需在相关表上设置一个外键即可:
ALTER TABLE advertisements
ADD FOREIGN KEY (seller_id) REFERENCES sellers (id)
但是对于 STI,类似的事情不会捕获子类型限制。
ALTER TABLE advertisements
ADD FOREIGN KEY (seller_id) REFERENCES members (id)
我想看到的是这样的:
* Does not work in most (all?) databases *
ALTER TABLE advertisements
ADD FOREIGN KEY (seller_id, 'seller') REFERENCES members (id, type)
我所能找到的只是一个肮脏的黑客,需要向相关表添加一个计算列:
ALTER TABLE advertisements
ADD seller_type VARCHAR(20) NOT NULL DEFAULT 'seller'
ALTER TABLE advertisements
FOREIGN KEY (seller_id, seller-type) REFERENCES members (id, type)
这让我觉得很奇怪(更不用说不雅了)。
真题
是否有 RDBMS 允许我这样做?
有没有理由为什么这甚至不可能?
这是否只是除最微不足道的情况外不使用 STI 的另一个原因?
最佳答案
没有在外键声明中声明常量的标准方法。您必须命名列。
但是您可以使用以下方法之一强制该列具有固定值:
关于sql - 外键可以有一个常量而不是一个字段名吗?将 FK 与 STI 子类相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13551547/