【问题标题】:Convert ER-Diagram to SQL将 ER-图转换为 SQL
【发布时间】:2017-06-28 19:02:37
【问题描述】:

我无法将 ER-Diagram 转换为有效的 SQL 代码。

看下面的ER图

如何将此 ER-Diagram 转换为 SQL 代码?我无法指定关系。为关系创建第三个表是否有意义?

CREATE TABLE Faculty (
    Fac.-Nr INTEGER NOT NULL,
    PRIMARY KEY (  Fac.-Nr)
);

CREATE TABLE Prof (
    Name VARCHAR(255) NOT NULL,
    PRIMARY KEY (Name)
);

我认为我必须处理约束,但我不知道如何正确转换关系。

我希望能够插入以下信息:

|姓名|属于|领导|

|史密斯| Fac10 | -|

|贝克尔| Fac10 | Fac10|

|约翰| Fac10 | -|

我对 SQL 很陌生,所以请耐心等待 :)

我们将不胜感激!

【问题讨论】:

  • 那么,我是否理解正确:每个教授只能属于一个学院。一个学院可以有很多不同的教授,但只有一位可以担任院长?
  • 没错。我不明白的是如何将其转换为 sql
  • @cars10 我稍微编辑了问题。
  • @ViktorG 与您的要求无关。但我强烈建议不要将列命名为“Fac.-Ng”。名称中带有一个点很容易让您在以后遇到一系列问题。大多数数据库都遵循使用蛇案例的约定。所以“fac_ng”。
  • @dvsoukup 你是对的!谢谢你:)

标签: sql entity-relationship


【解决方案1】:

是的,您应该创建第三个表来保存将两个表主键都指向为FOREIGN KEY 约束的关系。类似的东西

create table ProfFaculti (
name VARCHAR(255) NOT NULL,
Nr INTEGER NOT NULL,
primary key(name,Nr),
foreign key(name) references Prof(name), 
foreign key(Nr) references Faculti(Nr))

您实际上应该在两个表中都有一些 ID 列,它应该是主键并且应该在这些列上具有 FK。

【讨论】:

  • 感谢您的回复。这适用于我编辑的问题吗?
【解决方案2】:

嗯,我不知道如何将 ER 图“转换”为 SQL,但当前关系可以通过简单的两个表来建模:

create table profs ( pid int primary key, pname nvarchar(128), facid int );

create table facs ( fid int primary key, fname nvarchar(128), fpid int );

除了pname,您当然可以添加描述教授的所有属性,这同样适用于表facs 中的教师属性。但是profs 中的facidfacs 中的fpid 两列充分描述了您在问题中列出的关系。

只要一个教授一次只能属于一个教员,而教员只能有一个头,你就不需要另一个链接表来连接两者。

【讨论】:

  • 感谢您的回复。你能解释一下这是正确的吗?不需要通过外键连接表吗?
  • 如果做事,这可能不是“学校方式”,但在实践中,将表格链接到适当的庄园就足够了。当您处理链接表时,外键限制很有用,因为它们有助于将事物保持在清理状态。
猜你喜欢
  • 2013-08-08
  • 2013-12-29
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多