gpt4 book ai didi

database - 插入具有多个值的外键

转载 作者:太空狗 更新时间:2023-10-30 01:55:08 24 4
gpt4 key购买 nike

我想知道,是否有可能创建一个表,其中我有一个接受外键但同一行可能有多个值的表。

例如:

Employee(id,name,skillid);
Skill(Skillid,skillname);

这里有一个 Employee 的实例

Employee(311,"john", (01,02) );
Skill (01,Java); Skill (02,C++);

我为表实现了与 (is,skillid) 相同的创建主键

但如果我有一张 table :

create table Movie (Movie_ID varchar(5),                              
Cast varchar(5),
foreign key(Cast) references Person(Person_ID),
primary key(movie_id, Cast));

和另一个表:

create table Awards  (Award_Id varchar(5),
Person_Id varchar(5),
Movie_Id varchar(5),
Award_Name varchar(30),
Year number(4),
Organization_Id varchar(5),
primary key (Award_id,year,Organization_Id),
foreign key(Person_Id) references Person(Person_ID),
-- foreign key(Movie_ID) references Movie(Movie_ID),
foreign key(Organization_Id) references Organization(Organization_Id));

在这种情况下,我无法将 Movie_ID 用作外键,因为它引用的表将 2 个事物的组合作为其主键。而且我没有在 Awards 表中使用这些属性中的第二个。

有什么可以实现的提示吗?

最佳答案

不幸的是,您刚刚问了这个古老的问题;

How do I put two things in one column?

当然,答案是你不知道;你有两列。要扩展您的员工示例,您的员工表将变为:

create table employees (
id number
, name varchar2(4000)
, skill_1 number
, skill_2 number
, constraint employee_pk primary key (id)
, constraint employee_skill_1_fs
foreign key ( skill_1 )
references skills(skillid)
, constraint employee_skill_2_fs
foreign key ( skill_2 )
references skills(skillid)
);

如您所见,这并不是一件特别漂亮的事情,并且会破坏规范化;如果您希望您的员工(或者您的员工当然想要)拥有 3 种技能,会发生什么情况?还是10?

创建第三个表并通过单个主键和外键进行所有连接可能会更好;所以你会有

employees ( employee_id, ..., pk employee_id);
employee_skills ( employee_id, skill_id, ..., pk employee_id, skill_id, fk skill_id );
skills ( skill_id, description, ..., pk skill_id );

关于database - 插入具有多个值的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com