2008 March 27

Val Petruchek

подписывайтесь, а то хуже будет!  

ПОДПИСЫВАЙТЕСЬ НА RSS

CMS: отношения между сущностями

27.03.08 @ 15:32 — Programming, CMS

Рассмотрим некую предметную область, в которой имеются две сущности: category и object. Теперь рассмотрим два типа отношений, которые могут между ними существовать: один-ко-многим и многие-ко-многим.

Отношение один-ко-многим означает, что объект может принадлежать только к одной категории. В реляционной модели данных это отношение представлется добавлением поля category_id в таблицу объектов. При этом можно с лёгкостью:
1) узнать, к какой категории относится объект;
2) получить список объектов, принадлежащих категории.

Отношение многие-ко-многим означает, что объект может находиться в нескольких категориях. В реляционной модели данных это отношение отражается при помощи дополнительной таблицы отношений с полями object_id, category_id. Каждая запись в этой таблице содержит информацию о том “факте”, что объект с ID = object_id находится в категории с ID = category_id.

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

Если же в предметной области нет необходимости получать информацию о том, какие объекты содержатся в категории, то можно не создавать эту дополнительную таблицу. В этом случае всё, что нам надо получать от этого отношения: список категорий, к которым принадлежит объект. Для этого в таблице объектов можно создать дополнительное поле category_ids, содержащее список ID категорий.

Формат этого списка может быть любым: ID с разделителями, bitmask, внутренний формат какого-нибудь языка (например, serialized array для PHP). Критерий к формату этого дополнительного поля один: удобство использования в CMS.

Отказ от использования дополнительной таблицы в пользу дополнительного поля позволяет сократить количество запросов для получения информации об объекте. Платой за такой обмен является невозможнсть использования внешних ключей и потеря целостности данных (точнее, необходимость ручной поддержки целостности): целостность в обмен на быстродействие.

В идеале front-end CMS должен учитывать тот факт, что данные из этого дополнительного поля могут содержать ID категорий, уже несуществующих в системе, и обрабатывать их соответстенно.

Существует способ получить быстродействие без отказа от целостности данных: завести дополнительное поле не вместо дополнительной таблицы, а в дополнение к ней. Хранить в этом поле следует тоже самое — список ID категорий, к к которым принадлежит объект. В данном случае платой за быстродействие является приобретённая избыточность данных.

Чтобы эта избыточность не привела к противоречивости (когда в поле и в таблице хранятся несовпадающие ID категорий) необходимо поддерживать актуальность поля categoy_ids, которое в данном случае представляет из себя кэш данных из таблицы отношений.

MTP

27.03.08 @ 13:13 — Software, Usability

Как-то незаметно у меня обновился Windows (их интерфейс обновления раздражает меня в винде больше всего) и Windows Media Player проапгрейдился до 10 версии.

Мне вообще-то пофиг, какая версия у Windows Media Playerа, которым я всё равно не пользуюсь: музыка в winamp, видео в GOM. Я вообще не замечал этого обновления, пока не обнаружил, что не могу записать музыку на плеер (обычный player, который при подключении по USB виделся как Mass Storage Device, т.е. флешка) привычным образом (т.е. с помощью File Managerов).

Симптомы: при USB-подключении вместо того, чтобы быть опознаным в качестве флешки (Mass Storage Device) плеер опознаётся виндой именно как плеерMTP (Media Transfer Protocol) device.

После подключения плеер не появляется в списке съёмных дисков, autorun предлагает запустить Windows Media Player для записи файлов на него. Подозреваю, что записать можно только музыкальные форматы, т.е. при таком использовании плеер из флешко-плеера превращается в просто плеер с неудобным интерфейсом добавления музыки.

Бесит. И неудобство интерфейса немного бесит, но гораздо сильнее бесит явное программное ограничение функциональности: я-то знаю, что моё железо может быть не только плеером, но и файлохранилищем; более того — до обновления Windows прекрасно поддерживал эту функциональность.

Посылаем луч любви в Редмонд (штат Вашингтон, США) и быстренько сносим WPD10 — Windows Portable Devices for Media Player 10, которое нам мешает пользоваться плеером привычным образом.

Мне помогло выполнение вот этих вот команд (из DOS-сессии):
net stop UMWdf

RunDll32 advpack.dll,LaunchINFSection C:\WINDOWS\RegisteredPackages\{981FB688-E76B-4246-987B-92083185B90A}\WPD10.inf,DefaultUninstall

regsvr32 /u C:\WINDOWS\RegisteredPackages\{981FB688-E76B-4246-987B-92083185B90A}\wpdmtp.dll

regsvr32 /u C:\WINDOWS\RegisteredPackages\{981FB688-E76B-4246-987B-92083185B90A}\wpdmtpus.dll

regsvr32 /u C:\WINDOWS\RegisteredPackages\{981FB688-E76B-4246-987B-92083185B90A}\wpdconns.dll

C:\WINDOWS\RegisteredPackages\{981FB688-E76B-4246-987B-92083185B90A}>sc delete umwdf

Не уверен, что нужны именно все они, но они все вместе сработали — после перезагрузки плеер снова стал опознаваться системой как USB Mass Storage Device.

Если у вас не получается отрубить ненавистный WPD10, попробуйте почитать про борьбу с ним на этом форуме.

  
Реклама::

 
Реклама::