XRushdy Ответов: 1

Мне нужны некоторые основные инструкции, пожалуйста


Привет,
Извините, что мой вопрос длинный, но я новичок в базах данных и мне нужна серьезная помощь
Моя проблема в том, что это моя первая профессиональная программа, это система управления магазином, но у меня есть небольшой опыт работы с базами данных
Я построил эту программу с помощью (C# & amp; SQL Server 2014)
Я боюсь обработки данных в windows form (datagridview), особенно через 1 или 2 года в базе данных будет огромное количество записей
Я вижу, что win Forms прекрасно справляется с данными, в то время как база данных содержит несколько записей только для тестирования, она идеально подходит для поиска с использованием SQL-операторов и всего остального, но я не знаю, какова будет ситуация после многих лет вставки данных

Что я уже пробовал:

Я попытался следовать теории нормализации данных в некоторых таблицах
Это простое объяснение моего проекта, для тех, кто имеет опыт, прочтите и скажите мне, что я на правильном пути или что:
У меня есть таблица для продуктов и таблица для счетов на продажу (счетов-фактур), включающая несколько столбцов: (идентификатор счета\ идентификатор клиента, общая цена, оплачено, остается, дата)
И еще одна таблица с именем (счет содержимого) в этой таблице содержатся продукты, документы, которые связаны с конкретными Билл Билл идентификатор (эта таблица будет огромной, скажем, пользователь будет вставлять 300 накладных в день, а каждый законопроект содержит около 1-5 записей в таблицы, это то, что я боюсь) и используя (присоединиться), чтобы получить счет содержимого, чтобы избежать данных повторить и уменьшить размер данных
Это правда? Это и есть концепция нормализации данных?
но по какой-то причине я должен разбить эту роль в таблице действий, чтобы каждое действие (депозит, вывод средств, операция продажи и т. д. ) было вставлено в ячейку nvarchar (MAX) для описания этой операции (Продажа, покупка или зарплата)
могу ли я это сделать, или повторная текстовая ячейка повлияет на производительность базы данных? особенно через 1 или 2 года будет огромное количество записей.

RossMW

На общие вопросы нам трудно ответить, так как ответ действительно будет зависеть от специфики.

Я предлагаю сначала книги по SQL и полное понимание баз данных, так как изменение структуры впоследствии может стать важной миссией.

Вообще говоря, если таблица правильно проиндексирована и структура правильная, то производительность SQL не будет проблемой. Соединения и индексы обычно лучше работают с полями числового типа

Старайтесь избегать nvarchar (Max), если только количество записей не мало. Лучше полностью определить размер данных и иметь соответствующий размер поля.

1 Ответов

Рейтинг:
1

Wendelius

Поскольку ваш вопрос является общим, вы можете ответить только на общем уровне, но несколько моментов вы должны рассмотреть.

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

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

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

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

О дизайне. Старайтесь отдавать предпочтение 3-й нормальной форме, это позволяет легко понять структуру базы данных. Также используйте суррогаты в качестве первичных ключей. Это поможет вам избежать ненужных обновлений в ссылочных ключевых полях.

Одна большая вещь-это типы данных. Не забудьте использовать правильные типы данных для каждого столбца. Не используйте varchar для дат и так далее. Также никогда не используйте поля, содержащие несколько элементов данных, вместо этого разделите их на отдельные столбцы.

Удачи :)


XRushdy

Я действительно ценю вашу помощь, это именно то, что мне нужно.
Очевидно, вы очень хорошо поняли мой вопрос
Итак, вы указали мне на некоторые ценные сведения, которые мне всегда были нужны, не только в этом проекте.
И я знаю, что мой вопрос примитивен (просто общая информация), но я сомневался, что кто-нибудь поймет, что я имел в виду
Теперь вы говорите, что это правильный способ работы с большой базой данных: например, две таблицы

XRushdy

Таблица законопроекта быть как:
Bill_ID (AutoNum&PrimaryKey) \ Date \ Client_ID \ notes \ etc.

XRushdy

И Билл содержание таблицы будет как:
Некоторые AutoNum в&ампер;свойства primarykey бренд \ Bill_ID \\Имя_продукта\и т. д.

XRushdy

И просто сделать так, чтобы два столбца(Bill_ID) были одним и тем же целым числом? А при извлечении конкретного содержимого счета выполните поиск в таблице содержимого записей, содержащих значение Bill_ID? Это индексация, о которой вы говорили?
И последнее, не могли бы вы объяснить в нескольких строках, что вы подразумеваете под “ также используйте суррогаты в качестве первичных ключей” или просто примените эту теорию к моему примеру, о котором я говорил).
Наконец, я хочу еще раз сказать, что ценю ваш ответ, он был так полезен, и любые другие инструкции, которые вы можете сказать об этом примере, я буду благодарен прочитать.

Wendelius

Об индексации. Первичные и уникальные ключи индексируются автоматически. Что вам нужно сделать, так это создать достаточные индексы для других столбцов для поддержки операций. Например, в вашем примере Bill_Id должен быть проиндексирован в таблице BillContent, потому что вы собираетесь использовать его чрезмерно в операторах select.

Тогда о суррогатах: это ключ, который не имеет никакой другой цели, кроме как быть просто ключом. Одним из примеров является поле autonumbered, которое вы использовали в своем примере. Вы можете найти более подробную информацию в Суррогатный ключ-Википедия[^]

XRushdy

Большое вам спасибо, это было очень полезно