数据库设计问题 – SQL_MySQL
要求:a 表:`id`, `name` ; 作为词表,存放不同的词;b 表:`id`, `attr` ; 作为属性表,存放各种属性;其中,一个词可以有不同的多个属性;而每个词的属性的个数也不一定相同;c 表:`id`, `aid`, `bid` ; 作为关系表,存放每个词的对应关系;写出 SQL 语句,来得到每个词拥有属性总数的逆向(DESC)排序:
各种表的信息如下:
mysql> DESC `a`; DESC `b`; DESC `c`;+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || name | varchar(255) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+2 rows in set (0.00 sec)+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || attr | varchar(255) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+2 rows in set (0.01 sec)+-------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+---------------------+------+-----+---------+----------------+| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment || aid | int(8) | NO | | NULL | || bid | int(8) | NO | | NULL | |+-------+---------------------+------+-----+---------+----------------+3 rows in set (0.00 sec)
我们预先放入测试的数据,如下:
mysql> SELECT * FROM `a`; SELECT * FROM `b`; SELECT * FROM `c`;+----+------+| id | name |+----+------+| 1 | a || 2 | b || 3 | c || 4 | d || 5 | e |+----+------+5 rows in set (0.00 sec)+----+------+| id | attr |+----+------+| 1 | 111 || 2 | 112 || 3 | 113 || 4 | 123 || 5 | 221 || 6 | 231 || 7 | 252 || 8 | 278 || 9 | 292 || 10 | 256 || 11 | 578 || 12 | 653 || 13 | 521 || 14 | 502 |+----+------+14 rows in set (0.00 sec)+----+-----+-----+| id | aid | bid |+----+-----+-----+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 1 | 4 || 4 | 1 | 7 || 5 | 2 | 8 || 6 | 2 | 11 || 7 | 3 | 3 || 8 | 3 | 5 || 9 | 3 | 6 || 10 | 4 | 9 || 11 | 4 | 10 || 12 | 5 | 12 || 13 | 5 | 13 || 14 | 5 | 14 |+----+-----+-----+14 rows in set (0.00 sec)
首先执行下列语句:
mysql> SELECT COUNT(`bid`) AS `attrcounts` FROM `c` GROUP BY `aid` ORDER BY `attrcounts` DESC;+------------+| attrcounts |+------------+| 4 || 3 || 3 || 2 || 2 |+------------+5 rows in set (0.00 sec)
进而,我们再连表:
mysql> SELECT a.name, COUNT(c.bid) AS `attrcounts` FROM `c` LEFT JOIN `a` ON a.id = c.aid GROUP BY c.aid ORDER BY `attrcounts` DESC;+------+------------+| name | attrcounts |+------+------------+| a | 4 || c | 3 || e | 3 || b | 2 || d | 2 |+------+------------+5 rows in set (0.00 sec)
于是,我们得到了结果;
-------
补充一些基础知识:
如何修改已有表的列:http://www.w3school.com.cn/sql/sql_alter.asp
GROUP BY 相关知识:http://www.w3school.com.cn/sql/sql_groupby.asp

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











MongoDB テクノロジーの開発で遭遇するデータベース設計問題の解決策の探索 要約: ビッグ データとクラウド コンピューティングの急速な発展に伴い、データベース設計はソフトウェア開発において特に重要です。この記事では、開発中に遭遇する一般的なデータベース設計の問題について説明し、具体的なコード例を通じて MongoDB ソリューションを紹介します。はじめに: ソフトウェア開発プロセスでは、データベース設計が重要な役割を果たします。従来のリレーショナル データベースには、大規模なデータを処理する際のパフォーマンスとスケーラビリティの問題がありました。そしてMongoD

インターネットの普及とアプリケーション シナリオの増加に伴い、データベース設計は非常に重要な問題になっています。データベース設計において、冗長フィールドは非常に重要な問題です。冗長フィールドとは、データベースの設計時に表示される重複フィールドまたは不要なフィールドを指します。冗長フィールドはクエリの効率と速度をある程度向上させることができますが、ストレージ領域を無駄にし、メンテナンスの難易度を高め、さらにはデータの一貫性やセキュリティに影響を与えることもあります。したがって、PHP プログラミングでは、冗長フィールドによって引き起こされる問題を解決するには、特定のベスト プラクティスに従う必要があります。

