Сохранение значений флажков в базе данных MySQL с последующим определением, установлены они или нет ... Какой метод лучше? - PullRequest
1 голос
/ 25 февраля 2010

У меня есть форма, где пользователи могут отправлять сайты и говорить, работают ли они в разных браузерах. В настоящее время это выглядит так:

<input type=checkbox name="browsers[]"  value="IE6"/>Internet Explorer 6<br/> 

<input type=checkbox name="browsers[]"  value="IE7"/>Internet Explorer 7<br/> 
<input type=checkbox name="browsers[]"  value="IE8" checked="checked"/>Internet Explorer 8<br/> <br/>
<input type=checkbox name="browsers[]"  value="FF2" checked="checked"/>Firefox 2<br/> 
<input type=checkbox name="browsers[]"  value="FF3" checked="checked"/>Firefox 3<br/> <br/>
<input type=checkbox name="browsers[]"  value="SA3" checked="checked"/>Safari 3<br/> 
<input type=checkbox name="browsers[]"  value="SA4" checked="checked"/>Safari 4<br/> <br/>
<input type=checkbox name="browsers[]"  value="CHR" checked="checked"/>Chrome<br/>  <br/>
<input type=checkbox name="browsers[]"  value="OPE" checked="checked"/>Opera<br/>  <br/>
<input type=checkbox name="browsers[]"  value="OTH" />Other Browsers<br/>  <br/>

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

<?php if (!$browsers['FF2'] = NULL) {
                //(Insert into field named 'FF2')

            } else {
                //(Keep field named 'FF2' as NULL)
            } ?>

Затем при посещении страницы сайта он просто проверяет каждый столбец базы данных (FF2, FF3, SA4 и т. Д.), Чтобы узнать, не является ли значение NULL. Если нет, то отобразится «Совместимо с FF2» и т. Д.

Это кажется мне немного нелогичным. Отдельные колонки для каждого браузера кажутся немного забавными - я не знаю, скептичен ли я или это действительно самый простой способ сделать это. Кто-нибудь может предложить какие-то другие методы?

Спасибо!

Jack

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Чтобы обеспечить гибкость, я бы установил отношение многие ко многим .

Так, например, иметь таблицу поддержки с browserId и websiteId внешние ключи , что означает, что веб-сайт, соответствующий websiteId, поддерживает браузер, соответствующий browserId. Тогда, очевидно, есть таблицы браузера и веб-сайта с идентификаторами и другой необходимой информацией.

1 голос
/ 25 февраля 2010

Это зависит от того, как часто вы думаете, что ваши варианты придется менять.

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

Google для 'One True Lookup Table' для подсказок на этом.

1 голос
/ 25 февраля 2010

Вы задали много вопросов, поэтому я отвечу на этот вопрос:
«Я хочу знать, что является наиболее эффективным способом хранения значений флажков в базе данных?»

Вы могли бы использовать MySQL BOOLEAN ... однако, вы, вероятно, могли бы оптимизировать, сохраняя все свои данные в одной переменной [битовое смещение и длинное целое число?], Поскольку логическое значение MySQL действительно 8 бит [короткое целое] ... у вас есть 10 истинных / ложных значений, то есть 80 битов, если вы используете логическое значение MySQL, где на самом деле вам нужно только 10.

Первый бит: работает в ie7
второй бит: работает в ie8
... и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...