Составные первичные ключи или суррогаты при работе с датой / временем - PullRequest
0 голосов
/ 13 января 2012

Я видел много дискуссий по этому поводу. Я просто ищу ваши предложения по этому поводу. По сути, я использую PHP и MySQL. У меня есть таблица users, которая выглядит так:

         users
------------------------------
uid(pk) | username | password
------------------------------
   12   |  user1   | hashedpw
------------------------------

и другая таблица, в которой хранятся обновления пользователя

                updates
--------------------------------------------
uid |        date         |     content
--------------------------------------------
 12 | 2011-11-17 08:21:01 | updated profile
 12 | 2011-11-17 11:42:01 | created group
--------------------------------------------

На странице профиля пользователя будут отображаться 5 последних обновлений пользователя. Вопросы:

  1. Для таблицы updates можно ли установить uid и дата в качестве составных первичных ключей с uid ссылка uid от users
  2. ИЛИ было бы лучше просто создать еще один столбец в updates, который автоматически увеличивается и будет использоваться в качестве первичного ключа (в то время как uid будет FK для идентификатора в users)?

Ответы [ 2 ]

2 голосов
/ 13 января 2012

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

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

Что касается необычных первичных ключей: не делайте этого, это почти всегда приходит вам в голову, и вам придется проделать большую работувпоследствии добавить правильный автоинкрементный ключ.

0 голосов
/ 13 января 2012

Это зависит от требования, но третья возможность заключается в том, что вы можете сделать ключ (uid, date, content). Вы также можете добавить суррогатный ключ, но в этом случае вы, вероятно, захотите реализовать оба ключа - составной и суррогатный - а не только один. Не делайте ошибку, думая, что вы должны сделать один или / или выбор.

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

...