MySQL дизайн базы данных, два типа записей - использовать одну таблицу или две отдельные таблицы? - PullRequest
0 голосов
/ 07 апреля 2011

Я создаю приложение, в котором будет два разных типа пользователей, давайте назовем одного User_type_a , а другого User_type_b . Мне интересно, должен ли я создать 1 таблицу в своей базе данных для обоих типов пользователей и иметь свойство, определяющее тип пользователя для каждой записи, или мне нужно создать две отдельные таблицы для каждого типа пользователя.

соображения: 1. 99% всех пользователей будут User_type_a 2. Для User_type_b потребуются свойства в дополнение к User_type_a (например, номера кредитных карт и т. Д.)

Какой подход к дизайну является оптимальным? Или это действительно не имеет значения.

Ответы [ 5 ]

2 голосов
/ 07 апреля 2011

Если тип B имеет только дополнительную информацию (столбцы) для общего пользовательского типа, тогда используйте: enter image description here

Если типы A и B имеет несколько общих столбцов и набор отдельных столбцов для каждого, затем используйте enter image description here

В обоих случаях все общие столбцы сохраняются в таблице User - в таблицах подтипов есть только столбцыспецифичные для каждого.Обратите внимание, что UserID распространяется на таблицы подтипов.

2 голосов
/ 07 апреля 2011

Одна таблица для пользователей, при условии, что тип пользователя b является реальным пользователем. Создайте другую таблицу, которая ссылается на пользовательскую таблицу для хранения сведений о CC для пользователя типа B.

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

Обратите внимание, что если вы храните номера кредитных карт, ваш центр обработки данных и архитектура должны быть PCI-совместимыми , что дорого.

1 голос
/ 07 апреля 2011

Похоже, что User_type_a и User_type_b идентичны с точки зрения данных, за исключением того, что User_type_b имеет дополнительные данные сверх User_type_a (но у User_type_a нет таких уникальных данных, как этот).

Учитывая это, я бы создал одну таблицу пользователей, в которой хранятся данные User_type_a (то есть пересечение двух пользовательских типов).Затем создайте вторую таблицу для дополнительных данных User_type_b с внешним ключом, связывающим его с пользователями.(Обратите внимание, что здесь нет таблицы в таблице пользователей, определяющей, какие пользователи какого типа.)

Как определить разницу между двумя типами пользователей?Просто: у User_type_b есть связанная строка во второй таблице;User_type_a нет.Это облегчает для любых функций приложения, которые не заботятся о разнице, просто получить общие пользовательские данные для всех, в то время как функции, которые нуждаются в дополнительных данных User_type_b (или иначе заботятся только об одном типе или другом), могут все еще определять, ктоэто какой тип и получить эти дополнительные данные.

1 голос
/ 07 апреля 2011

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

**USER TABLE**
NAME     AGE       TYPE     FK
Grant    25        Adult    1
Susan    4         Child    null
John     65        Adult    2

**EXTRA TABLE**
FK    CREDITCARD    OTHER
1     234234...     blah
2     2334...       blah

Это было бы более эффективно с пространством.

0 голосов
/ 07 апреля 2011

Используйте одну таблицу. Они оба пользователи. Ваш код будет иметь более общее использование между обоими типами, поэтому вам не придется выполнять 2 sql запросов при работе с пользователями (даже если они не актуальны в 99% случаев)

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