@malan: Есть мнение что тупняки начинаются при количестве ~150 000+ таблиц в одной дб.
Никто не мешает сразу сделать несколько баз + маппинг пользователя на конкретную базу.
Это даст возможность потом дешево и просто раскидывать пользователей по разным базам/разным серверам.
@malan: кстати подумал - если у вас юзеры так изолированы друг от друга - может вам проще и дешевле будет каждому пользователю сделать набор своих таблиц? или даже свою database для каждого пользователя? Заодно и масштабировать потом это будет просто и легко.
@ugodrus: В принципе подход автора понятен. Использование view это конечно редкостный идиотизм, а вот использовать хранимки безопасно реализующие необходимую логику - вполне неплохое решение.
Подключение к базе идет от пользователя которому запрещен доступ к таблицам, он может работать только через хранимки, которые осуществляют в том числе и всю проверку безопасности.
Таким образом была когда то реализована внутренняя база qip.ru :)
1. Как это влияет на быстродействия я навскидку не знаю, но это нетрудно протестировать самостоятельно.
2. Я категорически считаю что это неправильно. Вы реально собираетесь создавать по паре десятков Views для каждого пользователя? А потом следить за их корректностью? А потом у вас поменяется база и придется перегенерить все views? Зачем это все?
Вы же не пускаете пользователей напрямую в БД. Пользователи работают с каким то интерфейсом.
Логично в него зашить все проверки?
ОК, если вы не доверяете даже клиенту - сделайте хранимку которая возвращает данные по какому то не подбираемому идентификатору юзера (токену, userid+хеш пароля, еще как то)
Это в любом случае будет на порядки проще в пооддержке чем куча views.
@malan: вы не доверяете коду который ходит в бд? Мне кажется что views все таки для другого предназначены. Может быть Вам посмотреть в сторону хранимых функций?
@hamaxus а зачем начальнику знать что такое http запрос, запросы в бд и так далее?
Знаний достаточных что бы контролировать вашу работу он все равно таким образом не получит.
Он должен понимать процесс на уровне "hamaxus сейчас делает страницу с формой поиска, закончит её делать через 6 часов, потом будет делать страницу результатов поиска."
Вы бы ему лучше что то дали почитать про методологии управления, agile и все такое.
@whats: запрос который вы привели, рассчитает RAND() для каждой строки удовлетворяющей MATCH.
По условиям автора - это не приемлимо, т.к в выборку попадает большая часть базы.
Смысл кода ROUND(RAND()) =1 от меня вообще ускользает - смысл выкидывать ~половину значений?