gpt4 book ai didi

MySQL 从 ER 图创建表

转载 作者:行者123 更新时间:2023-11-30 22:58:55 28 4
gpt4 key购买 nike

我正致力于从 ER 图创建数据库,但我认为我的某些主键和外键不正确。我认为它们不正确的表是部分中的主键和注册表中的 FK 和 PK。我也不认为我正确地执行了我的 FK 约束,因此我无法检测到引用完整性违规。

这是我的数据库所基于的 ER 图。

ER Diagram

这是我制作的表格

CREATE TABLE Student
(
StudentId INTEGER,
FName VARCHAR(20),
LName VARCHAR(20),
DOB CHAR(10),
Major VARCHAR(20),
PRIMARY KEY(StudentId)
);

CREATE TABLE Phone
(
sID INTEGER,
Pnumber CHAR(20),
Type CHAR(3),
PRIMARY KEY(Pnumber)
);

CREATE TABLE Class
(
ClassId VARCHAR(6),
Description VARCHAR(30),
NumCredits Integer,
Prereq VARCHAR(20),
PRIMARY KEY(ClassId)
);

CREATE TABLE Section
(
ClassId VARCHAR(6),
SecNo CHAR(10),
Semester CHAR(4),
ClassRoom VARCHAR(6),
TimeOffered VARCHAR(18),
PRIMARY KEY(SecNo),
FOREIGN KEY(ClassId) REFERENCES Class(ClassId)
);

CREATE TABLE Enrolled
(
StudentId INTEGER,
SecNum VARCHAR(40),
ClassId VARCHAR(8),
Semes VARCHAR(6),
GorDD VARCHAR(30)
FOREIGN KEY(ClassId) REFERENCES Section(ClassId),
FOREIGN KEY(StudentId) REFERENCES Student(StudentId)
);

CREATE TABLE Professor
(
EmpId INTEGER,
FName VARCHAR(10),
LName VARCHAR(10),
Dept VARCHAR(2),
QualClass VARCHAR(40),
PRIMARY KEY (EmpId)
);

CREATE TABLE Teaches
(
Class VARCHAR(5),
Section INTEGER,
Semester CHAR(4),
EmpId INTEGER,
FOREIGN KEY (EmpId) REFERENCES Professor(EmpId)
);

CREATE TABLE Qualified
(
EmpId INTEGER,
ClassId VARCHAR(5)
);

感谢您帮助理解如何从 ER 图创建数据库。

最佳答案

您确实应该为每个表设置一个简单、标准化的AUTO_INCREMENT PRIMARY KEY。这使得引用特定记录变得容易得多。在建立关系时,最好通过主键引用表。字符串主键可能会很麻烦,尤其是当这些字符串可以更改时。

此外,您对字符串长度的任意限制非常令人讨厌。你凭什么说人们的名字只能有二十个字符,或者教授的名字只能有十个字符?真是草率。除非您有充分的理由,否则请对这些类型的自由格式字段保持开放,默认为 VARCHAR(255)。今天的硬盘驱动器以 TB 为单位进行测量,您需要有 1 亿学生才能用姓名数据填充您的驱动器。

否则,作为数据库,这没问题。我可能会完全放弃这个模式并从你的实体图重建,顺便说一句,使用我使用的任何开发框架的约定,这是一个很好的工具。例如,Ruby on Rails、Django、Drupal 和 Tapestry 对如何命名表都有自己的想法。

关于MySQL 从 ER 图创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960412/

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