目次
返信内容:
解決策
ホームページ バックエンド開発 PHPチュートリアル すべてのユーザーがデータベース内の 1 つのテーブルを共有しながら、各ユーザーの注文番号が独立した名前空間を持つにはどうすればよいでしょうか?

すべてのユーザーがデータベース内の 1 つのテーブルを共有しながら、各ユーザーの注文番号が独立した名前空間を持つにはどうすればよいでしょうか?

Aug 04, 2016 am 09:20 AM
java mysql php sql データベース

1. 実際のシナリオ:
データベース内の注文テーブルは公開されており、すべてのユーザーが 1 つの注文テーブルに属します。
各ユーザーの注文番号を独立した名前空間にする方法は?たとえば、ユーザー A が 2 つの注文を行う場合、その注文番号は C001 と C002 である必要があります。ユーザー B が 3 つの注文を行う場合、その番号の開始位置はすべて C001 である必要があります。 C003.
どうやってやるの?
各ユーザーの下に、現在開いている注文の数を示すフィールドを保存し、最初にそれを読み出し、1 つ追加してから保存し直す必要がありますか?これは良くありません...データベース側でそれを行うより良い方法はありますか?誰かがデータベース関数やトリガーの使用について話しているのを聞いたような気がします。

2. データベースが上記を実行できる場合、この C001 は通常主キー フィールドに存在しますか?それとも、主キーは数値タイプの増分主キーのままで、この C001 を格納するフィールドをテーブルに追加するだけですか?

注: これは Mysql データベースにあります。

返信内容:

1. 実際のシナリオ:
データベース内の注文テーブルは公開されており、すべてのユーザーが 1 つの注文テーブルに属します。
各ユーザーの注文番号を独立した名前空間にする方法は?たとえば、ユーザー A が 2 つの注文を行う場合、その注文番号は C001 と C002 である必要があります。ユーザー B が 3 つの注文を行う場合、番号付けの開始位置は C003 ではなく C001 であり、すべての注文番号は C002、C003 である必要があります。 。
どうやってやるの?
各ユーザーの下に、現在開いている注文の数を示すフィールドを保存し、最初にそれを読み出し、1 つ追加してから保存し直す必要がありますか?これは良くありません...データベース側でそれを行うより良い方法はありますか?誰かがデータベース関数やトリガーの使用について話しているのを聞いたような気がします。

2. データベースが上記を実行できる場合、この C001 は通常主キー フィールドに存在しますか?それとも、主キーは数値タイプの増分主キーのままで、この C001 を格納するフィールドをテーブルに追加するだけですか?

注: これは Mysql データベースにあります。

1: このようにデータベースに保存する必要はありません。すべての注文を走査して順番に表示するだけです。
2: 各ユーザー属性に 静态成员变量 を追加し、それに応じてデータベースにフィールドを追加します。毎回追加されるデータは、指定した内容になります。

投稿者が意味するのは、さまざまな顧客アカウントに対して統合された注文管理ライブラリを確立することです。これは、クラウド ERP に似ています。

注文テーブルは、データストレージの一意性の観点から、重複した主キー ID を持つことができ、注文コード + ユーザー ID として表示され、データを一意に確認できます。

テーブル構造の設計を最適化する必要がある場合は、各ユーザーに応じて注文テーブルを自動的に作成し、対応するテーブル名が見つかるたびに各ユーザーの注文データを分離できます。ユーザーによれば、データは取得されますが、最後にすべてのユーザー注文データの包括的なバックグラウンド統計を取得するのは少し面倒かもしれません。

注文の一意性をどのように確認できますか

タイトルの意味に従ってデータベースが設計されている場合、注文を見つけるの操作のみが例外を引き起こします。注文番号に基づいて 固有の順序 を決定することができないためです。
主キーの値は、テーブル内のレコードを 一意に 識別するために使用されます。

(プロジェクトについて
私がお勧めします:
Orderテーブルの主キーはOrderIdにすることができます
Userテーブルの主キーはUserIdにすることができます
あなたの問題はデータベーステーブルの基本的な理解にあると思います。それをお勧めします。データベース 正規化 関連コンテンツ)

を参照してください。

  1. orderid テーブルを使用して、すべてのユーザーの次回の注文の ID を保存するのが面倒な場合は、注文番号の一部として時間を使用することをお勧めします。

  2. 主キーとしては使用できません。主キーの設計には原則があり、ビジネスとは無関係である必要があります。したがって、主キーは常に意味のない自動インクリメントIDなどになります。

あなたの質問が解決しようとしている実際のニーズがわかりません

テーブル構造の設計は、3 つの最も基本的なパラダイムの要件に準拠する必要があります。 3 つのパラダイムの目的は、フィールド間に冗長性や依存性がないことを保証することです。上記の問題については繰り返しません。このような設計は、データベース テーブル構造設計の 3 つの主要なパラダイムの原則に違反しています。そのような設計を行うべきではありません。そうでない場合は、私たちがそれを誤解しています。あなたは質問を言い換えます。または、テーブル作成ステートメントを直接投稿します。

結合主キーを使用して uid と cid を組み合わせることができ、これにより一意性が保証されます。ただし、次の 2 つの点に注意してください:
1. mysql ジョイント主キーの自動インクリメントを使用するには、ストレージ エンジンとして MyISAM を使用する必要があります。
2. ユニオンを使用して主キーを自動インクリメントする場合、自動インクリメント キーを主キーの左端のキーにすることはできません。

user_owner_order_key を注文テーブルに追加し、C001 と実際の order_id の間の交換ロジックを処理する独自のコードを記述するだけです。

リーリー

別の話になりますが、一般的に第三方支付对于同一个订单号複数回の支払いはできないので、するかどうかはよく考えた方が良いです。

解決策


  1. ユーザー テーブルには、注文数量を保存するフィールドを含めることができます。新しい注文があるたびに、この値に 1 を追加して更新します。

  2. 新しい注文は、既存の注文の数に 1 を加えたものになります。ただし、注文を削除する場合は、ソフト削除する必要があります
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの現在のステータス:Web開発動向を見てください PHPの現在のステータス:Web開発動向を見てください Apr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

See all articles