草庐IT

mySQL重复外键

coder 2023-10-11 原文

我是 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重复外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560540/

有关mySQL重复外键的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  3. ruby - 正则表达式 - 保存重复捕获的组 - 2

    这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","

  4. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  5. Ruby 从数组中删除重复的对象 - 2

    我无法使用传统的Ruby方法从下面的数组user_list中删除所有重复对象,从而获得预期的结果。有解决这个问题的聪明方法吗?users=[]user_list.eachdo|u|user=User.find_by_id(u.user_id)users 最佳答案 这个怎么样?users=User.find(user_list.map(&:user_id).uniq)这具有作为一个数据库调用而不是user_list.size数据库调用的额外好处。 关于Ruby从数组中删除重复的对象,我们在

  6. Ruby 删除可枚举列表中的重复项 - 2

    ruby中有没有一个很好的方法来删除可枚举列表中的重复项(即拒绝等) 最佳答案 对于数组你可以使用uniq()方法a=["a","a","b","b","c"]a.uniq#=>["a","b","c"]所以如果你只是(1..10).to_a.uniq或%w{antbatcatant}.to_a.uniq因为无论如何,几乎所有您实现的方法都将作为Array类返回。 关于Ruby删除可枚举列表中的重复项,我们在StackOverflow上找到一个类似的问题: h

  7. ruby-on-rails - Scaffold Rails 3 View 中的外键下拉列表 - 2

    我使用脚手架和Rails3创建了2个模型。模型是位置和作业,每个作业都有一个位置。我在脚手架生成代码中创建了所需的引用调用,但是当我查看创建新作业的View时,我看到的只是一个文本框,我应该在其中添加location_id。我怎样才能让它变成下拉菜单以获得更好的用户体验? 最佳答案 想象一下,您有每个位置的titleAPI:http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select 关于r

  8. ruby - 重复排列 - 2

    我知道如何创建值数组的排列。例如:[*1..3].permutation(2)这导致以下六种排列:[1,2][1,3][2,1][2,3][3,1][3,2]但这个结果缺少三个排列,它们是相同值的组合,即:[1,1][2,2][3,3]如何获得所有排列,包括上面重复的排列? 最佳答案 尝试#repeated_permutation:[*1..3].repeated_permutation(3).to_a>pp[*1..3].repeated_permutation(3).to_a[[1,1,1],[1,1,2],[1,1,3],[1

  9. ruby - 在 Ruby 数组中收集重复项的最快/单行方法? - 2

    像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby

  10. ruby-on-rails - 从 ruby​​ 中的数组中删除重复项 - 2

    我想输出一个散列数组,其中name对所有散列都是唯一的。我将如何使用ruby​​执行此操作?这是我的输入:input=[{:name=>"Kutty",:score=>2,:some_key=>'value',...},{:name=>"Kutty",:score=>4,:some_key=>'value',...},{:name=>"Baba",:score=>5,:some_key=>'value',...}]我希望输出看起来像这样:output=[{:name=>"Kutty",:score=>4,:some_key=>'value',...},{:name=>"Baba",:s

随机推荐