Разработка схемы базы данных и внешние ключи в MySQL - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь создать нормализованную базу данных для блога, позволяющего отвечать на комментарии. Учитывая несколько ответов, которые я нашел, мне кажется, что мне нужно взглянуть на модель списка смежностей и модифицированный алгоритм обхода дерева предзаказов. Однако после того, как прочитал об этом, я не нашел примера использования внешних ключей для обеспечения целостности данных. Это можно сделать?

Какой дизайн базы данных вы рекомендуете в этом случае? В идеале я хотел бы иметь возможность исключить родительский комментарий и, используя отношения PK-FK (PK = первичный ключ, FK = внешний ключ), также иметь возможность удалить все дочерние комментарии, чтобы избежать сохранения сирот в стол.

ОБНОВЛЕНИЕ : В качестве пояснения я также хотел бы знать, какой дизайн базы данных используется в блогах, которые позволяют отвечать на комментарии (то есть, комментарии, которые отвечают на комментарии, которые отвечают исходной теме) ).

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Исходный код Reddits является открытым исходным кодом на Github, посмотрите, как они это делают ....

1 голос
/ 22 июля 2011

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

Я не нашел примера использования внешних ключей для обеспечения целостности данных. Это можно сделать?

Мне не ясно, о чем вы спрашиваете здесь. Вся модель в значительной степени опирается на отношение PK / FK (между комментарием и его родителем). В статье, на которую вы ссылаетесь, явно не сказано (что я вижу), но столбец title будет PK, а столбец parent будет FK.

0 голосов
/ 22 июля 2011

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

Официальная документация MySQL:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Переделка:

ALTER TABLE table1 ENGINE = InnoDB;

Есть дополнительные плюсы и минусы использования механизма InnoDB по сравнению с механизмом MyISAM (механизм хранения MySQL по умолчанию). Таким образом, вы должны тщательно исследовать два, прежде чем поместить его в производственную среду. MyISAM не поддерживает внешние ключи.

...