Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 实体关系_Database - Fatal编程技术网

Database 实体关系

Database 实体关系,database,Database,这一问题是另一个问题的继续,该问题也题为 Dejene:你应该把这里的材料转移到原始问题中,然后删除这个问题 阐述: 是的,“田地”指的是土地面积。我们在不同的地方有几个甘蔗种植场。它[每个字段?]都已命名并具有预算 用户不是指在机器上工作的个人。它们是部门。 我使用“isDone”表将userDept与机器链接起来。一台机器可以由多个部门使用,许多机器可以为一个用户部门工作 一台特定的机器可以在给定的班次上执行多项任务。它可以工作2小时,并且可以在另一个领域开始另一项任务。 我们每天三班,每

这一问题是另一个问题的继续,该问题也题为

Dejene:你应该把这里的材料转移到原始问题中,然后删除这个问题


阐述: 是的,“田地”指的是土地面积。我们在不同的地方有几个甘蔗种植场。它[每个字段?]都已命名并具有预算

用户不是指在机器上工作的个人。它们是部门。 我使用“isDone”表将userDept与机器链接起来。一台机器可以由多个部门使用,许多机器可以为一个用户部门工作

一台特定的机器可以在给定的班次上执行多项任务。它可以工作2小时,并且可以在另一个领域开始另一项任务。 我们每天三班,每班8小时

如果我使用自动递增PK,你认为其他键重要吗?我不喜欢用它

通常,我在表中单独使用自动递增键。我们如何创建包含自动递增键的关系? 谢谢你的深思熟虑的评论

表之间的关系(“外键”)是在列之间定义的,而不是在值之间定义的。例如:

create table machine ( id identity );
create table owner ( id identity );
create table isDone ( machineId, ownerId );
现在您可以说“
isDone.machineId
必须存在于
machine
表中”:

如果您试图在
isDone
中插入一行,并且列
machineId
的值在表
machine
中的任何位置都不存在(其中
select Count(*)from machine其中id=machineId
返回0),则数据库将返回错误

因此,您必须将定义时间(在定义时间中,您可以说什么是有效的,什么是无效的)和操作数据库中数据的时间分开

使用数据库的此功能时,必须确保在
isDone
中创建新行时计算机和所有者存在。这通常很简单:每天都有新的班次,但没有新的机器和部门。因此,您可以在购买/创建新机器和部门时创建它们。使用其中一个的第一次转换可能会在之后很长一段时间内发生

至于其他键:auto increment列应该是表的主键(PK),而不是其他键。稍后,如果发现某些查询执行得不好,可以在其他列上创建索引。但对于初学者来说,一个auto inc PK专栏就足够了。这使得形成外键约束更加简单

示例:如果将部门名称用作主键,则当部门更改其名称时,可能会出现问题

此外,我建议您在设计中使用对象的真实名称(例如,“部门”或“所有者”而不是“用户”)。这将使您在搜索内容时更容易查看内容和查找位置。

表之间的关系(“外键”)是在列之间定义的,而不是在值之间定义的。例如:

create table machine ( id identity );
create table owner ( id identity );
create table isDone ( machineId, ownerId );
现在您可以说“
isDone.machineId
必须存在于
machine
表中”:

如果您试图在
isDone
中插入一行,并且列
machineId
的值在表
machine
中的任何位置都不存在(其中
select Count(*)from machine其中id=machineId
返回0),则数据库将返回错误

因此,您必须将定义时间(在定义时间中,您可以说什么是有效的,什么是无效的)和操作数据库中数据的时间分开

使用数据库的此功能时,必须确保在
isDone
中创建新行时计算机和所有者存在。这通常很简单:每天都有新的班次,但没有新的机器和部门。因此,您可以在购买/创建新机器和部门时创建它们。使用其中一个的第一次转换可能会在之后很长一段时间内发生

至于其他键:auto increment列应该是表的主键(PK),而不是其他键。稍后,如果发现某些查询执行得不好,可以在其他列上创建索引。但对于初学者来说,一个auto inc PK专栏就足够了。这使得形成外键约束更加简单

示例:如果将部门名称用作主键,则当部门更改其名称时,可能会出现问题


此外,我建议您在设计中使用对象的真实名称(例如,“部门”或“所有者”而不是“用户”)。这将使您在搜索内容时更容易看到什么是什么以及在哪里查找。

从您的问题中,我不清楚您想知道什么。请将测试分成几段。注意:这里的额外信息现在转移到主问题。从你的问题来看,我不清楚你想知道什么。请将测试分成几段。注意:这里的额外信息现在转移到主问题。