Лучшие практики архитектуры Mysql: пользовательские атрибуты - PullRequest
1 голос
/ 05 декабря 2010

У меня есть таблица mysql с моими пользователями ... у каждого пользователя есть различные атрибуты, такие как Проверено (да / нет), Член (да / нет) и т. Д. Мне не нужно объяснять больше .. Это очень распространенный случай. ..

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

userId | userName | Verified | Member
---------------------------------------
  3213 | Jon      | 1        | 0

но мне интересно, есть ли какие-то преимущества, чтобы встроить его в отдельные таблицы и создать отношения позже, например

Таблица пользователей

userId | userName | 
-------------------
  3213 | Jon      | 

Таблица участников

memberId | userId   | Member   |
--------------------------------
  555748 | 3213     | 0        |

Таблица проверок

memberId | userId   | Verified   |
----------------------------------
  555748 | 3213     | 1          |

Какова реальная выгода от этого второго выбора?

Ответы [ 4 ]

4 голосов
/ 05 декабря 2010

Здесь нет реального преимущества, только недостатки. Между таблицами существует соотношение 1: 1, и теперь вам нужно объединить две таблицы, чтобы получить состояние проверки пользователя. Кроме того, теперь возможны и другие случаи: пользователь может быть проверен (1), не проверен (0) или запись может не существовать.

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

2 голосов
/ 05 декабря 2010

Сделайте это первым способом, он потребляет меньше места и, вероятно, также быстрее, если это соотношение 1: 1.

0 голосов
/ 05 декабря 2010

Я бы, наверное, немного упростил это. Поскольку нет никакого значения в наличии флага, который указывает членство / проверку. Разделение таблицы делает это для вас. Кроме того, вам не нужно иметь userId в каждой таблице. Возможно, у вас есть таблица UserMember, которая содержит как личность пользователя, так и участника Поэтому достаточно иметь отношения.

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

0 голосов
/ 05 декабря 2010

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

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