У меня есть две разные таблицы, и я не уверен, что лучше всего вывести их из первой нормальной формы во вторую нормальную форму. Первая таблица содержит информацию о пользователе, а вторая — продукты, связанные с учетной записью. Если я сделаю это таким образом, я знаю, что это только в NF1, и что внешний ключ User_ID будет многократно повторяться в таблице 2. См. Таблицы ниже.
Table 1
|User_ID (primary)| Name | Address | Email | Username | Password |
Table 2
| Product_ID (Primary Key) | User_ID (Foreign Key) |
Это лучший способ сделать таблицу два, в которой идентификатор пользователя не повторяется? Я думал о том, чтобы иметь отдельную таблицу в базе данных для каждого пользователя, но из всех других вопросов, которые я читал на StackOverFlow, это не очень хорошая идея.
Ограничения, с которыми я работаю, составляют 1-1000 пользователей, а таблица 2 будет иметь приблизительно 1-1000 индексов на пользователя. Есть ли лучший способ создать этот набор таблиц?
Я не вижу NF2 нарушенным. Говорится:
таблица находится в 2NF, если она в 1NF, и ни один непростой атрибут не зависит от какого-либо надлежащего подмножества любого ключа-кандидата таблицы.
цитата из статьи в Википедии «Вторая нормальная форма», 2016-11-26
Таблица 2 имеет только один ключ-кандидат, первичный ключ. Первичный ключ состоит только из одного столбца. Таким образом, нет подходящего подмножества ключа-кандидата. Таким образом, NF2 не может быть нарушен, если NF1 не выполняется.
вы говорите «сделать таблицу два, в которой идентификатор пользователя не повторяется»
тогда почему ты не делаешь
Table 1
|User_ID (primary)| Name | Address | Email | Username | Password | Product_ID ( Foreign Key nullable)|
Table 2
| Product_ID (Primary Key)|
Нет ничего плохого в том, что значение появляется много раз. Избыточность возникает, когда два запроса, которые не являются синтаксически эквивалентными, всегда возвращают одно и то же значение. Только неконтролируемая избыточность — это плохо. Нормализация контролирует некоторую избыточность, заменяя таблицу более мелкими, которые присоединяются к ней.
Нормализация разбивает таблицу независимо от других таблиц. (Мы определяем нормальную форму базы данных как самую низкую нормальную форму, в которой находятся все ее таблицы.) Внешние ключи не имеют ничего общего с нарушением нормальных форм.
Узнайте, что значит для таблицы быть в заданной нормальной форме. Вам нужно будет выучить определение. И определения терминов, которые он использует. И определения терминов, которые они используют. И т.п. Таблица в 2NF, когда каждыйпростое число колонка имеет функциональная зависимость то есть полный на каждом ключ-кандидат. Также изучите алгоритм разбиения таблицы на компоненты в заданной нормальной форме. Предполагая, что эти таблицы могут содержать более одной строки, так что {} не является ключом-кандидатом, обе эти таблицы находятся в 2NF.
Таблица в 2NF также в 1NF. Так что вы не хотите «вытащить это из первой нормальной формы».
2NF не имеет значения. При работе с функциональными зависимостями важен BCNF, который максимально разлагается, но требует определенных более дорогих ограничений, и 3NF, который не разлагается настолько сильно, насколько это возможно, но требует определенных более дешевых ограничений.