о дизайне базы данных - PullRequest
       2

о дизайне базы данных

2 голосов
/ 06 марта 2011

Мне нужна идея о дизайне моей базы данных.У меня есть около 5 полей для основной информации о пользователе, такой как имя, адрес электронной почты, пол и т. Д. Затем я хочу иметь около 5 полей для дополнительной информации, такой как идентификаторы мессенджера.И 1 необязательное текстовое поле для информации о пользователе.Должен ли я создать только одну таблицу со всеми полями вместе, или я должен создать отдельную таблицу для 5 необязательных полей, чтобы избежать избыточности и т. Д.?Спасибо.

Ответы [ 5 ]

1 голос
/ 06 марта 2011

Я буду придерживаться только одного стола.

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

И я действительно не понимаю, как это может быть излишним;)

0 голосов
/ 06 марта 2011

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

Разделение этой таблицы на две или более таблиц является примером вертикального разбиения и в этом случае, вероятно, будетпреждевременная оптимизация.Тем не менее, этот метод может быть полезен, когда у вас есть столбцы, которые нужно запрашивать только в течение некоторого времени, например.большие двоичные объекты.

0 голосов
/ 06 марта 2011

Это зависит от того, сколько людей будет располагать всей этой необязательной информацией, и планируете ли вы добавить дополнительные поля. Если вы думаете, что собираетесь добавить больше полей в будущем, было бы полезно переместить эту информацию в мета-таблицу, используя шаблон EAV: http://en.wikipedia.org/wiki/Entity-attribute-value_model

Итак, если вы не уверены, ваш стол будет выглядеть как

User : id, name, email, gender, field1, field2
User_Meta : id, user_id, attribute, value

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

Примечание: Это окупается ТОЛЬКО если у вас много малонаселенных необязательных полей. В противном случае это в одном поле

0 голосов
/ 06 марта 2011

Я бы создал только одну таблицу для дополнительных полей.Но не с 5 полями, а с отношением внешнего ключа к базовой таблице и информации о ключе / паре.Что-то вроде:

create table users (
    user_id integer,
    name varchar(200),
    -- the rest of the fields
)

create table users_additional_info (
    user_id integer references users(user_id) not null,
    ai_type varchar(10) not null, -- type of additional info: messenger, extra email
    ai_value varchar(200) not null
)

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

0 голосов
/ 06 марта 2011

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

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