есть ли смысл объявлять этот столбец уникальным? - PullRequest
1 голос
/ 09 июля 2011

Когда я обращаюсь к таблице за рубежом, есть ли смысл объявлять этот столбец уникальным?

Я имею в виду, конечно, тот столбец, на который я ссылаюсь, является уникальным.

Ответы [ 4 ]

3 голосов
/ 09 июля 2011

Да, представьте следующий сценарий:

Поле id таблицы 1 - это ваш внешний ключ. Это уникальный индекс.

Table 1:
________________________  
| id |  value | blah... |  
|----|--------|---------|  
| 0  |  val 1 | ....    |  
|----|--------|---------|  
| 1  |  val 2 | ....    |  
|----|--------|---------|  
 ...    ...       ...

Теперь есть две возможности с таблицей 2.

1) table_1_id не является уникальным

Table 2:
_____________________________
| id |  table_1_id | blah... |  
|----|-------------|---------|  
| 0  |      1      | ....    |  <------ Duplicates are okay!
|----|-------------|---------|  <--/
| 1  |      1      | ....    |  
|----|-------------|---------|  
 ...    ...       ...

2) table_1_id уникален

Table 2:
_____________________________
| id |  table_1_id | blah... |  
|----|-------------|---------|  
| 0  |      1      | ....    |  
|----|-------------|---------|  
| 1  |      n      | ....    |  <------- Cannot be 1, no duplicates
|----|-------------|---------|  
 ...    ...       ...
1 голос
/ 09 июля 2011

Уникальные ограничения обычно создаются с целью обеспечения соблюдения правил, регулирующих ваши данные, как сказал @yi_H. Однако, поскольку уникальные ограничения эквивалентны уникальным индексам, есть некоторые плюсы и минусы их создания. Индекс в поле потребует больше времени для выполнения вставок или обновлений в этом поле, так как индекс должен будет проверяться на наличие дубликатов и обновляться. Индекс также увеличит размер вашей таблицы. С другой стороны, если вы выполняете запросы, основанные на значении этого поля (т.е. WHERE myUniqueField = 5 или JOIN myTable ON myUniqueField = someOtherIndexedField), эти запросы будут выполняться намного быстрее, поскольку они могут выполнять поиск по индексу вместо сканирования. Эти соображения вступают в силу только тогда, когда у вас большой объем данных или вам нужно быстро выполнить много запросов. Поэтому, как правило, если у вас есть поле, которое должно быть уникальным, установите его как уникальное.

1 голос
/ 09 июля 2011

несколько записей могут ссылаться на одну строку в другой таблице, и это совершенно правильный дизайн дб (отношение 1: M).Поэтому вопрос в том, должно ли поле во второй таблице быть уникальным или нет.И не ясно из вопроса, каковы ваши соображения производительности

1 голос
/ 09 июля 2011

Вы объявляете его уникальным, если хотите, чтобы он был уникальным.

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