ホームページ データベース mysql チュートリアル 让你提前认识软件开发(27):数据库表及索引的创建

让你提前认识软件开发(27):数据库表及索引的创建

Jun 07, 2016 pm 03:57 PM
作成する データベース 索引 ソフトウェア開発

第2部分 数据库SQL语言 数据库表及索引的创建 数据表 (或称 表 ),是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质的内容。举个例子来说,数据库就像是一座空旷的房子,而数据表是里面的家具,没有家具的房子只是一个空壳而已。根据信

第2部分 数据库SQL语言

数据库表及索引的创建

数据表(或称),是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质的内容。举个例子来说,数据库就像是一座空旷的房子,而数据表是里面的家具,没有家具的房子只是一个空壳而已。根据信息的分类情况,一个数据库中可能包含若干个不同用途的数据表。

表结构有简单、有复杂,这就对开发人员提出了要求。如何设计一个表的字段才是最好的?表的字段如何命名?如何定义表字段的类型?如何建立索引?等等。

1. 修改之前的建表脚本

在作者从事过的某项目中,有一个建表脚本(基于Sybase数据库)样例如下:

-- XXX

create table tb_XXX

(

AAA varchar(30) not null, -- AAA

BBB int not null, -- BBB

. . . . . .

. . . . . .

processtime1 varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

processtime2 varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

processtime3 varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

. . . . . .

nextprocesstime varchar(24) default('') not null, -- yyyy.mm.dd hh24:mi:ss

. . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

go

可以看出,以上的建表脚本至少存在以下问题:

(1) 字段命名不是很恰当。如红色字体所示的processtime1、processtime2、processtime3,在看完之后,还不知道它们到底是什么意思。因此,对于字段的命名,要做到直观易懂,不要让别人去猜。

(2) 时间字段的默认值为空。如红色字体所示的nextprocesstime字段,其默认值为空。一般而言,对于数据库建表脚本中的时间字段,如无特殊用途,其默认值最好设置为当前时间。

(3) 建立的索引数目过少,且在时间字段上面未建立索引。在表中很多个字段,而只建立了两个索引,个数偏少,可考虑增加索引数目。此外,表中有多个时间字段,但未在其上面建立索引,要求只要在表中出现了时间字段,都要考虑在其上建立索引。

2. 修改之后的建表脚本

修改之后的脚本样例如下:

-- XXX

create table tb_XXX

(

AAA varchar(30) not null, -- AAA

BBB int not null, -- BBB

. . . . . .

. . . . . .

firstprocesstime varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

secondprocesstime varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

thirdprocesstime varchar(24) default('') null, -- yyyy.mm.dd hh24:mi:ss

. . . . . .

nextprocesstime varchar(24) default convert(varchar,getdate(),102)+' '+convert(varchar,getdate(),108) not null, -- yyyy.mm.dd hh24:mi:ss

. . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

create index idx4_tb_XXX on tb_XXX(nextprocesstime)

go

修改的地方如红色字体所示。与之前的脚本相比,修改了nextprocesstime字段的默认值,将索引数目增加到3个,在时间字段上建立了索引。此外,根据一般的经验,大表索引个数不超过5个,索引最大字段数不超过4个。

3. 总结

表是数据库中最重要的数据结构之一,在创建表的过程中,一定要遵循命名规范、信息准确、索引恰当等原则。

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Jun 03, 2024 pm 02:20 PM

Golang でデータベース コールバック関数を使用すると、次のことを実現できます。 指定されたデータベース操作が完了した後にカスタム コードを実行します。追加のコードを記述せずに、個別の関数を通じてカスタム動作を追加します。コールバック関数は、挿入、更新、削除、クエリ操作に使用できます。コールバック関数を使用するには、sql.Exec、sql.QueryRow、または sql.Query 関数を使用する必要があります。

GolangでJSONデータをデータベースに保存するにはどうすればよいですか? GolangでJSONデータをデータベースに保存するにはどうすればよいですか? Jun 06, 2024 am 11:24 AM

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

Golangを使用してリモートデータベースに接続するにはどうすればよいですか? Golangを使用してリモートデータベースに接続するにはどうすればよいですか? Jun 01, 2024 pm 08:31 PM

Go 標準ライブラリのデータベース/SQL パッケージを通じて、MySQL、PostgreSQL、SQLite などのリモート データベースに接続できます。データベース接続情報を含む接続文字列を作成します。 sql.Open() 関数を使用してデータベース接続を開きます。 SQL クエリや挿入操作などのデータベース操作を実行します。 defer を使用してデータベース接続を閉じ、リソースを解放します。

さまざまなデータベースへの PHP 接続: MySQL、PostgreSQL、Oracle など さまざまなデータベースへの PHP 接続: MySQL、PostgreSQL、Oracle など Jun 01, 2024 pm 03:02 PM

PHP データベース接続ガイド: MySQL: MySQLi 拡張機能をインストールし、接続 (サーバー名、ユーザー名、パスワード、データベース名) を作成します。 PostgreSQL: PgSQL 拡張機能をインストールし、接続 (ホスト、データベース名、ユーザー、パスワード) を作成します。 Oracle: OracleOCI8 拡張機能をインストールし、接続 (サーバー名、ユーザー名、パスワード) を作成します。実際のケース: MySQL データ、PostgreSQL クエリ、OracleOCI8 更新レコードを取得します。

C++ を使用してデータベース接続と操作を処理するにはどうすればよいですか? C++ を使用してデータベース接続と操作を処理するにはどうすればよいですか? Jun 01, 2024 pm 07:24 PM

C++ の DataAccessObjects (DAO) ライブラリを使用して、データベース接続の確立、SQL クエリの実行、新しいレコードの挿入、既存のレコードの更新など、データベースに接続して操作します。具体的な手順は次のとおりです。 1. 必要なライブラリ ステートメントを含めます。 2. データベース ファイルを開きます。 3. SQL クエリを実行するかデータを操作するための Recordset オブジェクトを作成します。 4. 特定のニーズに応じて結果をスキャンするか、レコードを更新します。

See all articles