Мой сценарий состоит в том, чтобы иметь таблицу для регистрации и сообщения о некоторых важных параметрах, которые пользователи могут изменять в наборе поддерживаемых нами сайтов (каждый сайт имеет собственную БД). Когда я разрабатывал таблицу (которая будет развернута на каждом БД), я был смущен, если мне нужен Primary Key
или нет. У меня есть столбец с именем SiteID
, и каждая строка в таблице регистрации будет иметь SiteId
, newVal of Setting
, oldVal of setting
, Change date
. Я буду использовать это, чтобы просматривать историю изменений на Сайте, фильтровать изменения по дате и т. Д. Таким образом, в этом случае, очевидно, SiteId
не может быть PK
, но действительно ли мне нужно добавить новый столбец, например LogId
, чтобы создать композитный P
K? Я что-то пропустил здесь?Нет первичного ключа и составного первичного ключа
ответ
Вам нужно сосредоточиться на своем прецеденте, первичный ключ хорош, как упоминал ее.
Если вы уверены, что можете избежать дублирования данных (например: со стороны приложения), и вы знаете свои данные и знаете, какой тип индекса и т. Д. Вам нужно, вы можете легко избежать этого, в основном, если вы говорите о массовом сканировании и когда дублирование данных не возникает.
В большинстве баз данных MPP (база данных, предназначенных для отчета, например: vertica) первичный ключ является необязательным. Итак, в нижней строке, если вы знаете свои данные и прецеденты, первичные ключи в чем-то можно избежать
Спасибо.
Я хотел бы сделать схему, как этот
{SiteId, версия, Установка, изменение даты}
As, старые настройки вы можете найти в предыдущей версии так держать значение на каждая версия в порядке.
Конечно, вы можете также использовать дату изменения, чтобы быть PK, как показано ниже:
{SiteId, Изменение даты, Установка}
Если дата включает время и ваш сценарий позволяет это, используя дату и siteID лучше.
Что произойдет, если у меня нет первичного ключа? Это повлияет на меня в этом сценарии? – AdCan
Вы потеряете все отношения между другой таблицей. Кроме того, перферманс будет медленнее. – Kason
У меня нет связи с другой таблицей, так как это используется для отчетности, и все необходимые данные присутствуют в этой таблице сами по себе. Вкладывания случаются раз в то время и будут максимальными 5 в день. – AdCan
Стол без дубликатов строк всегда имеет как минимум один ключ-кандидат. Мы можем выбрать один для объявления через PRIMARY KEY
; любые другие - через UNIQUE NOT NULL
. (UNIQUE NOT NULL
- это ограничение, которое вы получаете от декларации PRIMARY KEY
.) Если вы не сообщите СУБД о ваших ключах-кандидатах, то это не поможет вам, например, уменьшить ошибки, предотвращая дублирование или улучшая производительность, неявно определяя индекс на его столбцах.
Непонятно из вашего вопроса, как вы записываете, какие настройки заданы для новых значений &. Если ваши столбцы siteId
, setting
, newValue
, oldValue
& changeDate
тогда у вашей таблицы есть один ключ кандидата, (siteID, setting, changeDate)
. Как единственный ключ кандидата, это первичный ключ. Если заданные значения определяют настройки, чтобы ваши столбцы составляли siteId
, newValue
, oldValue
& changeDate
тогда у вас есть два ключа-кандидата, (siteID, newValue, changeDate)
и (siteID, oldValue, changeDate)
. Каждый должен получить ограничение UNIQUE NOT NULL
. Можно было бы сделать заявление PRIMARY KEY.
Если вы добавили еще один столбец уникальных/суррогатных/идентификационных значений, тогда в таблице есть другой ключ-кандидат. Как и прежде, все они ограничены с помощью ограничения UNIQUE NOT NULL
, один из которых может быть выражен через PRIMARY KEY
. Есть причины для добавления такого уникального столбца/суррогата/идентификатора, но это не потому, что нет первичного ключа, если в таблице не было бы дубликатов строк.
Все лица таблицы должны иметь PK, а не все таблицы. В журналах истории/журналов обычно нет ПК, поскольку они представляют события, а не сущности. (Скорее, им не нужен ПК. Я видел, как они были определены с одним (как правило, автоматически сгенерированы), но мне еще нужно увидеть значение, используемое в запросе. Насколько я мог сказать, они совершенно лишний.)
В каких таблицах истории и журналов do есть поле временной метки и поле, представляющее, какое событие имело место. Остальная часть записи будет иметь некоторую информацию о сущности, включая объект PK, и другие данные, относящиеся к событию, - как до, так и после значений, таких как указанный OP.
Столбец временной метки будет проиндексирован вместе с идентификатором объекта (чтобы можно было проверить все события, произошедшие на определенном объекте за период времени) и/или идентификатор события (чтобы можно было проверить все объекты на которое в течение определенного периода времени имело указанное событие). Все это зависит от типа информации, необходимой из таблицы.
Это действительно помогает. Я думаю, что в первом абзаце дается объяснение тому, с чем меня смутили. – AdCan
- 1. Обновление составного первичного ключа
- 2. Наложение наложения JPA и составного первичного ключа
- 3. Создание пользовательского составного первичного ключа в django
- 4. Добавление внешнего ключа и составного первичного ключа в jpa?
- 5. Ошибка восстановления первичного ключа MySQL первичного ключа
- 6. дизайн первичного ключа cassandra
- 7. Kohana 3.2 проверки составного первичного ключа
- 8. ALTER TABLE для добавления составного первичного ключа
- 9. Лучший способ определения составного первичного ключа
- 10. Заказать одним из ключей составного первичного ключа
- 11. Определение составного первичного ключа в h2
- 12. Автоинкрементная Id на основе составного первичного ключа
- 13. Временная метка как часть составного первичного ключа?
- 14. Может ли свойство внешнего ключа быть частью составного первичного ключа?
- 15. GORM: Изменение от составного ключа для автоматического приращения первичного ключа
- 16. POJO для составного первичного ключа от внешнего ключа
- 17. Обновление первичного ключа и удаление первичного ключа + вставка
- 18. В чем преимущество использования составного первичного ключа вместо одного первичного ключа в этом контексте?
- 19. Сброс первичного ключа SQL?
- 20. sqlite без первичного ключа?
- 21. SQL - выбор первичного ключа
- 22. Получить ограничение первичного ключа и внешнего ключа
- 23. PHP Назначение первичного ключа и внешнего ключа
- 24. ошибка внешнего ключа и первичного ключа
- 25. Оператор выбора с использованием первичного ключа без первичного ключа
- 26. mysql duplicate entry для ключевого первичного, когда нет первичного ключа
- 27. Ввести значение столбца первичного ключа в столбец не первичного ключа
- 28. внешний ключ из составного первичного ключа и другой атрибут
- 29. JPA @Onetomany и @manytoone выборка из составного первичного ключа
- 30. Каковы преимущества поиска первичного первичного ключа
Если вы добавляете новые столбцы в PK, это не должно быть составным PK. Поскольку новые столбцы достаточно идентифицируются. – Kason
Я удалил посторонние теги базы данных. Не стесняйтесь добавлять тег для базы данных, которую вы фактически используете. –
Я рекомендую всегда иметь первичный ключ. В этом случае - столбец с автоинкрементами/идентификацией. –