我是SQL和Postgresql的新手。我想更好地理解外键约束如何与父表的主键一起使用。
这是我目前为两张桌子设置的。我试图模仿ISA关系,其中echecks IS-A付款。
Table "public.payments"
Column | Type | Modifiers
pid | integer | not null default nextval('payments_pid_seq'::regclass)
street | character varying(80) |
zip | integer |
Indexes:
"payments_pkey" PRIMARY KEY, btree (pid)
Referenced by:
TABLE "cards" CONSTRAINT "cards_pid_fkey" FOREIGN KEY (pid) REFERENCES payments(pid)
TABLE "echecks" CONSTRAINT "echecks_pid_fkey" FOREIGN KEY (pid) REFERENCES payments(pid)
Table "public.echecks"
Column | Type | Modifiers
rtgacctnum | bigint |
accttype | character varying(80) |
nameonacct | character varying(80) |
pid | integer | not null default nextval('payments_pid_seq'::regclass)
Foreign-key constraints:
"echecks_pid_fkey" FOREIGN KEY (pid) REFERENCES payments(pid)
Table "public.cards"
Column | Type | Modifiers
pid | integer | not null default nextval('cards_pid_seq'::regclass)
cnum | bigint |
nameoncard | character varying(80) |
Foreign-key constraints:
"cards_pid_fkey" FOREIGN KEY (pid) REFERENCES payments(pid)
使用此当前设置,我无法阻止Echecks和Cards从付款继承相同的pid。我希望Echecks使用Payments中的下一个可用pid号码,和在卡片中不是同一个pid。
我希望发生的简化版本:
Payments(pid, pay_type):
1, paypal
2, echeck
3, credit card
4, echeck
Echecks(fk_pid, acct_name)
2, susy
4, bob
Cards(fk_pid, card_name)
3, john
相反,Echecks只是在插入时分配:
1, susy
2, bob
卡片分配:
1, john
设置外键约束的最佳方法是什么,以确保从Payments分配一个唯一的pid?
答案 0 :(得分:1)
Echecks并没有“抓住”任何价值。您应该在其中插入要在其中显示的值。所以你真正的问题在于你没有在帖子中包含的插入逻辑。