的数据
的
如何处理创建这些表并插入其中的代码?
尝试过,但失败了:
create table vlasnik
(
vlasnik_id integer not null constraint vlasnik_pk primary key,
datum_zakupa date not null
);
create table pravna_osoba
(
naziv varchar2(20) not null,
ime_ravnatelja varchar2(20) not null,
prezime_ravnatelja varchar2(20) not null,
datum_osnutka date not null,
OIB_tvrtke varchar2(13) not null,
pravna_osoba_id number not null
constraint pravna_osoba_pk references vlasnik (vlasnik_id) primary key
);
create table fizicka_osoba
(
ime varchar2(20) not null,
prezime varchar2(20) not null,
OIB varchar2(13) not null,
datum_rodenja date not null,
primarna_djelatnost varchar2(30) not null,
broj_sticenika integer not null,
fizicka_osoba_id number not null
constraint fizicka_osoba_pk references vlasnik (vlasnik_id) primary key
);
alter table vlasnik
add (constraint vlasnik_pravna_osoba_fk
foreign key (PRAVNA_OSOBA_ID) references PRAVNA_OSOBA (PRAVNA_OSOBA_ID),
constraint vlasnik_fizicka_osoba_fk
foreign key (FIZICKA_OSOBA_ID) references FIZICKA_OSOBA (FIZICKA_OSOBA_ID));
字符串
1条答案
按热度按时间vsdwdz231#
在我看来,你做错了。
如果您希望
alter table vlasnik
与您所描述的一样,那么它还应该包含两个附加列:pravna_osoba_id
和fizicka_osoba_id
,因为您尝试在不存在的列上应用外键约束。这不是问题。然后,在alter table vlasnik
中,您可以添加initially deferred deferrable
子句来使整个过程正常工作(正如Thorsten所评论的那样):字符串
正在插入:
型
就这样了
不过,你为什么要这样做呢?
vlasnik
表的用途是什么?除了主索引键数据行之外,它只包含datum_zakupa
。怎么样了?有-至少-一个 * 主题 * 失踪-什么是 zakupljeno(租赁)?pravna_osoba
和fizicka_osoba
包含几乎相同的列列表。您是否考虑过只维护一个表(我们称之为osoba
),并使用附加的标志列来说明该行是代表fizicka还是pravna osoba?broj_sticenika
和primarna_djelatnost
属于fizickaosoba吗?你自己的“broj sticenika”是什么?所以:我的建议是,看看是否有用。如果没有,现在您已经知道如何正确地设置外键约束,请切换回您自己的想法。
型
几个插入(故意错误-检查检查约束是否起作用):第一:
型
真理报:
型
弗拉斯尼克:
型