Несколько внешних ключей

Так не получается. После того, как вы сдвинули назад свой k2, который указывает на некоторую память, которую вы выделили, вы сохранили ее в векторе. Таким образом, у вас есть указатель, указывающий на область памяти, которая имеет 10 в нем. После присвоения k3 k2, вы только изменили переменную-указатель, чтобы указывать на другую ячейку памяти, в которой есть 100. После этого вы даже не удалите k2, вы потеряли указатель на эту память. Это называется утечкой памяти.

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

struct Node
{
    Node()
    {
        visited_print = false;
        visited_find = false;
    }
    bool visited_print;
    bool visited_find;
    int value;
    std::vector<Node*> children;
    Node *parent;
};

int main(){
    Node *k1 = new Node();
    Node *k2 = new Node();
    k2->value = 10;
    Node *k3 = new Node();
    k3->value = 100;
    k1->children.push_back(k2);
    //k2 = k3;

    delete k2;
    k1->children[0] = k3;
}
6
задан 24 March 2009 в 00:49
поделиться

6 ответов

Вы могли сделать many-many отношения между POST и КАТЕГОРИЕЙ и POST и ТЕМОЙ:

POST
----
ID
Text ...
...

CATEGORY
--------
ID
Name

TOPIC
-----
ID
Name

POST_CATEGORY
-------------
POST_ID (FK)
CATEGORY_ID (FK)

POST_TOPIC
----------
POST_ID (FK)
TOPIC_ID (FK)

Таким образом, сообщение может быть связано с любым количеством категорий и тем.

2
ответ дан 16 December 2019 в 21:46
поделиться

Вы на правильном пути с nullable полями POST_CATEGORY_ID и POST_TOPIC_ID. Это смоделирует это сообщение дополнительно быть связанным с категорией и дополнительно связанным с темой.

Если это будет предназначено, чтобы быть эксклюзивным и обязательным, то необходимо будет добавить проверочное ограничение, что любой является пустым, но не оба.

4
ответ дан 16 December 2019 в 21:46
поделиться

Я думаю, что объявление внешнего ключа может только относиться к единственной таблице:

FOREIGN KEY(CATEGORY_ID) REFERENCES CATEGORY(CATEGORY_ID);
FOREIGN KEY(TOPIC_ID) REFERENCES TOPIC(TOPIC_ID);

Если я корректен, у Вас должно будет быть два внешних ключа, один для таблицы CATEGORY и другого для ТЕМЫ и обеих потребностей быть nullable.

1
ответ дан 16 December 2019 в 21:46
поделиться

Как насчет того, чтобы иметь категории и темы в той же таблице

составьте таблицу topics_categories (идентификационный номер, описание varchar2 (100), item_type символ (1)); - C или T

Затем единственный внешний ключ к topics_categories

1
ответ дан 16 December 2019 в 21:46
поделиться

Лучший способ состоит в том, чтобы использовать Наследование. У Вас будет две специализации "Posts": "Posts_Category" и "Posts_Topic" Оба имеют "post_id" (который касается родительской таблицы "Сообщения"), и другое поле:

"Category_ID" ("Posts_Category")

"Topic_ID" ("Posts_Topic")

Если это звучит, путают взгляд на Доктрину (PHP ORM) в их документации: http://www.doctrine-project.org/documentation/manual/1_0/en/inheritance

0
ответ дан 16 December 2019 в 21:46
поделиться

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

0
ответ дан 16 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: