Действительно ли неблагоразумно присвоить базу данных MySQL каждому пользователю на моем сайте?

Волшебно решил себя после того, как дал ему полдня.

8
задан niton 16 April 2015 в 15:12
поделиться

10 ответов

Используйте одну базу данных.

Используйте одну таблицу для содержания пользователей и одной таблицы для содержания кавычек.

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

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

Таблица в середине будет содержать внешние ключи пользователю и заключать таблицы в кавычки.

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

Запустите с них...

Что такое нормализация?

Что важно для учета при разработке базы данных

Сколько полей 'слишком многие'?

Больше таблиц или больше столбцов?

37
ответ дан 3 November 2019 в 12:13
поделиться

Две проблемы со многими базами данных (на самом деле намного больше, но запускаются с них.)

  1. Вы не можете использовать параметры для имен базы данных.

  2. Что Вы сделаете whe, который Вы вносите своим первым изменением в таблицу? (Подсказка: Работа X (# базы данных)).

И "много таблиц" предполагает, что Вы думаете о таблицах на пользователя. Это - другая одинаково проблематичная идея.

5
ответ дан 3 November 2019 в 12:13
поделиться

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

2
ответ дан 3 November 2019 в 12:13
поделиться

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

Но если Вы пишете код для взаимодействия через интерфейс с базой данных, не ими, затем что Вы хотите, нормализованные таблицы, как описано в нескольких других ответах здесь.

1
ответ дан 3 November 2019 в 12:13
поделиться

Я должен использовать одну базу данных и много таблиц в той базе данных, или многих базах данных и немногих таблицах для каждой базы данных?

Ни один, необходимо использовать одну базу данных, с таблицей для пользователей, таблицей для кавычек, таблицей для уровней, и т.д.

У Вас затем есть столбец в (например). Ваша таблица кавычек, которая говорит, для которого пользователь кавычка.

CREATE TABLE user (
    user INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ...
);

CREATE TABLE quote (
    quote INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user INT(10) UNSIGNED NOT NULL,
    ...
);

CREATE TABLE rate (
    rate INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user INT(10) UNSIGNED NOT NULL,
    ...
 );

Вы затем используете SQL JOINs в Вашем SELECT операторы для соединения таблиц.

РЕДАКТИРОВАНИЕ - вышеупомянутое принимало many-one отношения между пользователями и уровнями - где существуют 'many-many' отношения, Вам нужны таблица для каждого вида данных и затем другая таблица со строками для каждого Пользователя <-> пара Уровня.

7
ответ дан 3 November 2019 в 12:13
поделиться

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

0
ответ дан 3 November 2019 в 12:13
поделиться

Каково различие между многими таблицами в одной базе данных или многих базах данных с теми же таблицами? Это для лучшей безопасности или для различных типов резервных копий?

Я не уверен в MySQL, но в MSSQL он похож на это:

  • Если необходимо скопировать базы данных другим способом, необходимо рассмотреть таблицы хранения в различных файлах данных. По умолчанию они все находятся в ОСНОВНОМ файле. Можно указать другое устройство хранения данных.

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

0
ответ дан 3 November 2019 в 12:13
поделиться

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

0
ответ дан 3 November 2019 в 12:13
поделиться

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

CREATE TABLE quotesSubmtited (
   userid INTEGER, 
   submittime DATETIME, 
   quote INTEGER,
   quotedata INTEGER, 
   PRIMARY KEY (userid, submittime),
   FOREIGN KEY quote REFERENCES quotesList (quoteId),
   FOREIGN KEY userid REFERENCES userList (userId)
);

CREATE INDEX idx1 ON quotesSubmitted (quote);

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

Я также предполагаю, что Вы не знаете о СОЕДИНЕНИЯХ и ВНЕШНИХ КЛЮЧАХ, так удостоверьтесь, что Вы читаете о них также. Довольно полезный!

0
ответ дан 3 November 2019 в 12:13
поделиться

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

-1
ответ дан 3 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: