我有一个我无法解决的问题。
我已经用 C# 构建了一个 ASP.NET webforms 应用程序,它将被不同的公司使用,每个公司都有自己的数据库。
当用户在网站上成功注册时,数据库创建过程就开始了,每个公司可能会有几个用户。
该应用程序包含一个主数据库,我在其中存储订阅者信息:
|ID| |SubscriberName| |SubscriberEmail| |SubscribedDate|
然后将使用以下代码为该特定用户创建一个数据库:
cmd.CommandText = "select * form Subscriber"; DataTable customerscount = new DataTable(); sda.Fill(customerscount); var createcmd = con.CreateCommand(); string dbname; if (customerscount.Rows.Count > 0) { int subcount = customerscount.Rows.Count; dbname = "User" + subcount.ToString(); } else { dbname = "User1"; } createcmd.CommandText = "CREATE DATABASE " + dbname + " COLLATE ARABIC_CI_AI_KS"; createcmd.ExecuteNonQuery(); SqlConnection newcon = new SqlConnection(); string oldconnetion = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; SqlConnectionStringBuilder scb = new SqlConnectionStringBuilder(oldconnetion); scb.InitialCatalog = dbname; newcon.ConnectionString = scb.ConnectionString; SqlCommand newcmd = new SqlCommand(); cmd.Connection = newcon; newcon.Open(); newcmd.CommandText = "CREATE TABLE [Users] ([ID][int] IDENTITY(1, 1) NOT NULL," + "[Fullname] [nvarchar] (max) NULL," + "[Username] [nvarchar] (max) NULL," + "[Password] [nvarchar] (max) NULL," + "[Type] [nvarchar] (max) NULL," + "CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"; newcmd.ExecuteNonQuery();
与我没有包括的其他表格。
我的问题是如何在登录时找出用户的数据库?
Users表将在新创建的表内:
Users
|ID| |Fullname| |Username| |Password|
很抱歉文字太长
问题相当回答了这个问题。你真的,但真的真的不想为每家公司创建一个新的数据库。您所做的是创建公司表,然后系统上的每个用户都可以属于公司(在用户表中)。即使这样,您也必须小心,因为如果不同公司的两个用户具有相同的用户名和登录名会发生什么?(提示:你不能允许这样做)。尝试运行网站,并使用各种不同的网页,每个页面都必须选择,知道,选择要操作的数据库是等待发生的巨大混乱,所有数据库代码都将很困难。
甚至一个简单的查询就可以得到他们的项目?您现在不能使用标准数据例程,它将从哪个数据库中提取?想运行一个包含 50 个不同数据库的网站?不,不会发生——只是不会。
您需要标准化您的数据。因此,例如,我们不会为 12 个月的发票创建 12 个表,而是创建一个表,并添加名为发票日期的列。现在,我们可以有尽可能多的月份。
如果您需要将公司的用途分开 - 说他们所属的公司?
然后你需要一张公司表。下一个问题是,谁来发布登录,或者他们可以自行注册?如果他们可以自行注册,他们可以注册任何公司吗?谁来管理这个?
无论如何,如果您有许多公司,并且用户属于给定的公司,则您需要一个名为 Companies 的表,然后用户位于与表公司相关的用户表中。
我的意思是,如果您需要向网站添加新功能,明天会发生什么,这需要您在数据库中添加一个新的小列 - 比如说用户的夏季住所和电话号码怎么样?
现在有 50 个数据库,你必须去尝试更新、修改和维护 50 个数据库?您将如何添加一个简单的新列,或对您的软件进行一项简单的设计更改?
这是一个非首发,一个非常糟糕的设计 - 它就是这样。这样的网站根本无法管理。它只是没有。