ОШИБКА postgres: вставка или обновление таблицы "xxxxx" нарушает внешний ключ в отличие от "xxxxx" - PullRequest
1 голос
/ 23 ноября 2010

Hello У меня есть основная таблица BASECOMPANYDATA с BaseCompanyDataID в качестве ПК. Это заложено 2 другие таблицы ЗАКАЗЧИКИ И ПРОДУКЦИИ. Теперь у меня есть таблица КОНТАКТЫ, которые я хотите соединиться с 2 другими, так как клиенты и продуктовые компании будут иметь 0 или больше контактов. Поэтому я сделал FK (BaseCompanyID) в контактах и ​​подключен к BASECOMPANYDATA PK (BaseCompanyDataID). Но когда я пытаюсь вставить контакт для запись, которая существует в CUSTOMERS, я получаю следующую ошибку: ОШИБКА: вставка или обновление таблицы "xxxxx" нарушает внешний ключ в отличие от "xxxxx" ДЕТАЛИ: Ключ (BaseCompanyDataID) = (17) отсутствует в таблице «BaseCompanyData». Этот идентификатор существует в указанной выше унаследованной таблице (BaseCompanyData). Может кто-нибудь объяснить, почему это происходит?

Заранее спасибо

PS : Ну, у меня есть 4 таблицы:

1.BASECOMPANYDATA с BaseCompanyDataID в качестве PK и некоторыми другими полями. 2.CUSTOMERS, который наследует от приведенной выше таблицы, поэтому он имеет CustomerID в качестве PK и имеет поля таблицы BASECOMPANYDATA, а именно BaseCompanyDataID и т. Д. 3.PRODUCTCOMPANIES, который наследуется от BASECOMPANYDATA, поэтому он имеет поля ProductCompanyID как PK и поля унаследованной таблицы, например BaseCompanyDataID и т. Д. 4. КОНТАКТЫ с ContactID в качестве PK и BaseCompanyDataID в качестве FK. Я пытался связать таблицу КОНТАКТОВ 2-мя разными способами. а. КОНТАКТЫ-> BaseCompanyID с CUSTOMERS-> BaseCompanyDataID и КОНТАКТЫ-> BaseCompanyID с PRODUCTCOMPANIES-> BaseCompanyDataID b. КОНТАКТЫ-> BaseCompanyID с BASECOMPANYDATA-> BaseCompanyDataID В результате возникла та же ошибка. Любой ответ о том, как я могу создать ФК с помощью наследования, если есть. Заранее спасибо

1 Ответ

3 голосов
/ 23 ноября 2010

Вы читали документы по наследству?В частности, раздел 5.8.1. Caveats?

http://www.postgresql.org/docs/9.0/static/ddl-inherit.html

...

Точно так же, если бы нам нужно было указать, что с названиями городов.это ограничение не будет автоматически распространяться на столицы.В этом случае вы можете обойти это, вручную добавив такое же ограничение ССЫЛКИ в столицы.

edit:

Наследование только реализовано наполовину в Postgsresql.Если вы хотите сохранить набор текста, проверьте like в таблице создания

В вашем первом вопросе я вижу, что человек рекомендовал точно то же, что и я.А сейчас у тебя проблемы?Хм ...

Это псевдо sql, которое я получаю из вашего репоста:

base
    baseid

customers(base)
    baseid
    id

products(base)
    baseid
    id

contacts
    id
    baseid references base(baseid)

Просто сделайте это старомодным способом!

base
    id

customers
    base_id references base(id)
    id

products(base)
    base_id references base(id)
    id

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