Проверьте ограничение для нескольких условий - PullRequest
0 голосов
/ 29 мая 2018

Учитель дал нам командное задание, и я и мой товарищ по команде с этим очень боремся (тем более, что нам нужно использовать такие вещи, как TRIGGERS и PROCEDURES , то, что мы не делали 'пока не вижу в классе ...).

Нам нужно реализовать дуговое отношение , и мы не понимаем, как ... Но прежде чем я скажу вам, ребята, что мне нужно сделать, я сделаюдать вам часть описания задачи, чтобы вы, ребята, могли немного лучше понять ситуацию…

Нам нужно сделать ERD для VLSI CAD-системы , и нам нужнореализовать это.Теперь у нас есть сущность CELL, атрибуты которой на самом деле не имеют отношения ... Единственное, что вам, ребята, нужно знать, чтобы помочь нам, это то, что у нее есть первичный ключ , CELL_CODE VARCHAR .

Каждый CELL имеет много (я думаю, по крайней мере, четыре, я не думаю, что вы можете иметь треугольный CELLS, но в любом случае это не имеет значения) SIDES.SIDE может быть логически идентифицирован по CELL, и, чтобы нелепо усложнить задачу, каждый SIDE должен быть пронумерован по CELL, например:

CELLS:

CELL_CODE
1
2

СТОРОНЫ:

SEQUENCE_NUMBER  CELL_CODE
1                1
2                1
3                1
1                2
2                2
3                2

Теперь у каждого SIDE есть CONNECTION_PINS.CONNECTION_PINS также уникально идентифицируется как SIDES, которые в основном нумеруются аналогичным образом:

ЯЧЕЙКИ:

CELL_CODE
1
2

СТОРОНЫ:

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

Я попытался объяснить возникшую здесь проблему нумерации: Модель данных - проблема нумерации ПЕРВИЧНОГО КЛЮЧА , но да, я действительно не объяснил это так, как это должно быть объяснено ...

Теперь у нас есть одна последняя сущность, в которую входит Arc :CONNECTIONS.CONNECTIONS имеет 2 CONNECTION_PINS: один для START_FROM и один для END_OF.Теперь логически видно, что стартовый контакт не может быть и конечным контактом для данного соединения.И это наша борьба.По сути, это не должно быть разрешено:

ЯЧЕЙКИ:

CELL_CODE
1
2

СТОРОНЫ:

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

СОЕДИНЕНИЯ: (Вы не должны быть в состоянии поместить это в…)

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 с запрещенными отношениями и дугой.Отношения в вопросе

и это физическая модель:

Физическая модель

Я в основном думал, что простой ПРОВЕРКА может сделать (ПРОВЕРИТЬ (CPI_SEQNUM_START <> CPI_SEQNUM_END И CELL_CODE_START <> CELL_CODE_END И SIE_SEQNUM_START <> SIE_SEQNUM_END)), но это не позволило нам каким-либо образом вставить что-нибудь ... Любой совет?

1 Ответ

0 голосов
/ 29 мая 2018

Ваш подход был правильным, чтобы использовать ограничение CHECK.Ваша логика для ограничения была неправильной, хотя.Вам нужно условие OR.Только одно из трех полей должно быть разным.

CPI_SEQNUM_START <> CPI_SEQNUM_END OR
CELL_CODE_START <> CELL_CODE_END OR
SIE_SEQNUM_START <> SIE_SEQNUM

... при условии, что все три поля не обнуляются.

...