none
Не удается правильно востановить связь между таблицами базы данных RRS feed

  • Общие обсуждения

  • Здравствуйте!
    Есть задание, необходимо разорвать связь между таблицами, внести изменения в таблицы и востановить программно связь. Тут схема базы данных:

    Необоходимо разорвать связь 1:1 между табилцами GeometryOfGasketTestSample и Dichtungen. Я получаю при помощи ADOX информацию о схеме базы данных, для таблицы GeometryOfGasketTestSample она выглядит следующим образом до изменений:

    GeometryOfGasketTestSample
        Typ        : TABLE
        Columns    :
            da
            di
            Dichtung
            h
            Id
        Indexes    :
            Dichtung -> [Dichtung] Unique: True
            DichtungenGeometryOfGasketTestSample -> [Dichtung] Unique: True
            PrimaryKey -> [Id] Unique: True
            Id -> [Id] Unique: False
        Keys  :
            Dichtung -> [Dichtung]
            DichtungenGeometryOfGasketTestSample -> [Dichtung]
            DichtungenGeometryOfGasketTestSample -> [Dichtung]
            PrimaryKey -> [Id]

    Востанавливаю связь при помощи следующей команды:

    ALTER TABLE GeometryOfGasketTestSample ADD CONSTRAINT DichtungenGeometryOfGasketTestSample FOREIGN KEY(Dichtung) REFERENCES Dichtungen(Nr) ON UPDATE CASCADE ON DELETE CASCADE

    но после этого сязь становится 1:n, и информация о схеме изменяется

    GeometryOfGasketTestSample
        Typ        : TABLE
        Columns    :
            da
            di
            Dichtung
            h
            Id
        Indexes    :
            Dichtung -> [Dichtung] Unique: True
            DichtungenGeometryOfGasketTestSample -> [Dichtung] Unique: False
            PrimaryKey -> [Id] Unique: True
            Id -> [Id] Unique: False
        Keys  :
            Dichtung -> [Dichtung]
            DichtungenGeometryOfGasketTestSample -> [Dichtung]
            PrimaryKey -> [Id]

    Помогите скорректировать команду воссоздания связи. Поле Dichtung таблицы GeometryOfGasketTestSample индексировано и не допускает дупликатов. При создании связи в Access, сразу создается связь 1:1, до установки каскадного удаления и обновления.

    получил еще другим способом информацию о соединении:

    Name: Dichtung,
    RelatedTable: ,
    Type: adKeyUnique,
    DeleteRule: adRINone,
    UpdateRule: adRINone

    Name: DichtungenGeometryOfGasketTestSample,
    RelatedTable: Dichtungen,
    Type: adKeyForeign,
    DeleteRule: adRICascade,
    UpdateRule: adRICascade

    Name: DichtungenGeometryOfGasketTestSample,
    RelatedTable: ,
    Type: adKeyUnique,
    DeleteRule: adRINone,
    UpdateRule: adRINone

    Name: PrimaryKey,
    RelatedTable: ,
    Type: adKeyPrimary,
    DeleteRule: adRINone,
    UpdateRule: adRINone

    попробовал добавить второе ограничение так:

    ALTER TABLE GeometryOfGasketTestSample ADD CONSTRAINT DichtungenGeometryOfGasketTestSample UNIQUE(Dichtung)

    но если создавать второе ограничение с тем же именем, то система выдает сообщение, что правило с таким именем уже сущесвует. Если зменить имя ограничение, то связь поучается 1:n
    и чтение свойств выдает следующее:

    GeometryOfGasketTestSample
        Typ        : TABLE
        Columns    :
            da
            di
            Dichtung
            h
            Id
        Indexes    :
            Dichtung -> [Dichtung] Unique: True
            DichtungenGeometryOfGasketTestSample1 -> [Dichtung] Unique: True
            PrimaryKey -> [Id] Unique: True
            DichtungenGeometryOfGasketTestSample -> [Dichtung] Unique: False
            Id -> [Id] Unique: False
        Keys  :
            Dichtung -> [Dichtung]
            DichtungenGeometryOfGasketTestSample -> [Dichtung]
            DichtungenGeometryOfGasketTestSample1 -> [Dichtung]
            PrimaryKey -> [Id]

    в оригинальной базе данных это выглядит по-другому!!!


    7 октября 2014 г. 13:47

Все ответы

  • Есть ли возможность дополнить (изменить) CONSTRAINT в ALTER TABLE, но при этом не спользовать ADD во втором правиле?
    8 октября 2014 г. 9:19
  • Вам принципиально именно таким образом проблему вставки данных решить? Просто можно ведь и без отключения FK constraints обойтись - просто вставлять последовательно в первую и вторую таблицы.
    8 октября 2014 г. 13:18
  • мне принципиально удалить поле Nr в табилце Dichtungen, а для того чтобы я смог его удалить, мне нужно разорвать все связи!

    • Изменено SergejS 8 октября 2014 г. 13:23
    8 октября 2014 г. 13:22