Heim Datenbank MySQL-Tutorial 连锁创建分店数据库方法

连锁创建分店数据库方法

Jun 07, 2016 pm 04:02 PM
NEIN 创建 数据库 方法 结构 软件

连锁软件中,数据库结构不外两种,一种是所有数据都放同一个数据库,包括总部,另一种是总部独立数据库,每个分店一个数据库,而我常用的就是独立的数据库。 这两种方法各有优势,数据放同一个数据库,各分店之间数据进行交互时会非常方便,有统计之类的,也

  连锁软件中,数据库结构不外两种,一种是所有数据都放同一个数据库,包括总部,另一种是总部独立数据库,每个分店一个数据库,而我常用的就是独立的数据库。

  这两种方法各有优势,数据放同一个数据库,各分店之间数据进行交互时会非常方便,有统计之类的,也是直接在数据库上操作,没那么多麻烦,不好的地方就是,数据一多,不便于维护,也得去考虑分页等问题。而第二个方法就是刚上和第一个的好坏相反,但是我觉得分开的话数据会非常清晰,维护方便,当然这只是针对我们软件数据库之间交互不多的情况,可能有的数据库之间交互数据比较频繁,就是用第一个方法,没有什么维护问题,也会选择第一,各有好坏,看各人使用。

  独立数据库就得处理创建分店时怎么创建数据库的问题,因为软件是一直在更新的,也就是数据库也是一直更新,所以创建分店数据库,也必须是灵活的。

  (Mssql)最早用的的方法:会在总部放一个数据库的备份文件(Bak),每次更新就是覆盖Bak文件,而创建数据库的思路,1.把model数据库备份成model.bak,2.把bak文件还原到model中,3.直接用create database 语句就可以建一个分店数据库了,4.用model.bak还原回model数据库,【注意:创建数据库时,都会以model数据库模版来创建,这里正是利用这个】

  这个方法是可以实现创建分店,但是比较笨,每次更新都要在更新文件里加个数据库bak文件,而且数据库都一直在增大,虽然是空数据库,只有表结构等这些东西,但也得8M+,这在更新时带来很多麻烦,于是后面又想到一个方法,在原有基础上改进。

  (Mssql)改进的方法:1.在安装软件时,会在mssql server上创建一个模版数据库,这个模版数据库也可以看作一个分店的数据库,软件更新时,会更新这个数据库,更新完会备份这个模版数据库,覆盖总部中的Bak文件,后面创建分店时怎么创建数据库的还是没变,和上面一样。这里改进的主要就是数据库模版问题,这样做的话,就不用每次更新带上数据库文件了。

  最初的软件就一直使用这个方法到现在。

  最近有一套新软件,在数据库的设计上又是遇到这问题,我总觉得改进过的方法也不是很方便,于是又想到下面的改进方法。

1.保持使用模版数据库,模版数据库随分店的更新一同更新,Bak文件使用不上了,作废。2.在创建分店时,先创建一个空的数据库,然后通过程序读取模版数据库的所有结构到新数据库上执行,简单点说就是通过程序来复制模版数据库的所有结构。

这样就不用再使用Bak那样的笨重文件了,而且数据库可以独立一个服务器,老方法是数据库和软件必须同一个服务器,因为要依赖放在总部里的Bak文件,而现在数据库和软件就可以脱离,模版数据库保护最新,分店创建新数据库复制模版数据库的结构,问题都解决 了。

随带说一下Mysql,因为我们软件是兼容多种数据库的,Mysql也是其中,前期mysql和mssql的思路是一样的,都是通过更新数据库文件,用数据库备份文件来创建新数据库,后面Mysql也改成这种最优的方法:1.软件安装完,自动创建一个模版数据库,2.创建新分店时,会把数据库备份成sql文件,再在程序中修改sql文件中的数据库名称,3.执行sql文件。这里mysql和mssql不一样的地方就是,mssql的复制表结构,必须一个一个去模版数据读出来再在新数据库上执行,而mysql的备份就是导出数据库的所有结构,我们只需要修改一个数据库名称为新的数据库执行。

下面附上C#里复制数据库的方法:

