我需要用sql(oracle)實作下表:
桌子
首先我創建了型別:
CREATE TYPE address AS OBJECT(num INT, street VARCHAR(20), city VARCHAR(20), zip INT);
CREATE TYPE phoneNum AS VARRAY(2) OF VARCHAR(13);
CREATE TYPE kids AS OBJECT(firstK VARCHAR(20), lastK VARCHAR(20), age INT);
然后我創建了表“人”:
CREATE TABLE person (id VARCHAR(10), firstName VARCHAR(20), lastName VARCHAR(20), adr address,pn phoneNum, ks kids);
我用它插入到表中:
INSERT INTO person VALUES("1", "Justin", "Trudeau", address(10, "Main street", "Ottawa", 1000), phoneNum(" 123456789012"," 103647901456"), kids("Michelangelo", "Trudeau", 14));
哪個作業正常。但是我如何插入第二行“孩子”(Leanardo,Trudeau,10)。
uj5u.com熱心網友回復:
我如何插入第二行“孩子”(Leanardo,Trudeau,10)。
你不能。該kids型別定義為:
CREATE TYPE kids AS OBJECT(firstK VARCHAR(20), lastK VARCHAR(20), age INT);
然后將表定義為:
CREATE TABLE person (
id VARCHAR(10),
firstName VARCHAR(20),
lastName VARCHAR(20),
adr address,
pn phoneNum,
ks kids
);
kids(盡管它的名字是復數)是一個單數物件,所以你只能把一個kids值放進去。
如果要放置多個,kids則需要:
- 更改表以存盤的集合
kids; - 為孩子準備一張單獨的桌子;或者
- 反轉關系并為父母存盤兩個(或更多)外鍵關系。
例如,您可以(因為孩子也是人)將關系存盤為:
CREATE TYPE address AS OBJECT(
num INT,
street VARCHAR2(20),
city VARCHAR2(20),
zip INT
);
CREATE TYPE phoneNum AS VARRAY(2) OF VARCHAR2(13);
CREATE TABLE person (
id INTEGER
CONSTRAINT person__id__pk PRIMARY KEY,
firstName VARCHAR2(20),
lastName VARCHAR2(20),
date_of_birth DATE,
adr address,
pn phoneNum
);
CREATE TABLE children(
id INTEGER
CONSTRAINT children__id__pk PRIMARY KEY,
parent_id CONSTRAINT children__parent_id__fk REFERENCES person (id),
child_id CONSTRAINT children__child_id__fk REFERENCES person (id),
CONSTRAINT children__pid_cid__u UNIQUE (parent_id, child_id)
);
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370192.html
下一篇:SQL創建歌曲持續時間表
