我试图用外键引用一个视图,但我收到此错误:
"错误:ORA-02270:此列列表没有匹配的唯一键或主键"
但是,我在此视图上创建了一个主键,并在TOAD的Constraints选项卡中对其进行了验证.
这是我试图创建的表:
CREATE TABLE QUESTION
(
QUESTION_ID INTEGER not null,
CREATED_USER_ID INTEGER not null,
CONSTRAINT PK_QUESTION PRIMARY KEY (QUESTION_ID),
CONSTRAINT FK_USER
FOREIGN KEY (CREATED_USER_ID)
REFERENCES SOME_VIEW(VIEW_ID)
);
Run Code Online (Sandbox Code Playgroud)
SOME_VIEW是基于另一个视图的视图,该视图指向另一个模式中的employee表.
我正在设计一些将共享2或3个数据库表的应用程序,所有其他表将独立于每个应用程序.共享数据库主要包含用户信息,可能会出现需要共享其他表的情况,但这是我的本能.
我倾向于所有应用程序解决方案的一个数据库,因为我希望具有参照完整性,并且我不必在每个数据库中保持最新的相同信息,但我可能会以100多个表的数据库,其中只有十个表的组将具有相关信息.
每种应用程序方法的数据库可以帮助我保持一切更有条理,但我不知道如何使所有数据库中的相关表保持最新.
所以,基本问题是:你推荐哪两种方法?
谢谢,
豪尔赫·巴尔加斯
编辑1:
当我谈到不能具有引用完整性时,这是因为当这些表位于不同的数据库中时,没有办法在表中使用外键,并且每个应用程序中至少有一个表需要一个外键来共享其中一个表表.
编辑2:
相关问题的链接:
只有第二个人有一个接受的答案.还没有决定做什么.
回答:
我决定使用每个应用程序的数据库,对共享数据库进行跨数据库引用,为每个数据库添加视图,模仿共享数据库中的表,并使用NHibernate作为我的ORM.作为会员系统,我将使用asp.net.
我还将使用触发器和逻辑删除尝试并保持在没有父母的情况下在livin'la vida loca周围飞行的ID的数量最少.保持数据库同步所需的开发工作太多而且收益太少(正如你们所指出的那样).所以,我宁愿通过孤立的记录来战斗.
由于使用ORM和视图是由svinto首先提出的,他得到了正确的答案.
感谢所有人帮助我做出这个艰难的决定.
database architecture sql-server database-design referential-integrity