У меня есть таблица ASSETS
, которая имеет структуру, как показано ниже:Указать внешний ключ на одном столбце, а значение другого столбца
----------------------------------------------------
ID (PK) | DESCRIPTION | TYPE | Do- | Do+ | Dx- | Dx+
----------------------------------------------------
TYPE
столбца имеет внешних ключ, возможные значения SECURITY
или CURRENCY
(т.е. FX), а также у меня есть еще две таблицы: CURRENCIES
(, например, EUR
, RUB
или USD
):
--------------------------------------------------------
ID (PK)| FROM (FK ASSETS.ID) | TO (FK ASSETS.ID) | VALUE
--------------------------------------------------------
и SECURITIES
(, например, MTS
, GAZP
или VTB
):
----------------------------------------------------------
ID (PK)(FK ASSETS.ID)| CURRENCY (PK)(FK ASSETS.ID) | VALUE
----------------------------------------------------------
Как я могу сделать ограничение, что не только действует как внешний ключ в CURRENCIES.FROM
, CURRENCIES.TO
и SECURITIES.CURRENCY
, но также проверяет, соответствует ли ссылка ASSETS.TYPE
CURRENCY
, а также в SECURITIES
также проверяет, относится ли ссылка ASSETS.TYPE
для SECURITIES.ID
является SECURITY
?
Возможно, я могу написать триггеры для проверки значения ASSETS.TYPE
, но я ищу другое решение прямо сейчас (если возможно, конечно).
Если есть лучшие способы сделать то, что нужно (как лучший дизайн базы данных), пожалуйста, поделитесь своими идеями.
P.S. Я предполагаю, что это довольно распространенная проблема, поэтому, если есть статьи об этом или подобные вопросы, заданные в этой сети или некоторые общие решения, не стесняйтесь делиться ими.
Смотрите мой ответ [здесь] (https: // StackOverflow.ком/а/26093733/3404097). (Этот конкретный вопрос смутно частично не имеет таблицы Student (ваш ASSESTS_DATA) в его исходном тексте, но имеет один в диаграмме «Редактирование».) Ваш первый дизайн похож на тот, который я предлагаю (относительно прямолинейно) (1-й набор пуль), а ваш может быть измененным/CHECKed, как я предлагаю (второй набор пуль) – philipxy
@philipxy: как я отметил свой вопрос, FireBird. – potashin
На первый взгляд мне кажется странным относиться к ценным бумагам и валютам как к двум типам активов. Одна (безопасность) - это то, что имеет ценность - будь то здание, простой сертификат долга или что-то еще, тогда как другое (валюта) - это всего лишь единица измерения. Я предпочел бы пара ценных бумаг и * Деньги *, при этом Деньги были бы наличными в разных валютах, деньгами на разных банковских счетах и т. Д. –