public void InitialData(string ModelDataBaseName, string DataBaseName)
        {
            #region 处理表和表数据
            string strSql_GetUserTable = string.Format("select * from {0}.dbo.GetUserTable order by id,columnsort ", ModelDataBaseName);
            DataTable dt_GetUserTable = dbHelper.ExecuteQuery(CommandType.Text, strSql_GetUserTable, null).Tables[0];
            if (dt_GetUserTable.Rows.Count > 0)
            { 
                //id,tablename,columnsort,columnname,tablekey,columndatatype,columndatalen1
                //columndatalen2,columndatafloat,allowisnull,defaultdata
                string tableName = "";
                StringBuilder strCreateTableSql = new StringBuilder();
                StringBuilder strKeySql = new StringBuilder();
                StringBuilder strInsertData = new StringBuilder();

                foreach (DataRow dr in dt_GetUserTable.Rows)
                {
                    if (dr["tablename"].ToString() != tableName)
                    {
                        if (!string.IsNullOrEmpty(strCreateTableSql.ToString()))
                        {                           
                            if (strKeySql.Length > 0)
                            {
                                strKeySql.Remove(strKeySql.Length - 1, 1);
                                strCreateTableSql.AppendFormat(" PRIMARY KEY CLUSTERED ( {0} )) ON [PRIMARY] ", strKeySql.ToString());
                                strKeySql.Remove(strKeySql.Length - 1, 1);

                            }
                            else
                            {
                                if (strCreateTableSql.ToString().EndsWith(","))
                                strCreateTableSql.Remove(strCreateTableSql.Length - 1, 1);
                                strCreateTableSql.Append(" )");
                            }
                            dbHelper.ExecuteNonQuery(DataBaseName, strCreateTableSql.ToString(), null);
                            dbHelper.ExecuteNonQuery(CommandType.Text, string.Format(" insert into {0}.dbo.{1} select * from {2}.dbo.{1} ", DataBaseName, tableName, ModelDataBaseName), null);
                        }
                        tableName = dr["tablename"].ToString();
                        strCreateTableSql.Clear(); strCreateTableSql = new StringBuilder();
                        strKeySql.Clear(); strKeySql = new StringBuilder();
                        strCreateTableSql.AppendFormat(" create table {0} (", tableName);
                    }
                    strCreateTableSql.Append(dbHelper.GetDataType(dr["columnname"].ToString(),dr["columndatatype"].ToString(), dbHelper.GetInt(dr["columndatalen2"].ToString()),
                        dbHelper.GetInt(dr["columndatafloat"].ToString()), dr["allowisnull"].ToString(), dr["tablekey"].ToString(),ref strKeySql));
                }
                if (!string.IsNullOrEmpty(strCreateTableSql.ToString()))
                {
                    if (strKeySql.Length > 0)
                    {
                        strKeySql.Remove(strKeySql.Length - 1, 1);
                        strCreateTableSql.AppendFormat(" PRIMARY KEY CLUSTERED ( {0} )) ON [PRIMARY] ", strKeySql.ToString());
                        strKeySql.Remove(strKeySql.Length - 1, 1);
                    }
                    else
                    {
                        if (strCreateTableSql.ToString().EndsWith(","))
                            strCreateTableSql.Remove(strCreateTableSql.Length - 1, 1);
                        strCreateTableSql.Append(" )");
                    }
                    dbHelper.ExecuteNonQuery(DataBaseName, strCreateTableSql.ToString(), null);
                    dbHelper.ExecuteNonQuery(CommandType.Text, string.Format(" insert into {0}.dbo.{1} select * from {2}.dbo.{1} ", DataBaseName, tableName, ModelDataBaseName), null);
                }
            }
            #endregion

            #region 存储过程、视图、函数、触发器
            StringBuilder strSql = new StringBuilder();
            strSql.AppendFormat("  select name,type,definition from {0}.dbo.GetUserPV  ",ModelDataBaseName);
            DataTable dt_GetUserPV = dbHelper.ExecuteQuery(CommandType.Text, strSql.ToString(), null).Tables[0];
            if (dt_GetUserPV.Rows.Count > 0)
            {
                StringBuilder strTest = new StringBuilder();
                foreach (DataRow dr in dt_GetUserPV.Rows)
                {
                    dbHelper.ExecuteNonQuery(DataBaseName, string.Format("{0}", dr["definition"].ToString()), null);
                }
                
            }
            #endregion
        }
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So stellen Sie gelöschte Kontakte auf WeChat wieder her (ein einfaches Tutorial erklärt Ihnen, wie Sie gelöschte Kontakte wiederherstellen) So stellen Sie gelöschte Kontakte auf WeChat wieder her (ein einfaches Tutorial erklärt Ihnen, wie Sie gelöschte Kontakte wiederherstellen) May 01, 2024 pm 12:01 PM

