老师给了我们一个团队任务,我和我的队友都非常努力(特别是因为我们需要使用像 TRIGGERS 和 PROCEDURES 这样的东西,我们在课堂上没有看到......)。
我们需要实施 arc-relationship ,我们无法理解...... 但在我告诉你们我需要完成的任务之前,我会给你一些关于任务的描述,所以你们可以更好地了解情况......
我们基本上需要为 VLSI CAD系统制作ERD,我们需要实现它。现在,我们有CELL
实体,其属性并不真正相关......为了帮助我们,您需要知道的唯一事情是它有一个主键, CELL_CODE
, VARCHAR 。
每个CELL
都有很多(我认为至少有四个,我认为你不能有三角形CELLS
,但无论如何都不重要)SIDES
。 SIDE
可以通过其CELL
进行逻辑识别,并且为了使事情变得非常困难,每个SIDE
都必须按其CELL
进行编号,如下所示:
CELLS:的
CELL_CODE
1
2
SIDES:的
SEQUENCE_NUMBER CELL_CODE
1 1
2 1
3 1
1 2
2 2
3 2
现在,每个SIDE
都有CONNECTION_PINS
。 CONNECTION_PINS
也由SIDES
唯一标识,基本上以类似的方式编号:
CELLS:的
CELL_CODE
1
2
SIDES:的
SEQUENCE_NUMBER CELL_CODE
1 1
2 1
3 1
1 2
2 2
3 2
CONNECTION_PINS:的
SEQUENCE_NUMBER SIE_SEQUENCE_NUMBER CELL_CODE
1 1 1
2 1 1
1 2 1
2 2 1
1 3 1
2 3 1
1 1 2
2 1 2
1 2 2
2 2 2
1 3 2
2 3 2
我试着解释一下我们在这里的编号问题:Data model - PRIMARY KEY numbering issue,但是,我没有真正解释它应该解释的方式......
现在,我们有一个最终实体,即 Arc 所在的位置:CONNECTIONS
。 CONNECTIONS
有2个CONNECTION_PINS
:一个用于START_FROM
,另一个用于END_OF
。现在,从逻辑上看,对于给定的连接,起始引脚也不能是结束引脚。这就是我们的斗争。基本上,这不应该被允许:
CELLS:的
CELL_CODE
1
2
SIDES:的
SEQUENCE_NUMBER CELL_CODE
1 1
2 1
3 1
1 2
2 2
3 2
CONNECTION_PINS:的
SEQUENCE_NUMBER SIE_SEQUENCE_NUMBER CELL_CODE
1 1 1
2 1 1
1 2 1
2 2 1
1 3 1
2 3 1
1 1 2
2 1 2
1 2 2
2 2 2
1 3 2
2 3 2
CONNECTIONS:的
(你不应该把它放进......)
CPI_SEQNUM_START SIE_SEQNUM_START CELL_CODE_START CPI_SEQNUM_END SIE_SEQNUM_END CELL_CODE_END
1 1 1 1 1 1
现在,这基本上是这部分的ERD:
ERD with barred relationships and the arc-relationship in question
这是物理模型:
我基本上认为一个简单的 CHECK 可能会这样做(CHECK(CPI_SEQNUM_START
<> CPI_SEQNUM_END
和CELL_CODE_START
<> CELL_CODE_END
和SIE_SEQNUM_START
<> SIE_SEQNUM_END
)),但这阻止我们以某种方式插入任何内容......有什么建议吗?
答案 0 :(得分:0)
使用CHECK
约束的方法是正确的。你对约束的逻辑是错误的。您需要OR
条件。三个领域中只有一个需要不同。
CPI_SEQNUM_START <> CPI_SEQNUM_END OR
CELL_CODE_START <> CELL_CODE_END OR
SIE_SEQNUM_START <> SIE_SEQNUM
...假设所有三个字段都不可为空。