![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Если действительно статей, как в википедии, то можно воспользоваться и одним полем в таблице самих статей. Сделать его строковым, к примеру разделить числа "|", ну и в момент редактирования статьи, если похожая статья добавляется, то ее надо добавить и в добавляемой. При удалении тоже самое. Я бы так сделал вряд ли. Уж на крайний случай сделал так, но в отдельной таблице, где есть поля только ID статьи и seealso.
Тут надо тестировать... |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 2 Всего: 89 |
А чем отдельная таблица лучше дополнительного поля?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
Хранить в одном поле информацию, которую затем ещё и парсить, занятие, ИМХО, не из благородных (в отношении к серверу.).. т.к. вместо того, чтобы нормализовать БД вынеся всю схожую информацию в отдельную таблицу и выбирать это 1-2 запросами, Вы будете выбирать информацию, а потом средствами РНР её ещё и парсить... очень много интересеного по поводу древовидных структур в БД и работы с ними можно прочитать здесь.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 11 Всего: 261 |
Sunvas, отдельная таблица - ты покупаешь кухонный стол, а в единой таблице, ты покупаешь стол, тебе дают 20 стульев, 25 сервизов, лампочку и зубную счетку, и спрашивается а нафига мне напильник, если не курю.
|
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 2 Всего: 89 |
Fally, проблем с парсингом нет. Тут один хороший человек показал как сделать все красиво. Mal Hack, интересно объяснил. )
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Golda |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 6 Всего: 42 |
Mal Hack, объяснение - супер
![]() Кстати, Вы, фактически, повторили мою идею, и к дереву Ваш последний вариант отношения не имеет, т.к. не гарантируется ни связаность графа, ни отсутсвие циклов. Рассмотрите, например, вариант, (1, 2, 3), (4,5) - где в каждых скобках - набор попарно связанных статей. Это никак не дерево. Добавлю также, что если сделать сочетание (id1, id2) - первичным ключом, и выработать соглашение, благодаря которому пары всегда будут записываться в одном и том же порядке (например, id1 - всегда меньший, id2 - всегда больший, то и дополнительные запросы для проверки целостности не понадобятся. Ну и не забыть сделать для каждого из полей id1, id2 - внешний ключ с ON DELETE CASCADE, чтобы не заботиться о том, что будет со связями при удалении. Sunvas, хранение нескольких значений в одном поле противоречит одному из ключевых принципов построения реляционной базы данных: атомарности полей таблиц. DB. Вы теряете на этом возможность переложить на базу данных часть забот о ее целостности и усложняете себе жизнь при составлении всевозможных запросов, кроме, может быть, одного, заранее выбранного. Вариант, при котором ребра хранятся отдельно от вершин, если проставлены все нужные ключи, дает Вам больше гарантий целостности базы и, думаю, должен положительно сказаться на быстродействии при выборе статьи. Вам ведь на самом деле, наверное, не id связанной статьи в базе нужно показать, а какие-то другие ее поля (название, например). Значит, понадобятся два запроса: одним выбирает seealso, а дальше в PHP нужно составлять второй запрос типа
В случае же, о которым писали Mal Hack и я, несложно сделать все на уровне SQL, не прибегая к помощи PHP.
Но даже, если Вы не потратили впустую первый запрос, выбрав в нем все остальные данные о статье, конструкция IN в запрросе - не самая быстрая. Посмотрите, недавно Sta1ker приводил данные своего тестирования для MySQL. http://forum.vingrad.ru/forum/topic-165156.html Подумайте о том, что усложняются и все остальные операции: добавления, удаления статей, выбора всевозможной статистики. Вы лишаете себя возможности сделать что бы то ни было, связанное с полем seealso, одним запросом. -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
||||
|
|||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |