Member 14561189 Ответов: 3

Как я могу иметь новую таблицу каждый раз, когда я создаю нового пользователя?


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

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

Я знаю, если я использую что-то вроде этого:
SqlCommand cmd = new SqlCommand("create table <Table Name>(empno int,empname varchar(50),salary money);", conn);


он будет создавать только 1 имя таблицы для каждого пользователя, я хочу, чтобы их имена таблиц были такими:
<имя пользователя="">_time

Как мне это реализовать? пожалуйста помочь

MadMyche

Можете ли вы объяснить логику, стоящую за этим? У вас будет 1 таблица на пользователя и только 1 запись на таблицу. Кажется, это не имеет смысла

3 Ответов

Рейтинг:
2

RickZeeland

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

Взгляните на дизайн здесь: Учебное пособие - создание базы данных управления контактами MS Access[^]

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

Вот пример SQL Server: Образец базы данных SQL Server[^]
Кстати, вам не нужно использовать код для создания таблиц и отношений. это также можно сделать в среде SQL Server Management Studio визуальным способом.
Кроме того, вам не нужно использовать схемы, если ваши потребности просты.

А вот пример на языке Си#: Примеры кода - Microsoft SQL Server[^]


Member 14561189

благодаря ссылке братан, теперь я понимаю, что мне нужно реализовать отношения один-к-одному (относительно моего проекта) есть ли у вас что-то похожее, но с использованием базы данных .mdf?

RickZeeland

Смотрите обновленное решение :)

Maciej Los

5ed!

Рейтинг:
0

OriginalGriff

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

SELECT EmpName, Salary FROM Employees ORDER BY Salary DESC


Maciej Los

5ed!

Рейтинг:
0

Patrice T

Цитата:
Я хочу, чтобы каждый раз, когда я создаю нового пользователя, у него будет своя собственная таблица внутри

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

Проблемы у вас есть:
- что вы делаете, когда 2 сотрудника имеют одинаковое имя ?
- Как вы проверяете, что новый номер сотрудника еще не существует ?
Пример: на компанию из 1000 человек, с вашим решением, вы должны прочитать 1000 таблиц, с одной таблицей и индексом, поиск выполняется в 10 чтениях.

База Данных - Википедия[^]
Введение в SQL[^]


Maciej Los

5ed!

Patrice T

Спасибо