Сложные логические ограничения - PullRequest
0 голосов
/ 19 октября 2011

Я пытаюсь обеспечить корректность данных в схеме следующих характеристик:

Таблица:

|SAVE_TYPE|PROFILE|USERNAME|DATA|

В зависимости от типа сохранения столбец профиля или столбец имени пользователя будутиспользуемый.Представьте, что если вы хотите сохранить данные в области профиля, я вставлю следующую строку:

|SAVE_TYPE|PROFILE|USERNAME|DATA|
|PROFILE  |PROF. 1|Mr. X   |123 |

Эта строка будет означать, что данные будут доступны для профиля PROF.1 и был вставлен пользователем Mr. X. С другой стороны, в этом случае:

|SAVE_TYPE|PROFILE|USERNAME|DATA|
|USER     |NULL   |Mr. X   |456 |

Эта строка означает, что данные будут доступны только для Mr. X.

IНе знаю, что было бы лучшим способом реализации ограничения для этого поведения, может быть, я должен использовать другую структуру таблицы (я открыт, чтобы изменить схему).Пока что у меня есть уникальное ограничение для столбцов SAVE_TYPE, PROFILE и USERNAME, но теперь это совершенно правильно.Неверные данные, которые принимает моя модель:

Несколько экземпляров в SAVE_TYPE -> USER для одного пользователя.

|SAVE_TYPE|PROFILE|USERNAME|DATA|
|USER     |PROF. 1|Mr. X   |456 |
|USER     |PROF. 2|Mr. X   |456 |
|USER     |PROF. 3|Mr. X   |456 |

Несколько экземпляров в SAVE_TYPE -> PROFILE для одного и того же профиля.

|SAVE_TYPE|PROFILE|USERNAME|DATA|
|PROFILE  |PROF. 1|Mr. X   |123 |
|PROFILE  |PROF. 1|Mr. Y   |123 |
|PROFILE  |PROF. 1|Mr. Z   |123 |

Заранее спасибо, надеюсь, я все прояснил:)

1 Ответ

2 голосов
/ 19 октября 2011

"Эта строка будет означать, что данные будут доступны для профиля PROF. 1 и были вставлены пользователем Mr. X."

и

"Эта строка означает, чтоданные будут доступны только для мистера X. "

Если ваши" значения для строк "ТАК различны, то это указывает на то, что у вас под рукой действительно должны быть две разные таблицы.

С точки зрения теории отношений: каждый relvar («таблица») имеет ОДИН связанный внешний предикат («что на самом деле означают строки в таблице»).Поэтому, если у вас есть два разных предиката, у вас также должно быть два разных relvars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...