mySQL重复外键
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mySQL重复外键,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2263字,纯文字阅读大概需要4分钟。
内容图文
![mySQL重复外键](/upload/InfoBanner/zyjiaocheng/905/98864e2cf338400badade502432e906f.jpg)
我是MySQL的初学者,我正在尝试建立一个供个人使用的数据库.
我试图给多个’Werknemer’提供相同的’Jobfunctie’.
例如:
船员(werknemer)(0100)是’arbeider’.
第二名船员(werknemer)(0101)也是’arbeider’.
CREATE TABLE Werknemer (
personeelsnummer int(4) not NULL,
voornaam varchar(10) not NULL,
achternaam varchar(10) not NULL,
adres varchar(30) not NULL,
telefoon varchar(10) not NULL,
winkelnummer int(4) not NULL,
primary key(personeelsnummer),
foreign key(winkelnummer) references Winkel(winkelnummer)
CREATE TABLE Jobfunctie (
jobfunctie varchar(15) not NULL,
salaris_in_euro int(10) not NULL,
personeelsnummer int(4) not NULL,
foreign key(personeelsnummer) references Werknemer(personeelsnummer),
primary key(jobfunctie)
);
INSERT INTO Werknemer values
(0100, 'firstname', 'lastname', 'adress', 'telephone', 0001);
INSERT INTO Werknemer values
(0101, 'firstname2', 'lastname2', 'adress', 'telephone', 0002);
INSERT INTO Jobfunctie values
('Arbeider', 1500, 0100);
INSERT INTO Jobfunctie values
('Arbeider', 1500, 0101);
这意味着’Arbeider’显示两次主键,这是不可能的.如何为同一个工作分配多个人?
解决方法:
这些情况的教科书解决方案是使用联结或映射表. Werknemer应该包含有关船员,Jobfunctie的有关工作描述的信息,并且您需要第三个表来分配船员工作:
CREATE TABLE Werknemer (
personeelsnummer INT(4) NOT NULL,
voornaam VARCHAR(10) NOT NULL,
achternaam VARCHAR(10) NOT NULL,
adres VARCHAR(30) NOT NULL,
telefoon VARCHAR(10) NOT NULL,
PRIMARY KEY (personeelsnummer)
);
CREATE TABLE Jobfunctie (
jobnumber INT(4) NOT NULL
jobfunctie VARCHAR(15) NOT NULL,
salaris_in_euro INT(10) NOT NULL,
PRIMARY KEY (jobnumber)
);
-- The new junction table
CREATE TABLE Werknemer_Jobfunctie (
personeelsnummer INT(4) NOT NULL,
jobnumber INT(4) NOT NULL,
PRIMARY KEY (personeelsnummer, jobnumber),
FOREIGN KEY (personeelsnummer) references Werknemer (personeelsnummer),
FOREIGN KEY (jobnumber) references Jobfunctie (jobnumber),
)
-- Insert crewmen
INSERT INTO Werknemer VALUES
(0100, 'firstname', 'lastname', 'adress', 'telephone');
INSERT INTO Werknemer VALUES
(0101, 'firstname2', 'lastname2', 'adress', 'telephone');
-- Insert a job description
INSERT INTO Jobfunctie VALUES
(1, 'Arbeider', 1500);
-- Assign this job to both crewmen
INSERT INTO Werknemer_Jobfunctie VALUES
(0100, 1);
INSERT INTO Werknemer_Jobfunctie VALUES
(0101, 1);
内容总结
以上是互联网集市为您收集整理的mySQL重复外键全部内容,希望文章能够帮你解决mySQL重复外键所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。