Leider löschen Menschen aus bestimmten Gründen oft versehentlich bestimmte Kontakte. WeChat ist eine weit verbreitete soziale Software. Um Benutzern bei der Lösung dieses Problems zu helfen, wird in diesem Artikel erläutert, wie gelöschte Kontakte auf einfache Weise wiederhergestellt werden können. 1. Verstehen Sie den WeChat-Kontaktlöschmechanismus. Dies bietet uns die Möglichkeit, gelöschte Kontakte wiederherzustellen. Der Kontaktlöschmechanismus in WeChat entfernt sie aus dem Adressbuch, löscht sie jedoch nicht vollständig. 2. Nutzen Sie die integrierte „Kontaktbuch-Wiederherstellung“-Funktion von WeChat, um Zeit und Energie zu sparen. Mit dieser Funktion können Benutzer schnell gelöschte Kontakte wiederherstellen. 3. Rufen Sie die WeChat-Einstellungsseite auf und klicken Sie auf die untere rechte Ecke, öffnen Sie die WeChat-Anwendung „Me“ und klicken Sie auf das Einstellungssymbol in der oberen rechten Ecke, um die Einstellungsseite aufzurufen.

So stellen Sie die Schriftgröße auf dem Mobiltelefon ein (Schriftgröße auf dem Mobiltelefon einfach anpassen) So stellen Sie die Schriftgröße auf dem Mobiltelefon ein (Schriftgröße auf dem Mobiltelefon einfach anpassen) May 07, 2024 pm 03:34 PM

Das Festlegen der Schriftgröße ist zu einer wichtigen Personalisierungsanforderung geworden, da Mobiltelefone zu einem wichtigen Werkzeug im täglichen Leben der Menschen geworden sind. Um den Bedürfnissen verschiedener Benutzer gerecht zu werden, wird in diesem Artikel erläutert, wie Sie das Nutzungserlebnis Ihres Mobiltelefons verbessern und die Schriftgröße des Mobiltelefons durch einfache Vorgänge anpassen können. Warum müssen Sie die Schriftgröße Ihres Mobiltelefons anpassen? Durch Anpassen der Schriftgröße kann der Text klarer und leichter lesbar werden. Geeignet für die Lesebedürfnisse von Benutzern unterschiedlichen Alters. Praktisch für Benutzer mit Sehbehinderung, die Schriftgröße zu verwenden Einstellungsfunktion des Mobiltelefonsystems – So rufen Sie die Systemeinstellungsoberfläche auf – Suchen und geben Sie die Option „Anzeige“ in der Einstellungsoberfläche ein – suchen Sie die Option „Schriftgröße“ und passen Sie sie mit einem Drittanbieter an Anwendung – Laden Sie eine Anwendung herunter und installieren Sie sie, die die Anpassung der Schriftgröße unterstützt – öffnen Sie die Anwendung und rufen Sie die entsprechende Einstellungsoberfläche auf – je nach Person

Das Geheimnis des Ausbrütens mobiler Dracheneier wird gelüftet (Schritt für Schritt erfahren Sie, wie Sie mobile Dracheneier erfolgreich ausbrüten) Das Geheimnis des Ausbrütens mobiler Dracheneier wird gelüftet (Schritt für Schritt erfahren Sie, wie Sie mobile Dracheneier erfolgreich ausbrüten) May 04, 2024 pm 06:01 PM

Mobile Spiele sind mit der Entwicklung der Technologie zu einem festen Bestandteil des Lebens der Menschen geworden. Mit seinem niedlichen Drachenei-Bild und dem interessanten Schlüpfvorgang hat es die Aufmerksamkeit vieler Spieler auf sich gezogen, und eines der Spiele, das viel Aufmerksamkeit erregt hat, ist die mobile Version von Dragon Egg. Um den Spielern dabei zu helfen, ihre eigenen Drachen im Spiel besser zu kultivieren und zu züchten, erfahren Sie in diesem Artikel, wie Sie Dracheneier in der mobilen Version ausbrüten. 1. Wählen Sie den geeigneten Drachenei-Typ aus, der Ihnen gefällt und zu Ihnen passt, basierend auf den verschiedenen Arten von Drachenei-Attributen und -Fähigkeiten, die im Spiel zur Verfügung stehen. 2. Verbessern Sie die Stufe der Brutmaschine, indem Sie Aufgaben erledigen und Requisiten sammeln. Die Stufe der Brutmaschine bestimmt die Schlüpfgeschwindigkeit und die Erfolgsquote beim Schlüpfen. 3. Sammeln Sie die Ressourcen, die die Spieler zum Schlüpfen benötigen

iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen Jul 18, 2024 am 05:48 AM

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

So wählen Sie eine Handy-Displayschutzfolie zum Schutz Ihres Handy-Displays aus (einige wichtige Punkte und Tipps zum Kauf von Handy-Displayschutzfolien) So wählen Sie eine Handy-Displayschutzfolie zum Schutz Ihres Handy-Displays aus (einige wichtige Punkte und Tipps zum Kauf von Handy-Displayschutzfolien) May 07, 2024 pm 05:55 PM

Handyfolie ist mit der Beliebtheit von Smartphones zu einem unverzichtbaren Zubehör geworden. Um die Lebensdauer zu verlängern, wählen Sie eine geeignete Handyfolie zum Schutz des Handydisplays. Um den Lesern die Auswahl der am besten geeigneten Handyfolie zu erleichtern, werden in diesem Artikel einige wichtige Punkte und Tipps zum Kauf von Handyfolien vorgestellt. Machen Sie sich mit den Materialien und Arten von Mobiltelefonfolien vertraut: PET-Folie, TPU usw. Mobiltelefonfolien bestehen aus einer Vielzahl von Materialien, einschließlich gehärtetem Glas. PET-Folie ist relativ weich, Hartglasfolie weist eine gute Kratzfestigkeit auf und TPU weist eine gute Stoßfestigkeit auf. Bei der Auswahl kann auf der Grundlage persönlicher Vorlieben und Bedürfnisse entschieden werden. Berücksichtigen Sie den Grad des Displayschutzes. Verschiedene Arten von Handyfolien haben unterschiedliche Grade des Displayschutzes. PET-Folie spielt hauptsächlich eine kratzfeste Rolle, während Hartglasfolie eine bessere Fallfestigkeit aufweist. Sie können sich dafür entscheiden, besser zu sein

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Jun 04, 2024 pm 01:42 PM

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

Umgang mit Datenbankverbindungsfehlern in PHP Umgang mit Datenbankverbindungsfehlern in PHP Jun 05, 2024 pm 02:16 PM

Um Datenbankverbindungsfehler in PHP zu behandeln, können Sie die folgenden Schritte ausführen: Verwenden Sie mysqli_connect_errno(), um den Fehlercode abzurufen. Verwenden Sie mysqli_connect_error(), um die Fehlermeldung abzurufen. Durch die Erfassung und Protokollierung dieser Fehlermeldungen können Datenbankverbindungsprobleme leicht identifiziert und behoben werden, wodurch der reibungslose Betrieb Ihrer Anwendung gewährleistet wird.

Die gesamte Software wird mit WPS geöffnet und die standardmäßige EXE-Öffnungsmethode wird wiederhergestellt. Die gesamte Software wird mit WPS geöffnet und die standardmäßige EXE-Öffnungsmethode wird wiederhergestellt. Jun 19, 2024 am 01:48 AM

Die gesamte Software auf dem Computer meines Freundes wurde mit WPS geöffnet und kann nicht normal ausgeführt werden. Alle Exes können nicht geöffnet werden, einschließlich des Task-Managers, der Registrierung, der Systemsteuerung, der Einstellungen usw. Beim Öffnen werden alle WPS-Zeichen verstümmelt angezeigt. Diese Situation kann nicht aus der Ferne behoben werden. Die Remote-Software ist ebenfalls eine Exe, die unlösbar zu sein scheint. Schauen wir uns an, wie 20 funktioniert, um den Computer des Freundes wieder in den Normalzustand zu versetzen. Dies liegt daran, dass die Öffnungsmethode der Exe-Datei in WPS geändert wurde und Sie nur die Standardöffnungsmethode wiederherstellen müssen. Er0 exportiert die Exe-Registrierungsinformationen auf einen normalen Computer und stellt sie auf der Website bereit. Da der Browser geöffnet werden kann, führen Sie mich bitte dazu, unsere Website zu öffnen, die Registrierungsinformationen zu kopieren, ein neues Textdokument auf dem Desktop zu erstellen und es als [Dateiname: 1.reg; Speichertyp: Alle Dateien (*.

See all articles