Нормализация таблицы - PullRequest
       53

Нормализация таблицы

0 голосов
/ 21 октября 2011

Я пытаюсь создать простую программу регистрации, используя VB.Net и MySQL для своей базы данных. Вот моя простая таблица для базовой информации

enter image description here

Однако я пытаюсь улучшить свои базовые знания в области нормализации таблицы, и поэтому я отделил поле Дата, чтобы избежать, скажем, за один день, повторного ввода одной и той же даты. Я имею в виду, что когда 50 человек зарегистрировались в один день, он просто добавит одну дату (запись) в таблицу tblRegDate вместо того, чтобы добавлять ее в таблицу 50 раз. Есть какой-либо способ сделать это? Возможно ли это в VB.Net и MySQL? Или, скорее, я должен добавить или изменить какое-то поле? или я должен сделать условие в VB.Net? Таблица выше - то, чему научил меня мой друг, но я обнаружил, что это не устраняет избыточность. Пожалуйста, дайте мне любую инструкцию или направьте меня на сайт, где есть простое руководство для этого. Заранее спасибо!

вот мои коды MySQL:

CREATE TABLE tblInfo(
       Number INT AUTO_INCREMENT,
       LastName VARCHAR(45),
       FirstName VARCHAR(45),
       MiddleName VARCHAR(45),
       Gender ENUM(M,F),
       BirthDate DATE,
       PRIMARY KEY(Number));

CREATE TABLE tblRegDate(
       IDRegDate INT AUTO_INCREMENT,
       Date TIMESTAMP,
       Number INT,
       PRIMARY KEY(IDRegDate),
       FOREIGN KEY(Number) REFERENCES tblInfo(Number));

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Как я понимаю, в этом случае у вас нет преимуществ разделения одного поля.Вы потеряете много производительности.

Нормализация таблиц не сводится к отсутствию избыточного значения.Это больше о "Разделении проблем"

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

Вопрос: есть ли еще информация о регистрации?Например, веб-страница, IP, .....

Чем у вас должно быть две таблицы, например, «Персона» и «Регистрация».Тогда у вас будет две разные смысловые вещи, которые не следует путать.

Есть много примеров и информации, которые вы можете найти через Google.и википедия http://en.wikipedia.org/wiki/Database_normalization

1 голос
/ 21 октября 2011

Когда вы нормализуете структуры БД, всегда помните о ACID - http://en.wikipedia.org/wiki/ACID

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

А если вы перенесли таблицу FK RegDate в таблицу пользователя, это также неэффективно.

ps Также имейте в виду, что существует 4 уровня нормализации БД.Если вы новичок в разработке БД, вам следует изучить, как перевести дизайн БД с 1-й на 2-ю и с 2-й на 3-ю обычные формы.

Мы редко используем 4-ю обычную форму в реальной жизни.Транзакционные системы обычно остаются на третьем месте.

Надеюсь, что это имеет смысл.

1 голос
/ 21 октября 2011

На самом деле не стоит отделять временную метку от таблицы.
Вам потребуется другая таблица, а именно, timeTable.Он будет иметь два столбца id и timestmap, и вы должны ссылаться на этот идентификатор в вашей таблице tblRegDate как на внешний ключ.Внешний ключ является целым числом и имеет размер 4 байта.Дата, с другой стороны, 3 байта.

Поэтому я бы порекомендовал вам сохранить дату в вашей tblRegDate, а не в дополнительной таблице

...