Я создаю CMS для сайта, который будет содержать новости и различные темы для новостных страниц. Поэтому я создавал одну таблицу для каждой темы (спорт, литература и т. Д.), Чтобы иметь более чистую и лучшую организацию баз данных (я думал). Но я недавно узнал о реляционных базах данных и выяснил, что можно достичь той же задачи с меньшим количеством таблиц (всего 2 темы и содержимого таблиц) и, следовательно, меньше кода (что отлично). Но моя забота заключается в том, что, поскольку этот веб-сайт со временем может иметь сотни или, может быть, тысячи страниц, безопасно, чисто и нормально иметь столько страниц в одной таблице? Зная, что когда-нибудь кто-то может взломать сайт и ПОКАЗАТЬ этот стол, и я потеряю все сообщения. Итак, есть ли более чистый и безопасный способ для решения этой задачи, но при этом используется концепция реляционных баз данных?Организация реляционных баз данных
ответ
Короткий ответ: Да. Как говорит JLo в комментарии выше, при разработке структуры базы данных вы не должны думать главным образом о безопасности; В основном, речь идет об эффективности хранения данных (т.е. нормализации).
Если хакер может попасть в вашу базу данных, это проблема, независимо от того, какие таблицы они могут получить. Поэтому с точки зрения безопасности, сосредоточьте свою энергию на предотвращении инъекций и нападений базы данных в первую очередь. Чтобы попытаться разделить ваши данные на разные таблицы, чтобы защитить их от хаков, это как хранить золото в десяти разных хранилищах банков для защиты от ограблений банков; это security through obscurity, и он работает против вас на каждом шагу.
Вместо этого, с точки зрения безопасности:
- Инвестируйте в аудит безопасности для кода сервера, если он уже написан. Эксперт может указать вам на фрагменты кода, которые могут иметь последствия для нежелательного доступа к базе данных и точно указать, почему. Я бы сказал, что опыт обучения, который вы получаете от аудита, еще более ценен, чем конкретные конкретные рекомендации, которые они делают.
- Google SQL injection и прочитайте все, что возможно, по теме. Эта методика заключается в том, как происходит большинство хабов базы данных, и очень важно, чтобы вы были более чем знакомы с тем, что это такое, какой уязвимый код выглядит и как писать код, который защищает его.
- Настройте отличные резервные системы резервирования баз данных. Не менее 2 отдельных сохраненных в 2 разных местах. Если какой-либо из хакеров взломает одну из ваших таблиц, то это станет основным неудобством, а не бизнес-прерывателем.
В терминах нормализованной strucutre данных:
- магазин одни и те же данные в форме, в том же месте. До тех пор, пока все страницы могут быть описаны/определены в терминах одних и тех же столбцов в таблице, полностью сохраните их в одной таблице.
- Узнайте о показателях и индексах Mysql. Плохо проиндексированная/плохо структурированная база данных может останавливаться при низком трафике и менее миллиона строк в крупнейших таблицах; хорошо проиндексированный может вести себя хорошо с миллиардами строк. Эта проблема становится больше по мере увеличения трафика, поэтому, надеюсь, ваш бюджет растет соответственно и позволяет вам получить экспертную помощь по этому вопросу. Проблемы с производительностью могут внезапно поднимать голову, поэтому стоит много узнать о них, прежде чем они разбивают ваш сайт.
- Не беспокойтесь о количестве строк. Основная проблема здесь - производительность; см. выше. Реляционные базы данных созданы для обработки больших таблиц; это их основной вариант использования. С базовыми методами индексирования (например, добавьте индекс в каждый столбец внешнего ключа и любой другой столбец, который обычно запрашивается против (но столбцы первичного ключа уже проиндексированы, поэтому они не нужны)), вы должны иметь возможность сделать это до 1M- 10M без серьезных проблем с производительностью.
- Найдите способ сравнения ваших запросов с реальными данными. Некоторые оптимизации производительности очевидны, но, как говорится, premature optimization is the root of all evil. Например, при написании своих запросов выполните некоторые экспериментальные эксперименты, чтобы понять, более ли важно иметь меньше запросов (которые больше/имеют больше JOIN) или более запросов (которые меньше и быстрее). Как правило, меньшее количество запросов лучше, но есть ряд случаев, когда ваше приложение не соглашается ;-) поэтому у вас есть инфраструктура, чтобы проверить ее самостоятельно. То же самое при добавлении индексов; бенчмаркинг может дать вам хороший смысл в отношении того, какие индексы воздействия имеют в вашей базе данных, и что смысл кишки - очень ценная вещь.
Я бы поднял это дважды, если мог. Это хороший совет для тех, кто только начинает немного учиться о создании реляционных баз данных. – JLo
Спасибо JLo! По моему опыту, лучший способ наладить знакомство с Mysql - это иметь GUI, например SequelPro, чтобы вы могли играть с запросами, добавлять индексы самостоятельно и так далее. Кажется, что многие проекты в наши дни (особенно в мире Rails) получают доступ к базе данных косвенно через консоль, сценарии миграции и т. Д .; это расстояние от базы данных действительно затрудняет понимание того, что происходит. –
@TopherHunt благодарит за помощь, это очень полезно, и я обязательно найду инструмент управления базами данных (для Linux) с графическим интерфейсом, чтобы узнать, могу ли я больше сосредоточиться на дизайне и иметь более «прямой контакт», с базой данных, чтобы я мог улучшить свои навыки. Еще раз спасибо. – Yuran
Поскольку этот сайт может со временем иметь сотни или, возможно, тысячи страниц, безопасно, чисто и нормально иметь столько страниц в одной таблице?
Пока ваши индексы верны, вы можете хранить миллионы страниц в базе данных.
Зная, что когда-нибудь кто-то может взломать сайт и отброшенных стол, и я бы развязывать все сообщения.
Использование одной или тысячи таблиц здесь не имеет значения, если вы можете отбросить один стол, вы можете бросить их все.
- 1. Нормализация реляционных баз данных
- 2. реляционных баз данных Исчисление
- 3. Блокировка реляционных баз данных
- 4. Моделирование реляционных баз данных
- 5. Организация разработки баз данных
- 6. реляционных баз данных Дизайн (MySQL)
- 7. реляционных баз данных Дизайн (MySQL)
- 8. Mysql синхронизации реляционных баз данных
- 9. реляционных баз данных Дизайн (MySQL)
- 10. Проектирование реляционных баз данных цикл
- 11. NoSQL против реляционных баз данных
- 12. реляционных баз данных с PHP
- 13. Django Поиск реляционных баз данных
- 14. проектирования реляционных баз данных Понимание
- 15. Исследователь/визуализация данных реляционных баз данных?
- 16. реляционных баз данных и нормализации для реляционных таблиц
- 17. ли разложение обратимого для реляционных баз данных
- 18. Использование LINQ для поиска реляционных баз данных
- 19. Как хранить географические адреса реляционных баз данных?
- 20. Объединение в систему реляционных баз данных
- 21. Преобразование реляционных баз данных в базы графиков
- 22. MVC с сопоставлением реляционных баз данных EF
- 23. реляционных баз данных и составные ключи
- 24. реляционных баз данных массивов (H2, Java)
- 25. реляционных баз данных и OOP Javascript
- 26. Доступ Redis из реляционных баз данных
- 27. Как сделать Laravel ORM реляционных баз данных
- 28. Правильный способ для моделирования реляционных баз данных
- 29. Тройной магазин против реляционных баз данных
- 30. Плюсы/минусы баз данных на основе баз данных и реляционных баз данных
Вы путаете две темы из того, что я вижу. Вы не должны компрометировать хороший дизайн только потому, что вас беспокоит БЕЗОПАСНОСТЬ. Это две совершенно разные вещи. С точки зрения дизайна достойный механизм базы данных, такой как mySQL или SQL Server, может обрабатывать миллионы и миллионы строк в одной таблице. Ваше оборудование может быть более ограничивающим фактором. – JLo
Если вы беспокоитесь о том, что хакеры «отбрасывают таблицы», вы берете регулярные резервные копии .... но хакеры могут потерять много таблиц так же легко, как они могут отбросить одну таблицу. –
@JLo жаль, что я должен изменить заголовок? – Yuran