Golang は Google が開発したプログラミング言語で、その使いやすさ、優れたパフォーマンス、クロスプラットフォーム機能により、最新の Web アプリケーション開発で人気が高まっています。 Web アプリケーション開発において、データベース設計は非常に重要な部分です。この記事では、Golangを使ってWebアプリケーションを開発する際のデータベース設計の実践方法を紹介します。データベースの選択 まず、適切なデータベースを選択する必要があります。 Golang は、MySQL、Po などのさまざまなデータベースをサポートしています。

MySQL データベースの設計: 注文システムのメニュー リスト はじめに: ケータリング業界では、注文システムの設計と実装が非常に重要です。中心となるデータ テーブルの 1 つであるメニュー テーブルについて、この記事では、オーダリング システムの機能をサポートする効果的なメニュー テーブルの設計と作成方法を詳しく紹介します。 1. 要件分析 メニューリストを設計する前に、システムの要件と機能を明確にする必要があります。注文システムでは、メニュー テーブルに、料理名、価格、分類、説明など、各料理に関する関連情報を保存する必要があります。さらに、食器についても考慮する必要があります

PHP で製品の複数仕様 SKU のデータベース設計を実装する方法 電子商取引プラットフォームでは、製品仕様は非常に重要な概念です。製品仕様は、サイズ、色、重量など、製品のさまざまな属性や特性として理解できます。実際のアプリケーションでは、さまざまな仕様に対して、組み合わせごとに異なる価格、在庫、写真、その他の情報を設定する必要があることがよくあります。そのためには、製品仕様と関連情報を保存および管理するための適切なデータベース構造を設計する必要があります。この記事では、PHP で製品のマルチ仕様 SKU を実装する方法を紹介します。

MySQLMVCC を使用してデータベース設計を最適化し、アプリケーションのパフォーマンスを向上させる 概要: 今日のインターネット アプリケーションでは、データベースのパフォーマンスはシステムの安定した動作と応答時間にとって非常に重要です。最も一般的に使用されているリレーショナル データベース管理システムの 1 つである MySQL は、マルチバージョン同時実行制御 (MVCC) を使用して、データベース設計時の同時実行パフォーマンスとデータの一貫性を向上させます。この記事では、MVCC の基本原理と MySQL でのその実装を紹介し、データベース設計を最適化する例をいくつか示します。 MVCC マルチバージョン同時実行の基本原則

この記事では、MySQLデータベーステーブルの設計と作成を紹介します。 1.リレーショナルデータベース、表、フィールドなどの重要な概念を理解し、パラダイム設計に従います。 2。SQLステートメントを使用して、作成可能なステートメントなどのテーブルを作成し、プライマリキーや一意のキーなどの制約を設定します。 3.インデックスを追加してクエリ速度を改善し、外部キーを使用してデータの整合性を維持します。 4.不適切なフィールドタイプの選択、不合理なインデックス設計、データの整合性の無視などの問題を避けます。 5.適切なストレージエンジンを選択し、SQLステートメントとデータベースパラメーターを最適化してパフォーマンスを向上させます。これらの手順を学習することで、MySQLデータベーステーブルを効率的に作成および管理できます。

データベース設計における MySQL 複合主キーの応用の詳細説明 MySQL 複合主キーとは、複数のフィールドで構成される主キーを指し、これらのフィールドの値を組み合わせることでレコードを一意に識別します。データベース設計では、特にエンティティを一意に識別する必要がある場合に、複合主キーが広く使用されています。この記事では、MySQL 複合主キーの概念、設計原則、具体的なコード例を詳しく紹介します。 1. MySQL 複合主キーの概念 MySQL では、主キーはテーブル内のデータの各行を一意に識別するために使用されるフィールドです。
