Это плохая практика хранить несколько идентификаторов в одном столбце таблицы - PullRequest
2 голосов
/ 19 августа 2011

Я работаю над проектом, в котором в базе данных есть несколько таблиц, содержащих поле type_id, в котором хранятся идентификаторы из нескольких таблиц

, например:

id | table_type | table id
==============================
1    ADDRESS      1
2    ADDRESS      2
3    CITY         1
4    CITY         2
4    ADDRESS      3
5    COUNTRY      1

, в котором содержится поле table_idлибо идентификатор из таблицы адресов, либо из таблицы городов, либо из таблицы стран

Мне просто интересно, хороший ли это дизайн.или я должен избегать этого, когда это возможно?

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

Ответы [ 3 ]

3 голосов
/ 19 августа 2011

Ответ:

Это зависит.

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

0 голосов
/ 19 августа 2011

Посмотрите, tTif вы можете создавать ключи со значениями, которые у вас есть.

в этом случае вы можете сделать комбинацию table_type и table id первичным / уникальным ключом.

Хотя, если table_type может быть только одним из нескольких значений, возможно, сохраните типы как enum?

0 голосов
/ 19 августа 2011

Это похоже на запутанный дизайн. Если у каждой из таблиц Address, City и Country есть собственное поле id, то в таблицах, которые ссылаются на них, должно использоваться имя столбца, например Address_id, City_id и Country_id - соответственно.

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

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